增加 "点击数据目录时,在列表中不显示子目录下的种子。"选项;Fixed #35

This commit is contained in:
ronggang 2018-04-11 17:14:11 +08:00
parent e6fe563635
commit 22fafa1d39
6 changed files with 34 additions and 13 deletions

View File

@ -207,7 +207,8 @@ system.defaultLang = {
"show-bt-servers": "Show 'BT servers' on Trackers.",
"restore-default-settings": "Restore UI Default Settings",
"language": "Language:",
"loading": "Loading..."
"loading": "Loading...",
"hide-subfolders": "When clicking on the data directory, hide subfolders content in the list."
},
"public": {
"button-ok": "OK",

View File

@ -206,7 +206,8 @@ system.lang = {
"show-bt-servers": "在『服务器分布』中显示『BT』服务器列表。",
"restore-default-settings": "恢复界面默认设置(含主题)",
"language": "界面语言:",
"loading": "正在加载..."
"loading": "正在加载...",
"hide-subfolders": "点击数据目录时,在列表中不显示子目录下的种子。"
},
"public": {
"button-ok": "确定",

View File

@ -1,4 +1,4 @@
var system={version:"1.5.1 update-2",rootPath:"tr-web-control/",codeupdate:"20180330",configHead:"transmission-web-control",config:{autoReload:true,reloadStep:5E3,pageSize:30,pagination:true,pageList:[10,20,30,40,50,100,150,200,250,300],defaultSelectNode:null,autoExpandAttribute:false,defaultLang:"",foldersShow:false,theme:"default",showBTServers:false,ui:{status:{tree:{},layout:{main:{},body:{},left:{}},panel:{},size:{nav:{},attribute:{}}}}},storageKeys:{dictionary:{folders:"dictionary.folders"}},
var system={version:"1.5.1 update-2",rootPath:"tr-web-control/",codeupdate:"20180330",configHead:"transmission-web-control",config:{autoReload:true,reloadStep:5E3,pageSize:30,pagination:true,pageList:[10,20,30,40,50,100,150,200,250,300],defaultSelectNode:null,autoExpandAttribute:false,defaultLang:"",foldersShow:false,theme:"default",showBTServers:false,ui:{status:{tree:{},layout:{main:{},body:{},left:{}},panel:{},size:{nav:{},attribute:{}}}},hideSubfolders:false},storageKeys:{dictionary:{folders:"dictionary.folders"}},
dictionary:{folders:null},checkUpdateScript:"https://raw.githubusercontent.com/ronggang/twc-release/master/update.json",contextMenus:{},panel:null,lang:null,reloading:false,autoReloadTimer:null,downloadDir:"",islocal:false,B64:new Base64,currentTorrentId:0,control:{tree:null,torrentlist:null},userConfig:{torrentList:{fields:[],sortName:null,sortOrder:"asc"}},serverConfig:null,serverSessionStats:null,templates:{},checkedRows:[],loadCount:0,setlang:function(a,b){a||(a=this.config.defaultLang?this.config.defaultLang:
navigator.language||navigator.browserLanguage);a||(a="zh-CN");if(a.indexOf("-")!=-1)a=a.split("-")[0].toLocaleLowerCase()+"-"+a.split("-")[1].toLocaleUpperCase();this.languages[a]||(a="en");$.getScript(system.rootPath+"lang/"+a+".js",function(){system.lang=$.extend(true,system.defaultLang,system.lang);system.resetLangText();$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-"+a.replace("-","_")+".js").done(function(){b&&b()}).fail(function(){$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-en.js",
function(){b&&b()})})})},init:function(a,b){this.readConfig();this.lastUIStatus=JSON.parse(JSON.stringify(this.config.ui.status));this.islocal=b==1?true:false;this.panel={main:$("#main"),top:$("#m_top"),toolbar:$("#m_toolbar"),left_layout:$("#m_left_layout"),left:$("#m_left"),body:$("#m_body"),layout_body:$("#layout_body"),layout_left:$("#layout_left"),list:$("#m_list"),attribute:$("#m_attribute"),bottom:$("#m_bottom"),title:$("#m_title"),status:$("#m_status"),statusbar:$("#m_statusbar"),status_text:$("#status_text"),
@ -67,11 +67,11 @@ function(){$("#layout_left").layout("collapse","south")})}},updateTreeNodeText:f
a.target)},loadTorrentToList:function(a){if(transmission.torrents.all){jQuery.extend({node:null,page:1},a);if(a.node){var b=null,c=this.panel.left.tree("getParent",a.node.target)||{id:""},d=this.panel.left.data("currentNodeId");if(d!=a.node.id){this.control.torrentlist.datagrid("uncheckAll");this.control.torrentlist.datagrid({pageNumber:1});d=a.node.id}this.panel.left.data("currentNodeId",d);switch(c.id){case "servers":case "btservers":b=a.node.id=="btservers"?transmission.torrents.btItems:transmission.trackers[a.node.id].torrents;
break;default:switch(a.node.id){case "torrent-all":case "servers":b=transmission.torrents.all;break;case "paused":b=transmission.torrents.status[transmission._status.stopped];break;case "sending":b=transmission.torrents.status[transmission._status.seed];break;case "seedwait":b=transmission.torrents.status[transmission._status.seedwait];break;case "check":b=transmission.torrents.status[transmission._status.check];break;case "checkwait":b=transmission.torrents.status[transmission._status.checkwait];
break;case "downloading":b=transmission.torrents.status[transmission._status.download];break;case "downloadwait":b=transmission.torrents.status[transmission._status.downloadwait];break;case "actively":b=transmission.torrents.actively;break;case "error":b=transmission.torrents.error;break;case "warning":b=transmission.torrents.warning;break;case "search-result":b=transmission.torrents.searchResult;break;case "btservers":b=transmission.torrents.btItems;break;default:if(a.node.id.indexOf("folders-")!=
-1)if(c=transmission.torrents.folders[a.node.id])b=c.torrents}}if(this.config.defaultSelectNode!=a.node.id){this.control.torrentlist.datagrid("loadData",[]);this.config.defaultSelectNode=a.node.id;this.saveConfig()}a=[];for(var e in b){if(!b[e])return;c=this.lang.torrent["status-text"][b[e].status];parseFloat(b[e].percentDone*100).toFixed(2);c==transmission._status.check&&parseFloat(b[e].recheckProgress*100).toFixed(2);if(b[e].error!=0)c="<span class='text-status-error'>"+c+"</span>";else if(b[e].warning)c=
"<span class='text-status-warning' title='"+b[e].warning+"'>"+c+"</span>";d={};d=$.extend(d,b[e]);d.status=c;d.statusCode=b[e].status;d.completeSize=Math.max(0,b[e].totalSize-b[e].leftUntilDone);d.leecherCount=b[e].leecher;d.seederCount=b[e].seeder;a.push(d)}this.updateTorrentCurrentPageDatas(a)}}},updateTorrentCurrentPageDatas:function(a){var b=this.control.torrentlist.datagrid("getRows");if(a.length==0&&b.length>0)this.control.torrentlist.datagrid("loadData",[]);else{var c=this.control.torrentlist.datagrid("options"),
d=null;if(c.sortName){d=c.sortName;a=a.sort(arrayObjectSort(d,c.sortOrder))}if(b.length==0||a.length!=this.control.torrentlist.datagrid("getData").total&&a.length>c.pageSize)this.control.torrentlist.datagrid({loadFilter:pagerFilter,pageNumber:c.pageNumber,sortName:d,sortOrder:c.sortOrder}).datagrid("loadData",a);else{this.control.torrentlist.datagrid("getData").originalRows=a;d=(c.pageNumber-1)*parseInt(c.pageSize);c=d+parseInt(c.pageSize);a=a.slice(d,c);c={};d={};for(var e in transmission.torrents.recently){var f=
transmission.torrents.recently[e];c[f.id]=true}for(e in a){f=a[e];d[f.id]=f}var g={};for(e=b.length-1;e>=0;e--){f=b[e];var h=d[f.id];if(h)if(c[f.id]){this.control.torrentlist.datagrid("updateRow",{index:e,row:h});g[f.id]=f}else if(transmission.torrents.removed)if(transmission.torrents.removed.length>0&&$.inArray(f.id,transmission.torrents.removed)!=-1)this.control.torrentlist.datagrid("deleteRow",e);else g[f.id]=f;else g[f.id]=f;else this.control.torrentlist.datagrid("deleteRow",e)}for(e in a){f=
a[e];g[f.id]||this.control.torrentlist.datagrid("appendRow",f)}}}},getTorrentNameBar:function(a){var b="",c=a.name;switch(a.status){case transmission._status.stopped:b="iconlabel icon-pause-small";break;case transmission._status.check:b="iconlabel icon-checking";break;case transmission._status.download:b="iconlabel icon-down";break;case transmission._status.seed:b="iconlabel icon-up";break;case transmission._status.seedwait:case transmission._status.downloadwait:case transmission._status.checkwait:b=
-1)if(c=transmission.torrents.folders[a.node.id])if(this.config.hideSubfolders){b=[];for(var e=0;e<c.torrents.length;e++){d=c.torrents[e];d.downloadDir.replace(/[\\|\/]/g,"")==a.node.path&&b.push(d)}}else b=c.torrents}}if(this.config.defaultSelectNode!=a.node.id){this.control.torrentlist.datagrid("loadData",[]);this.config.defaultSelectNode=a.node.id;this.saveConfig()}a=[];for(e in b){if(!b[e])return;c=this.lang.torrent["status-text"][b[e].status];parseFloat(b[e].percentDone*100).toFixed(2);c==transmission._status.check&&
parseFloat(b[e].recheckProgress*100).toFixed(2);if(b[e].error!=0)c="<span class='text-status-error'>"+c+"</span>";else if(b[e].warning)c="<span class='text-status-warning' title='"+b[e].warning+"'>"+c+"</span>";d={};d=$.extend(d,b[e]);d.status=c;d.statusCode=b[e].status;d.completeSize=Math.max(0,b[e].totalSize-b[e].leftUntilDone);d.leecherCount=b[e].leecher;d.seederCount=b[e].seeder;a.push(d)}this.updateTorrentCurrentPageDatas(a)}}},updateTorrentCurrentPageDatas:function(a){var b=this.control.torrentlist.datagrid("getRows");
if(a.length==0&&b.length>0)this.control.torrentlist.datagrid("loadData",[]);else{var c=this.control.torrentlist.datagrid("options"),d=null;if(c.sortName){d=c.sortName;a=a.sort(arrayObjectSort(d,c.sortOrder))}if(b.length==0||a.length!=this.control.torrentlist.datagrid("getData").total&&a.length>c.pageSize)this.control.torrentlist.datagrid({loadFilter:pagerFilter,pageNumber:c.pageNumber,sortName:d,sortOrder:c.sortOrder}).datagrid("loadData",a);else{this.control.torrentlist.datagrid("getData").originalRows=
a;d=(c.pageNumber-1)*parseInt(c.pageSize);c=d+parseInt(c.pageSize);a=a.slice(d,c);c={};d={};for(var e in transmission.torrents.recently){var f=transmission.torrents.recently[e];c[f.id]=true}for(e in a){f=a[e];d[f.id]=f}var g={};for(e=b.length-1;e>=0;e--){f=b[e];var h=d[f.id];if(h)if(c[f.id]){this.control.torrentlist.datagrid("updateRow",{index:e,row:h});g[f.id]=f}else if(transmission.torrents.removed)if(transmission.torrents.removed.length>0&&$.inArray(f.id,transmission.torrents.removed)!=-1)this.control.torrentlist.datagrid("deleteRow",
e);else g[f.id]=f;else g[f.id]=f;else this.control.torrentlist.datagrid("deleteRow",e)}for(e in a){f=a[e];g[f.id]||this.control.torrentlist.datagrid("appendRow",f)}}}},getTorrentNameBar:function(a){var b="",c=a.name;switch(a.status){case transmission._status.stopped:b="iconlabel icon-pause-small";break;case transmission._status.check:b="iconlabel icon-checking";break;case transmission._status.download:b="iconlabel icon-down";break;case transmission._status.seed:b="iconlabel icon-up";break;case transmission._status.seedwait:case transmission._status.downloadwait:case transmission._status.checkwait:b=
"iconlabel icon-wait"}c+="\n"+a.downloadDir;if(a.warning){b="iconlabel icon-warning-type1";c+="\n\n"+this.lang["public"]["text-info"]+": "+a.warning}if(a.error!=0){b="iconlabel icon-exclamation";c+="\n\n"+this.lang["public"]["text-info"]+": "+a.errorString}return'<span class="'+b+'" title="'+c+'">'+a.name+"</span>"},getTorrentProgressBar:function(a,b){a+="%";var c="",d=0;d=typeof b=="object"?b.status:b;switch(d){case transmission._status.stopped:c="torrent-progress-stop";break;case transmission._status.checkwait:case transmission._status.check:c=
"torrent-progress-check";break;case transmission._status.downloadwait:case transmission._status.download:c="torrent-progress-download";break;case transmission._status.seedwait:case transmission._status.seed:c="torrent-progress-seed"}if(typeof b=="object"){if(b.warning)c="torrent-progress-warning";if(b.error!=0)c="torrent-progress-error"}return'<div class="torrent-progress" title="'+a+'"><div class="torrent-progress-text">'+a+'</div><div class="torrent-progress-bar '+c+'" style="width:'+a+';"></div></div>'},
addTorrentsToServer:function(a,b,c,d){var e=b-a.length,f=a.shift();if(f){this.showStatus(this.lang.system.status.queue+(e+1)+"/"+b+"<br/>"+f,0);transmission.addTorrentFromUrl(f,d,c,function(){system.addTorrentsToServer(a,b,c,d)})}else{this.showStatus(this.lang.system.status.queuefinish);this.getServerStatus()}},changeSelectedTorrentStatus:function(a,b,c){var d=this.control.torrentlist.datagrid("getChecked"),e=[];a||(a="start");for(var f in d)e.push(d[f].id);c||(c="torrent-"+a);if(e.length>0){if(b){var g=
@ -88,8 +88,8 @@ var b=[],c;for(c in a){var d=a[c],e={},f;for(f in d)e[f]=d[f];d=parseFloat(d.pro
b[0]);system.currentTorrentId!=0&&$.each(b[0],function(c,d){var e=false,f=false,g=false;switch(c){case "seedIdleMode":case "seedRatioMode":if(d==0){f=false;e=true}g=true;case "downloadLimited":case "uploadLimited":if(d==true||d==1)f=true;system.panel.attribute.find("input[enabledof='"+c+"']").prop("disabled",!f);g&&system.panel.attribute.find("#"+c).prop("indeterminate",e).data("_tag",d);system.panel.attribute.find("#"+c).prop("checked",f);break;default:system.panel.attribute.find("#"+c).val(d);system.panel.attribute.find("#"+
c).numberspinner("setValue",d)}})}})},setFieldFormat:function(a){if(a.formatter)switch(a.formatter){case "size":a.formatter=function(b){return formatSize(b)};break;case "speed":a.formatter=function(b){return formatSize(b,true,"speed")};break;case "longtime":a.formatter=function(b){return formatLongTime(b)};break;case "progress":a.formatter=function(b,c){var d=parseFloat(b*100).toFixed(2);return system.getTorrentProgressBar(d,transmission.torrents.all[c.id])};break;case "_usename_":switch(a.field){case "name":a.formatter=
function(b,c){return system.getTorrentNameBar(transmission.torrents.all[c.id])}}break;case "ratio":a.formatter=function(b){var c="";if(parseFloat(b)<1)c="text-status-warning";return'<span class="'+c+'">'+b+"</span>"};break;case "remainingTime":a.formatter=function(b){if(b>=31536E8)return"∞";return getTotalTime(b)}}},reloadData:function(){this.reloadSession();this.reloading=false;this.getServerStatus();this.reloading=false;this.reloadTorrentBaseInfos()},loadFolderList:function(a){this.removeTreeNode("folders-loading");
for(var b in a){var c=a[b];c&&system.removeTreeNode(c.nodeid)}transmission.downloadDirs.length!=0&&timedChunk(transmission.downloadDirs,this.appendFolder,this,10,function(){navigator.userAgent.indexOf("Firefox")>0&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"});system.loadCount==0&&system.initUIStatus();system.loadCount++})},appendFolder:function(a){if(a){var b="folders";a=a.replace(/\\/g,"/").split("/");var c="folders-",d;for(d in a){var e=a[d];if(e!=""){var f=this.B64.encode(e);
c+=f.replace(/[+|\/|=]/g,"0");f=this.panel.left.tree("find",c);var g=transmission.torrents.folders[c];if(g){e=e+this.showNodeMoreInfos(g.count,g.size);if(f)this.updateTreeNodeText(c,e);else{this.appendTreeNode(b,[{id:c,text:e,iconCls:"iconfont tr-icon-file"}]);if(b!="folders"){f=this.panel.left.tree("find",b);this.panel.left.tree("collapse",f.target)}}b=c}else{this.debug("appendFolder:key",c);this.debug("appendFolder:name",e);this.debug("appendFolder:node",f)}}}}},replaceURI:function(a){return a.replace(/(http|https|ftp):\/\/([^/:]+)(:\d*)?([^# ]*)/ig,
for(var b in a){var c=a[b];c&&system.removeTreeNode(c.nodeid)}transmission.downloadDirs.length!=0&&timedChunk(transmission.downloadDirs,this.appendFolder,this,10,function(){navigator.userAgent.indexOf("Firefox")>0&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"});system.loadCount==0&&system.initUIStatus();system.loadCount++})},appendFolder:function(a){if(a){var b="folders";a=a.replace(/\\/g,"/").split("/");var c="folders-",d="",e;for(e in a){var f=a[e];if(f!=""){d+=f;var g=
this.B64.encode(f);c+=g.replace(/[+|\/|=]/g,"0");g=this.panel.left.tree("find",c);var h=transmission.torrents.folders[c];if(h){f=f+this.showNodeMoreInfos(h.count,h.size);if(g)this.updateTreeNodeText(c,f);else{this.appendTreeNode(b,[{id:c,path:d,text:f,iconCls:"iconfont tr-icon-file"}]);if(b!="folders"){g=this.panel.left.tree("find",b);this.panel.left.tree("collapse",g.target)}}b=c}else{this.debug("appendFolder:key",c);this.debug("appendFolder:name",f);this.debug("appendFolder:node",g)}}}}},replaceURI:function(a){return a.replace(/(http|https|ftp):\/\/([^/:]+)(:\d*)?([^# ]*)/ig,
function(b){return'<a href="'+b+'" target="_blank">'+b+"</a>"})},readConfig:function(){this.readUserConfig();var a=this.getStorageData(this.configHead+".system");if(a)this.config=$.extend(true,this.config,JSON.parse(a));for(var b in this.storageKeys.dictionary)this.dictionary[b]=this.getStorageData(this.storageKeys.dictionary[b])},saveConfig:function(){this.setStorageData(this.configHead+".system",JSON.stringify(this.config));for(var a in this.storageKeys.dictionary)this.setStorageData(this.storageKeys.dictionary[a],
this.dictionary[a]);this.saveUserConfig()},readUserConfig:function(){var a=window.localStorage[this.configHead];if(a){a=JSON.parse(a);this.userConfig=$.extend(true,this.userConfig,a)}},saveUserConfig:function(){window.localStorage[this.configHead]=JSON.stringify(this.userConfig)},uploadTorrentFile:function(a,b,c,d){if(window.FileReader){var e=$("input[id='"+a+"']")[0].files;$.each(e,function(f,g){transmission.addTorrentFromFile(g,b,c,d,e.length)})}else alert(system.lang.publit["text-browsers-not-support-features"])},
checkUpdate:function(){$.ajax({url:this.checkUpdateScript,dataType:"json",success:function(a){if(a&&a.update)if(system.codeupdate<a.update){$("#area-update-infos").show();$("#msg-updateInfos").html(a.update+" -> "+a.infos)}else $("#area-update-infos").hide()}})},changeLanguages:function(a){if(!(a==this.lang.name||!a)){this.config.defaultLang=a;this.saveConfig();location.href="?lang="+a}},getStorageData:function(a,b){return window.localStorage[a]==null?b:window.localStorage[a]},setStorageData:function(a,

View File

@ -33,7 +33,8 @@ var system = {
attribute: {}
}
}
}
},
hideSubfolders: false
},
storageKeys: {
dictionary: {
@ -1873,7 +1874,17 @@ var system = {
if (config.node.id.indexOf("folders-") != -1) {
var folder = transmission.torrents.folders[config.node.id];
if (folder) {
torrents = folder.torrents;
if (!this.config.hideSubfolders) {
torrents = folder.torrents;
} else {
torrents = [];
for (var index = 0; index < folder.torrents.length; index++) {
var element = folder.torrents[index];
if (element.downloadDir.replace(/[\\|\/]/g,"")==config.node.path) {
torrents.push(element);
}
}
}
}
}
break;
@ -2610,12 +2621,14 @@ var system = {
var parentkey = rootkey;
var folder = fullkey.replace(/\\/g,"/").split("/");
var key = rootkey + "-";
var path = "";
for (var i in folder) {
var name = folder[i];
if (name == "") {
continue;
}
//key += "--" + text.replace(/\./g,"。") + "--";
path += name;
var _key = this.B64.encode(name);
key += _key.replace(/[+|\/|=]/g,"0");
var node = this.panel.left.tree("find", key);
@ -2626,6 +2639,7 @@ var system = {
if (!node) {
this.appendTreeNode(parentkey, [{
id: key,
path: path,
text: text,
iconCls: "iconfont tr-icon-file"
}]);

View File

@ -192,6 +192,7 @@ transmission.torrents = {
if (transmission.options.getFolders) {
if (item.downloadDir) {
// 统一使用 / 来分隔目录
var folder = item.downloadDir.replace(/\\/g,"/").split("/");
var folderkey = "folders-";
for (var i in folder) {
@ -200,6 +201,7 @@ transmission.torrents = {
continue;
}
var key = B64.encode(text);
// 去除特殊字符
folderkey += key.replace(/[+|\/|=]/g,"0");
var node = this.folders[folderkey];
if (!node) {

View File

@ -247,7 +247,8 @@
</table>
</div>
<div title="More" style="padding:10px;" class="dialog">
<input id="show-bt-servers" type="checkbox" style="width:16px;" config-type="1"/><label for="show-bt-servers" system-lang="dialog['system-config']['show-bt-servers']"></label>
<input id="show-bt-servers" type="checkbox" style="width:16px;" config-type="1"/><label for="show-bt-servers" system-lang="dialog['system-config']['show-bt-servers']"></label><br/>
<input id="hide-subfolders" type="checkbox" style="width:16px;" config-type="1"/><label for="hide-subfolders" system-lang="dialog['system-config']['hide-subfolders']"></label>
<hr/>
</div>
</div>
@ -418,6 +419,7 @@
//thisDialog.find("#local-storage-dictionary-folders").val(transmission.downloadDirs);
thisDialog.find("#show-bt-servers").prop("checked", system.config.showBTServers);
thisDialog.find("#hide-subfolders").prop("checked", system.config.hideSubfolders);
// Cancel
thisDialog.find("#system-config-button-cancel").click(function () {
@ -545,6 +547,7 @@
}
system.config.showBTServers = thisDialog.find("#show-bt-servers").prop("checked");
system.config.hideSubfolders = thisDialog.find("#hide-subfolders").prop("checked");
var cuslang = thisDialog.find("#system-config-lang").val();