diff --git a/release/transmission-control-full.tar.gz b/release/transmission-control-full.tar.gz
index d5dc030..6832bb5 100644
Binary files a/release/transmission-control-full.tar.gz and b/release/transmission-control-full.tar.gz differ
diff --git a/src/tr-web-control/script/min/system.min.js b/src/tr-web-control/script/min/system.min.js
index 81d15c8..37714b9 100644
--- a/src/tr-web-control/script/min/system.min.js
+++ b/src/tr-web-control/script/min/system.min.js
@@ -1,4 +1,4 @@
/*! transmission-web-control 2017-05-04 */
-function pagerFilter(a){"number"==typeof a.length&&"function"==typeof a.splice&&(a={total:a.length,rows:a});var b=$(this),c=b.datagrid("options"),d=b.datagrid("getPager"),e=b.data("buttons");d.pagination({onSelectPage:function(e,f){c.pageNumber=e,c.pageSize=f,d.pagination("refresh",{pageNumber:e,pageSize:f}),b.datagrid("loadData",a)},buttons:e}),a.originalRows||(a.originalRows=a.rows);var f=(c.pageNumber-1)*parseInt(c.pageSize),g=f+parseInt(c.pageSize);return a.rows=a.originalRows.slice(f,g),a}var system={version:"1.1 Beta",rootPath:"tr-web-control/",codeupdate:"20170504",configHead:"transmission-web-control",config:{autoReload:!0,reloadStep:5e3,pageSize:30,defaultSelectNode:null,autoExpandAttribute:!1,defaultLang:""},storageKeys:{dictionary:{folders:"dictionary.folders"}},dictionary:{folders:null},checkUpdateScript:"https://transmission-control.googlecode.com/svn/resouces/checkupdate.js",contextMenus:{},panel:null,lang:null,reloading:!1,autoReloadTimer:null,downloadDir:"",islocal:!1,B64:new Base64,currentTorrentId:0,control:{tree:null,torrentlist:null},userConfig:{torrentList:{fields:[],sortName:null,sortOrder:"asc"}},serverConfig:null,serverSessionStats:null,templates:{},setlang:function(a,b){a||(a=this.config.defaultLang?this.config.defaultLang:navigator.language||navigator.browserLanguage),a||(a="zh-CN"),-1!=a.indexOf("-")&&(a=a.split("-")[0].toLocaleLowerCase()+"-"+a.split("-")[1].toLocaleUpperCase()),this.languages[a]||(a="en"),$.getScript(system.rootPath+"lang/"+a+".js",function(){system.lang=$.extend(!0,system.defaultLang,system.lang),system.resetLangText(),$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-"+a.replace("-","_")+".js").done(function(a,c){b&&b()}).fail(function(a,c,d){$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-en.js",function(){b&&b()})})})},init:function(a,b,c){this.readConfig(),this.islocal=1==b,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"),list:$("#m_list"),attribute:$("#m_attribute"),bottom:$("#m_bottom"),title:$("#m_title"),status:$("#m_status"),statusbar:$("#m_statusbar"),status_text:$("#status_text"),droparea:$("#dropArea")},null==this.lang?this.setlang(a,function(){system.initdata()}):this.initdata()},resetLangText:function(parent){parent||(parent=$);var items=parent.find("*[system-lang]");$.each(items,function(key,item){var name=$(item).attr("system-lang");"["==name.substr(0,1)?$(item).html(eval("system.lang"+name)):$(item).html(eval("system.lang."+name))}),items=parent.find("*[system-tip-lang]"),$.each(items,function(key,item){var name=$(item).attr("system-tip-lang");"["==name.substr(0,1)?$(item).attr("title",eval("system.lang"+name)):$(item).attr("title",eval("system.lang."+name))})},initdata:function(){$(document).attr("title",this.lang.system.title+" "+this.version);var a=new Array,b=""+this.lang.title.left+"";a.push("");for(var c in this.lang.tree.toolbar.nav){var d=this.lang.tree.toolbar.nav[c];a.push(''+d+"")}if(a.push(""),a.length>1){b+=a.join(""),this.panel.left_layout.panel("setTitle",b);for(var c in this.lang.tree.toolbar.nav)$("#tree-toolbar-nav-"+c).linkbutton()}else this.panel.left_layout.panel("setTitle",b);b=""+this.lang.title.list+"",a.length=0,a.push("");for(var c in this.lang["torrent-head"].buttons){var d=this.lang["torrent-head"].buttons[c];a.push(''+d+"")}if(a.push(""),a.length>1){b+=a.join(""),this.panel.body.panel("setTitle",b);for(var c in this.lang["torrent-head"].buttons)switch($("#torrent-head-buttons-"+c).linkbutton(),c){case"autoExpandAttribute":system.config.autoExpandAttribute?$("#torrent-head-buttons-"+c).linkbutton({iconCls:"icon-enabled"}).data("status",1):$("#torrent-head-buttons-"+c).linkbutton({iconCls:"icon-disabled"}).data("status",0)}}else this.panel.body.panel("setTitle",b);this.panel.status.panel("setTitle",this.lang.title.status),this.panel.attribute.panel({title:this.lang.title.attribute,onExpand:function(){0!=system.currentTorrentId&&$(this).data("isload")?system.getTorrentInfos(system.currentTorrentId):system.clearTorrentAttribute()},onLoad:function(){$(this).data("isload")||($(this).data("isload",!0),0!=system.currentTorrentId&&setTimeout(function(){system.getTorrentInfos(system.currentTorrentId)},500))}}),$.each(this.languages,function(a,b){$("").text(b).val(a).attr("selected",a==system.lang.name).appendTo(system.panel.top.find("#lang"))}),this.panel.top.find("#lang").change(function(){location.href="?lang="+this.value}),this.panel.toolbar.attr("class","panel-header"),this.initTree(),this.initToolbar(),this.initStatusBar(),this.initTorrentTable(),this.connect(),this.initEvent()},initEvent:function(){$(window).resize(function(){$("#main").layout("resize")}),this.panel.droparea[0].addEventListener("dragover",function(a){a.stopPropagation(),a.preventDefault(),system.debug("#dropArea.dragover")},!1),this.panel.list[0].addEventListener("dragover",function(a){a.stopPropagation(),a.preventDefault(),system.panel.droparea.show(),system.debug("dragover")},!1),this.panel.droparea[0].addEventListener("drop",function(a){a.stopPropagation(),a.preventDefault(),system.panel.droparea.hide(),system.debug("drop.e.dataTransfer:",a.dataTransfer),system.checkDropFiles(a.dataTransfer.files)},!1),this.panel.droparea[0].addEventListener("dragleave",function(a){a.stopPropagation(),a.preventDefault(),system.panel.droparea.hide(),system.debug("dragleave")},!1),$("#text-drop-title").html(this.lang.public["text-drop-title"])},navToolbarClick:function(a){var b=a.id,c=$(a).data("status"),d=null;switch(b){case"tree-toolbar-nav-folders":d=this.panel.left.tree("find","folders");break;case"tree-toolbar-nav-statistics":d=this.panel.left.tree("find","statistics");break;case"torrent-head-buttons-autoExpandAttribute":d={},d.target=null,this.config.autoExpandAttribute=1!=c}d&&(1==c?($(a).linkbutton({iconCls:"icon-disabled"}),$(d.target).parent().hide(),c=0):($(a).linkbutton({iconCls:"icon-enabled"}),$(d.target).parent().show(),c=1),$(a).data("status",c),this.saveConfig())},checkDropFiles:function(a){if(a&&a.length){for(var b=new Array,c=0;c0&&system.openDialogFromTemplate({id:"dialog-torrent-addfile",options:{title:system.lang.toolbar["add-torrent"],width:620,height:300,resizable:!0},datas:{files:b}})}},initTree:function(){this.panel.left.tree({data:[{id:"torrent-all",iconCls:"icon-home",text:this.lang.tree.all+" ("+this.lang.tree.status.loading+")",children:[{id:"downloading",text:this.lang.tree.downloading,iconCls:"icon-download"},{id:"paused",text:this.lang.tree.paused,iconCls:"icon-pause"},{id:"sending",text:this.lang.tree.sending,iconCls:"icon-seed"},{id:"check",text:this.lang.tree.check,iconCls:"icon-check"},{id:"actively",text:this.lang.tree.actively,iconCls:"icon-actively"},{id:"error",text:this.lang.tree.error,iconCls:"icon-error"},{id:"warning",text:this.lang.tree.warning,iconCls:"icon-warning"}]},{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"icon-servers",children:[{id:"servers-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"folders",text:this.lang.tree.folders,children:[{id:"folders-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"statistics",text:this.lang.tree.statistics.title,state:"closed",iconCls:"icon-chart",children:[{id:"cumulative-stats",text:this.lang.tree.statistics.cumulative,children:[{id:"uploadedBytes",text:this.lang.tree.statistics.uploadedBytes},{id:"downloadedBytes",text:this.lang.tree.statistics.downloadedBytes},{id:"filesAdded",text:this.lang.tree.statistics.filesAdded},{id:"sessionCount",text:this.lang.tree.statistics.sessionCount},{id:"secondsActive",text:this.lang.tree.statistics.secondsActive}]},{id:"current-stats",text:this.lang.tree.statistics.current,children:[{id:"current-uploadedBytes",text:this.lang.tree.statistics.uploadedBytes},{id:"current-downloadedBytes",text:this.lang.tree.statistics.downloadedBytes},{id:"current-filesAdded",text:this.lang.tree.statistics.filesAdded},{id:"current-sessionCount",text:this.lang.tree.statistics.sessionCount},{id:"current-secondsActive",text:this.lang.tree.statistics.secondsActive}]}]}],onSelect:function(a){system.loadTorrentToList({node:a})},lines:!0});for(var a in this.lang.tree.toolbar.nav){var b=this.panel.left.tree("find",a);$(b.target).parent().hide()}if(this.config.defaultSelectNode){var c=this.panel.left.tree("find",this.config.defaultSelectNode);c&&this.panel.left.tree("select",c.target)}},initTorrentTable:function(){function a(){b&&$(b).remove(),b=$("").appendTo("body"),b.menu({onClick:function(a){"icon-ok"==a.iconCls?(system.control.torrentlist.datagrid("hideColumn",a.name),b.menu("setIcon",{target:a.target,iconCls:"icon-empty"})):(system.control.torrentlist.datagrid("showColumn",a.name),b.menu("setIcon",{target:a.target,iconCls:"icon-ok"})),system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.saveUserConfig()}});for(var a=system.control.torrentlist.datagrid("getColumnFields"),c=0;c").attr("class","torrent-list").appendTo(this.panel.list);var b=null,c=-1,d=!1;$.get(system.rootPath+"template/torrent-fields.json?time="+new Date,function(e){var f=e.fields;0!=system.userConfig.torrentList.fields.length&&(f=system.userConfig.torrentList.fields);var g=JSON.stringify(f);system.userConfig.torrentList.fields=JSON.parse(g);for(var h in f)f[h].title=system.lang.torrent.fields[f[h].field]||f[h].field,system.setFieldFormat(f[h]);system.control.torrentlist.datagrid({autoRowHeight:!1,pagination:!0,rownumbers:!0,remoteSort:!1,checkOnSelect:!1,pageSize:system.config.pageSize,idField:"id",fit:!0,striped:!0,sortName:system.userConfig.torrentList.sortName,sortOrder:system.userConfig.torrentList.sortOrder,drophead:!0,columns:[f],onCheck:function(a,b){system.checkTorrentRow(a,b)},onUncheck:function(a,b){system.checkTorrentRow(a,b)},onCheckAll:function(a){system.checkTorrentRow("all",!1)},onUncheckAll:function(a){system.checkTorrentRow("all",!0)},onSelect:function(a,b){-1!=c&&(d=!0,system.control.torrentlist.datagrid("unselectRow",c),d=!1),system.config.autoExpandAttribute&&system.panel.attribute.panel("options").collapsed&&system.panel.layout_body.layout("expand","south"),system.getTorrentInfos(b.id),c=a},onUnselect:function(a,b){system.config.autoExpandAttribute&&0==d&&(system.panel.attribute.panel("options").collapsed||system.panel.layout_body.layout("collapse","south")),system.currentTorrentId=0,c=-1},onBeforeLoad:function(a){system.currentTorrentId=0},onSortColumn:function(a,b){var c=a;"remainingTime"==a&&(c="remainingTimeRaw");var d=system.control.torrentlist.datagrid("getData").originalRows.sort(arrayObjectSort(c,b));system.control.torrentlist.datagrid("loadData",d),system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.userConfig.torrentList.sortName=a,system.userConfig.torrentList.sortOrder=b,system.saveUserConfig()},onRowContextMenu:function(a,b,c){system.control.torrentlist.datagrid("uncheckAll"),system.control.torrentlist.datagrid("checkRow",b),a.preventDefault(),system.showContextMenu("torrent-list",a)},onHeadDrop:function(a,b){system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.saveUserConfig()},onResizeColumn:function(a,b){system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.saveUserConfig()},onHeaderContextMenu:function(c,d){c.preventDefault(),b||a(),b.menu("show",{left:c.pageX,top:c.pageY})}})},"json")},resetTorrentListFieldsUserConfig:function(a){var b={};$.each(this.userConfig.torrentList.fields,function(a,c){b[c.field]=c}),this.userConfig.torrentList.fields=[],$.each(a,function(a,c){var d=$.extend({},b[c.field]);d.width=c.width,d.hidden=c.hidden,system.userConfig.torrentList.fields.push(d)})},showContextMenu:function(a,b){var c=this.contextMenus[a];c?c.empty():(c=$("").attr("class","easyui-menu").css({width:"180px"}).appendTo(this.panel.main),this.contextMenus[a]=c,c.menu());var d=null;switch(a){case"torrent-list":d=new Array("start","pause","-","rename","remove","recheck","-","morepeers","changeDownloadDir","-","menu-queue-move-top","menu-queue-move-up","menu-queue-move-down","menu-queue-move-bottom");var e=this.panel.toolbar;for(var f in d){var g=d[f];if("-"==g)$("").appendTo(c);else{var h=e.find("#toolbar_"+g);h.length>0?c.menu("appendItem",{text:h.attr("title"),id:g,iconCls:h.linkbutton("options").iconCls,disabled:h.linkbutton("options").disabled,onclick:function(){system.panel.toolbar.find("#toolbar_"+$(this).attr("id")).click()}}):(h=$("#"+g),h.length>0&&c.menu("appendItem",{text:h.attr("title"),id:g,iconCls:h.attr("id").replace("menu","icon"),disabled:e.find("#toolbar_changeDownloadDir").linkbutton("options").disabled,onclick:function(){$("#"+$(this).attr("id")).click()}})),h=null}}}c.menu("show",{left:b.pageX,top:b.pageY}),c=null,d=null},checkTorrentRow:function(a,b){this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_queue").menubutton("enable")},initToolbar:function(){this.panel.toolbar.find("#toolbar_label_reload_time").html(this.lang.toolbar["reload-time"]),this.panel.toolbar.find("#toolbar_label_reload_time_unit").html(this.lang.toolbar["reload-time-unit"]),this.panel.toolbar.find("#toolbar_reload_time").numberspinner({value:this.config.reloadStep/1e3,min:3,disabled:!this.config.autoReload,onChange:function(){var a=this.value;$.isNumeric(a)&&(system.config.reloadStep=1e3*a,system.saveConfig())}}),this.panel.toolbar.find("#toolbar_autoreload").linkbutton({text:this.config.autoReload?this.lang.toolbar["autoreload-enabled"]:this.lang.toolbar["autoreload-disabled"],iconCls:this.config.autoReload?"icon-enabled":"icon-disabled"}).attr("title",this.config.autoReload?this.lang.toolbar.tip["autoreload-disabled"]:this.lang.toolbar.tip["autoreload-enabled"]).click(function(){system.config.autoReload?(system.config.autoReload=!1,clearTimeout(system.autoReloadTimer),system.panel.toolbar.find("#toolbar_reload_time").numberspinner("disable")):(system.config.autoReload=!0,system.reloadData(),system.panel.toolbar.find("#toolbar_reload_time").numberspinner("enable")),system.saveConfig(),$(this).linkbutton({text:system.config.autoReload?system.lang.toolbar["autoreload-enabled"]:system.lang.toolbar["autoreload-disabled"],iconCls:system.config.autoReload?"icon-enabled":"icon-disabled"}).attr("title",system.config.autoReload?system.lang.toolbar.tip["autoreload-disabled"]:system.lang.toolbar.tip["autoreload-enabled"])}),this.panel.toolbar.find("#toolbar_add_torrents").linkbutton({text:this.lang.toolbar["add-torrent"],disabled:!1}).attr("title",this.lang.toolbar.tip["add-torrent"]).click(function(){system.openDialogFromTemplate({id:"dialog-torrent-add",options:{title:system.lang.toolbar["add-torrent"],width:620,height:400,resizable:!0}})}),this.panel.toolbar.find("#toolbar_start_all").linkbutton({disabled:!1}).attr("title",this.lang.toolbar.tip["start-all"]).click(function(){var a=$(this),b=a.linkbutton("options").iconCls;a.linkbutton({disabled:!0,iconCls:"icon-loading"}),transmission.exec({method:"torrent-start"},function(c){a.linkbutton({iconCls:b,disabled:!1}),a=null})}),this.panel.toolbar.find("#toolbar_pause_all").linkbutton({disabled:!1}).attr("title",this.lang.toolbar.tip["pause-all"]).click(function(){var a=$(this),b=a.linkbutton("options").iconCls;a.linkbutton({disabled:!0,iconCls:"icon-loading"}),transmission.exec({method:"torrent-stop"},function(c){a.linkbutton({iconCls:b,disabled:!1}),a=null})}),this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.start).click(function(){system.changeSelectedTorrentStatus("start",$(this))}),this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.pause).click(function(){system.changeSelectedTorrentStatus("stop",$(this))}),this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.recheck).click(function(){var a=system.control.torrentlist.datagrid("getChecked");if(a.length>0)if(1==a.length){var b=transmission.torrents.all[a[0].id];b.percentDone>0?confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this)):system.changeSelectedTorrentStatus("verify",$(this))}else confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this))}),this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:!0}).click(function(){system.changeSelectedTorrentStatus("reannounce",$(this))}),this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.remove).click(function(){var a=system.control.torrentlist.datagrid("getChecked"),b=new Array;for(var c in a)b.push(a[c].id);0!=b.length&&system.openDialogFromTemplate({id:"dialog-torrent-remove-confirm",options:{title:system.lang.dialog["torrent-remove"].title,width:350,height:150},datas:{ids:b}})}),this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:!0}).click(function(){var a=system.control.torrentlist.datagrid("getChecked");0!=a.length&&system.openDialogFromTemplate({id:"dialog-torrent-rename",options:{title:system.lang.dialog["torrent-rename"].title,width:450,height:150,resizable:!0},datas:{id:a[0].id}})}),this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip["change-download-dir"]).click(function(){var a=system.control.torrentlist.datagrid("getChecked"),b=new Array;for(var c in a)b.push(a[c].id);0!=b.length&&system.openDialogFromTemplate({id:"dialog-torrent-changeDownloadDir",options:{title:system.lang.dialog["torrent-changeDownloadDir"].title,width:520,height:200},datas:{ids:b}})}),this.panel.toolbar.find("#toolbar_alt_speed").linkbutton().attr("title",this.lang.toolbar.tip["alt-speed"]).click(function(){var a=$(this),b=a.linkbutton("options"),c=!1;"icon-alt-speed-false"==b.iconCls&&(c=!0),transmission.exec({method:"session-set",arguments:{"alt-speed-enabled":c}},function(b){"success"==b.result&&(system.serverConfig["alt-speed-enabled"]=c,a.linkbutton({iconCls:"icon-alt-speed-"+c.toString()}),c?$("#status_alt_speed").show():$("#status_alt_speed").hide())}),a.linkbutton({iconCls:"icon-loading"})}),this.panel.toolbar.find("#toolbar_config").linkbutton().attr("title",this.lang.toolbar.tip["system-config"]).click(function(){system.openDialogFromTemplate({id:"dialog-system-config",options:{title:system.lang.toolbar["system-config"],width:620,height:440,resizable:!0}})}),this.panel.toolbar.find("#toolbar_reload").linkbutton().attr("title",this.lang.toolbar.tip["system-reload"]).click(function(){system.reloadData()}),this.panel.toolbar.find("#toolbar_search").searchbox({searcher:function(a){system.searchTorrents(a)},prompt:this.lang.toolbar["search-prompt"]})},initStatusBar:function(){this.panel.statusbar.find("#status_title_downloadspeed").html(this.lang.statusbar.downloadspeed),this.panel.statusbar.find("#status_title_uploadspeed").html(this.lang.statusbar.uploadspeed)},connect:function(){this.showStatus(this.lang.system.status.connect,0),transmission.on.torrentCountChange=function(){system.reloadTorrentBaseInfos()},transmission.on.postError=function(){},transmission.init({islocal:!0},function(){system.reloadSession(!0),system.getServerStatus()})},reloadSession:function(a){transmission.getSession(function(b){system.serverConfig=b,$("#status_version").html("Transmission "+system.lang.statusbar.version+b.version+", RPC: "+b["rpc-version"]+", WEB Control: "+system.version+"("+system.codeupdate+")"),1==b["alt-speed-enabled"]?(system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"icon-alt-speed-true"}),$("#status_alt_speed").show()):(system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"icon-alt-speed-false"}),$("#status_alt_speed").hide()),system.downloadDir=b["download-dir"],0==transmission.downloadDirs.length&&transmission.downloadDirs.push(system.downloadDir),parseInt(system.serverConfig["rpc-version"])>=15?transmission.getFreeSpace(system.downloadDir,function(a){system.serverConfig["download-dir-free-space"]=a.arguments["size-bytes"],system.showFreeSpace(a.arguments["size-bytes"])}):system.showFreeSpace(system.serverConfig["download-dir-free-space"]),a&&system.showStatus(system.lang.system.status.connected)})},showFreeSpace:function(a){var b=a;b=-1==b?system.lang.public["text-unknown"]:formatSize(b),$("#status_freespace").text(system.lang.dialog["system-config"]["download-dir-free-space"]+" "+b)},reloadTorrentBaseInfos:function(a,b){if(!this.reloading){clearTimeout(this.autoReloadTimer),this.reloading=!0;var c={trackers:transmission.trackers,folders:transmission.torrents.folders};transmission.torrents.getallids(function(a){var b=new Array;for(var d in a){var e=a[d];b.push(e.id)}var f=transmission.torrents.getErrorIds(b,!0);f.length>0?transmission.torrents.getallids(function(){system.resetTorrentInfos(c)},f):system.resetTorrentInfos(c)},a,b)}},resetTorrentInfos:function(a){var b=this.currentTorrentId,c=this.panel.left.tree("find","servers");if(c){var d=c.state;this.removeTreeNode("servers-loading")}else this.appendTreeNode(null,[{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"icon-servers"}]),c=this.panel.left.tree("find","servers");new Array;for(var e in transmission.trackers){var f=transmission.trackers[e],g=system.panel.left.tree("find",f.nodeid),h=f.name+this.showNodeMoreInfos(f.count,f.size);g?system.updateTreeNodeText(f.nodeid,h,f.connected?"icon-server":"icon-server-error"):system.appendTreeNode(c,[{id:f.nodeid,text:h,iconCls:f.connected?"icon-server":"icon-server-error"}]),a.trackers[f.nodeid]=null}"closed"==d&&this.panel.left.tree("collapse",c.target);for(var e in a.trackers){var f=a.trackers[e];f&&system.removeTreeNode(f.nodeid)}if(transmission.torrents.status[transmission._status.stopped]?system.updateTreeNodeText("paused",system.lang.tree.paused+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.stopped].length)):system.updateTreeNodeText("paused",system.lang.tree.paused),transmission.torrents.status[transmission._status.seed]?system.updateTreeNodeText("sending",system.lang.tree.sending+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seed].length)):system.updateTreeNodeText("sending",system.lang.tree.sending),transmission.torrents.status[transmission._status.seedwait]){var g=system.panel.left.tree("find","sending"),i=system.panel.left.tree("getChildren",g.target),h=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seedwait].length);i.length>0?system.updateTreeNodeText(i[0].id,h):system.appendTreeNode(g,[{id:"seedwait",text:h,iconCls:"icon-wait"}])}else system.removeTreeNode("seedwait");if(transmission.torrents.status[transmission._status.check]?system.updateTreeNodeText("check",system.lang.tree.check+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.check].length)):system.updateTreeNodeText("check",system.lang.tree.check),transmission.torrents.status[transmission._status.checkwait]){var g=system.panel.left.tree("find","check"),i=system.panel.left.tree("getChildren",g.target),h=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.checkwait].length);i.length>0?system.updateTreeNodeText(i[0].id,h):system.appendTreeNode(g,[{id:"checkwait",text:h,iconCls:"icon-wait"}])}else system.removeTreeNode("checkwait");if(transmission.torrents.status[transmission._status.download]?system.updateTreeNodeText("downloading",system.lang.tree.downloading+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.download].length)):system.updateTreeNodeText("downloading",system.lang.tree.downloading),transmission.torrents.status[transmission._status.downloadwait]){var g=system.panel.left.tree("find","downloading"),i=system.panel.left.tree("getChildren",g.target),h=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.downloadwait].length);i.length>0?system.updateTreeNodeText(i[0].id,h):system.appendTreeNode(g,[{id:"downloadwait",text:h,iconCls:"icon-wait"}])}else system.removeTreeNode("downloadwait");system.updateTreeNodeText("actively",system.lang.tree.actively+this.showNodeMoreInfos(transmission.torrents.actively.length)),system.updateTreeNodeText("error",system.lang.tree.error+this.showNodeMoreInfos(transmission.torrents.error.length)),system.updateTreeNodeText("warning",system.lang.tree.warning+this.showNodeMoreInfos(transmission.torrents.warning.length));var g=system.panel.left.tree("getSelected");if(null!=g){var j=system.control.torrentlist.datagrid("options").pageNumber;system.loadTorrentToList({node:g,page:j})}0!=b&&system.control.torrentlist.datagrid("selectRecord",b),system.reloading=!1,system.config.autoReload&&(system.autoReloadTimer=setTimeout(function(){system.reloadData()},system.config.reloadStep)),system.updateTreeNodeText("torrent-all",system.lang.tree.all+this.showNodeMoreInfos(transmission.torrents.count,transmission.torrents.totalSize));var k="uploadedBytes,downloadedBytes,filesAdded,sessionCount,secondsActive".split(",");$.each(k,function(a,b){switch(b){case"uploadedBytes":case"downloadedBytes":system.updateTreeNodeText(b,system.lang.tree.statistics[b]+formatSize(system.serverSessionStats["cumulative-stats"][b])),system.updateTreeNodeText("current-"+b,system.lang.tree.statistics[b]+formatSize(system.serverSessionStats["current-stats"][b]));break;case"secondsActive":system.updateTreeNodeText(b,system.lang.tree.statistics[b]+getTotalTime(1e3*system.serverSessionStats["cumulative-stats"][b])),system.updateTreeNodeText("current-"+b,system.lang.tree.statistics[b]+getTotalTime(1e3*system.serverSessionStats["current-stats"][b]));break;default:system.updateTreeNodeText(b,system.lang.tree.statistics[b]+system.serverSessionStats["cumulative-stats"][b]),system.updateTreeNodeText("current-"+b,system.lang.tree.statistics[b]+system.serverSessionStats["current-stats"][b])}});for(var e in transmission.torrents.folders){var l=transmission.torrents.folders[e];a.folders[l.nodeid]=null}this.loadFolderList(a.folders),navigator.userAgent.indexOf("Firefox")>0&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"})},showNodeMoreInfos:function(a,b){var c="";return a>0&&(c=" ("+a+")"),b>0&&(c+="["+formatSize(b)+"]"),c},getServerStatus:function(){this.reloading||(clearTimeout(this.autoReloadTimer),this.reloading=!0,transmission.getStatus(function(a){if(system.reloading=!1,$("#status_downloadspeed").html(formatSize(a.downloadSpeed,!1,"speed")),$("#status_uploadspeed").html(formatSize(a.uploadSpeed,!1,"speed")),system.serverSessionStats=a,0==a.torrentCount){var b=system.panel.left.tree("find","servers");b&&system.panel.left.tree("remove",b.target),system.updateTreeNodeText("torrent-all",system.lang.tree.all)}}))},showStatus:function(a,b){$("#m_status").panel("options").collapsed&&$("#layout_left").layout("expand","south"),this.panel.status_text.show(),this.panel.status_text.html(a),0!=b&&(void 0==b&&(b=3e3),this.panel.status_text.fadeOut(b,function(){$("#layout_left").layout("collapse","south")}))},updateTreeNodeText:function(a,b,c){var d=this.panel.left.tree("find",a);if(d){var e={target:d.target,text:b};void 0!=c&&(e.iconCls=c),this.panel.left.tree("update",e)}d=null},appendTreeNode:function(a,b){var c=null;c="string"==typeof a?this.panel.left.tree("find",a):a,c?this.panel.left.tree("append",{parent:c.target,data:b}):this.panel.left.tree("append",{data:b}),c=null},removeTreeNode:function(a){var b=this.panel.left.tree("find",a);b&&this.panel.left.tree("remove",b.target),b=null},loadTorrentToList:function(a){if(transmission.torrents.all){var b={node:null,page:1};if(jQuery.extend(b,a),a.node){var c=null,d=this.panel.left.tree("getParent",a.node.target)||{id:""},e=this.panel.left.data("currentNodeId");switch(e!=a.node.id&&(this.control.torrentlist.datagrid({pageNumber:1}),e=a.node.id),this.panel.left.data("currentNodeId",e),d.id){case"servers":c=transmission.trackers[a.node.id].torrents;break;default:switch(a.node.id){case"torrent-all":case"servers":c=transmission.torrents.all;break;case"paused":c=transmission.torrents.status[transmission._status.stopped];break;case"sending":c=transmission.torrents.status[transmission._status.seed];break;case"seedwait":c=transmission.torrents.status[transmission._status.seedwait];break;case"check":c=transmission.torrents.status[transmission._status.check];break;case"checkwait":c=transmission.torrents.status[transmission._status.checkwait];break;case"downloading":c=transmission.torrents.status[transmission._status.download];break;case"downloadwait":c=transmission.torrents.status[transmission._status.downloadwait];break;case"actively":c=transmission.torrents.actively;break;case"error":c=transmission.torrents.error;break;case"warning":c=transmission.torrents.warning;break;case"search-result":c=transmission.torrents.searchResult;break;default:if(-1!=a.node.id.indexOf("folders-")){var f=transmission.torrents.folders[a.node.id];f&&(c=f.torrents)}}}this.config.defaultSelectNode!=a.node.id&&(this.control.torrentlist.datagrid("loadData",[]),this.config.defaultSelectNode=a.node.id,this.saveConfig());var g=new Array;for(var h in c){if(!c[h])return;var i=this.lang.torrent["status-text"][c[h].status];parseFloat(100*c[h].percentDone).toFixed(2);i==transmission._status.check&&parseFloat(100*c[h].recheckProgress).toFixed(2),0!=c[h].error?i=""+i+"":c[h].warning&&(i=""+i+"");var j={};j=$.extend(j,c[h]),j.status=i,j.statusCode=c[h].status,j.completeSize=Math.max(0,c[h].totalSize-c[h].leftUntilDone),j.leecherCount=c[h].leecher,j.seederCount=c[h].seeder,g.push(j)}this.updateTorrentCurrentPageDatas(g)}}},updateTorrentCurrentPageDatas:function(a){var b=this.control.torrentlist.datagrid("getRows");if(0==a.length&&b.length>0)return void this.control.torrentlist.datagrid("loadData",[]);var c=this.control.torrentlist.datagrid("options"),d=null;if(c.sortName){d=c.sortName;var e=d;"remainingTime"==d&&(e="remainingTimeRaw"),a=a.sort(arrayObjectSort(e,c.sortOrder))}if(0==b.length||a.length!=this.control.torrentlist.datagrid("getData").total&&a.length>c.pageSize)return void this.control.torrentlist.datagrid({loadFilter:pagerFilter,pageNumber:c.pageNumber,sortName:d,sortOrder:c.sortOrder}).datagrid("loadData",a)
-;this.control.torrentlist.datagrid("getData").originalRows=a;var f=(c.pageNumber-1)*parseInt(c.pageSize),g=f+parseInt(c.pageSize);a=a.slice(f,g);var h={},i={};for(var j in transmission.torrents.recently){var k=transmission.torrents.recently[j];h[k.id]=!0,k=null}for(var j in a){var k=a[j];i[k.id]=k,k=null}for(var l={},j=b.length-1;j>=0;j--){var k=b[j],m=i[k.id];m?h[k.id]?(this.control.torrentlist.datagrid("updateRow",{index:j,row:m}),l[k.id]=k):transmission.torrents.removed&&transmission.torrents.removed.length>0&&-1!=$.inArray(k.id,transmission.torrents.removed)?this.control.torrentlist.datagrid("deleteRow",j):l[k.id]=k:this.control.torrentlist.datagrid("deleteRow",j),k=null,m=null}for(var j in a){var k=a[j];l[k.id]||this.control.torrentlist.datagrid("appendRow",k)}b=null,h=null,i=null},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"}return c+="\n"+a.downloadDir,a.warning&&(b="iconlabel icon-warning-type1",c+="\n\n"+this.lang.public["text-info"]+": "+a.warning),0!=a.error&&(b="iconlabel icon-exclamation",c+="\n\n"+this.lang.public["text-info"]+": "+a.errorString),''+a.name+""},getTorrentProgressBar:function(a,b){a+="%";var c="";switch("object"==typeof b?b.status:b){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"}return"object"==typeof b&&(b.warning&&(c="torrent-progress-warning"),0!=b.error&&(c="torrent-progress-error")),'
'+a+'
'},addTorrentsToServer:function(a,b,c,d){var e=b-a.length,f=a.shift();if(!f)return this.showStatus(this.lang.system.status.queuefinish),void this.getServerStatus();this.showStatus(this.lang.system.status.queue+(e+1)+"/"+b+" "+f,0),transmission.addTorrentFromUrl(f,d,c,function(e){system.addTorrentsToServer(a,b,c,d)})},changeSelectedTorrentStatus:function(a,b,c){var d=this.control.torrentlist.datagrid("getChecked"),e=new Array;a||(a="start");for(var f in d)e.push(d[f].id);if(c||(c="torrent-"+a),e.length>0){if(b){var g=b.linkbutton("options").iconCls;b.linkbutton({disabled:!0,iconCls:"icon-loading"})}transmission.exec({method:c,arguments:{ids:e}},function(a){b&&b.linkbutton({iconCls:g}),system.control.torrentlist.datagrid("uncheckAll"),system.reloadTorrentBaseInfos()})}},searchTorrents:function(a){if(""!=a){var b=transmission.torrents.search(a);if(null==b||0==b.length)return void this.removeTreeNode("search-result");var c=this.panel.left.tree("find","search-result"),d=this.lang.tree["search-result"]+" : "+a+" ("+b.length+")";null==c?(this.appendTreeNode("torrent-all",[{id:"search-result",text:d,iconCls:"icon-search"}]),c=this.panel.left.tree("find","search-result")):this.panel.left.tree("update",{target:c.target,text:d}),this.panel.left.tree("select",c.target)}},getTorrentInfos:function(a){if(transmission.torrents.all[a]&&!transmission.torrents.all[a].infoIsLoading&&!(this.currentTorrentId>0&&transmission.torrents.all[this.currentTorrentId]&&transmission.torrents.all[this.currentTorrentId].infoIsLoading||(this.currentTorrentId=a,this.panel.attribute.panel("options").collapsed))){var b=transmission.torrents.all[a];b.infoIsLoading=!0;var c="fileStats,trackerStats,peers,leftUntilDone,status,rateDownload,rateUpload,uploadedEver,uploadRatio,error,errorString";b.moreInfosTag||(c+=",files,trackers,comment,dateCreated,creator,downloadDir"),transmission.torrents.getMoreInfos(c,a,function(c){if(b.infoIsLoading=!1,null!=c){if(jQuery.extend(b,c[0]),0==system.currentTorrentId||system.currentTorrentId!=a)return void system.clearTorrentAttribute();b.completeSize=b.totalSize-b.leftUntilDone,b.moreInfosTag=!0,system.fillTorrentBaseInfos(b),system.fillTorrentFileList(b),system.fillTorrentServerList(b),system.fillTorrentPeersList(b),system.fillTorrentConfig(b),transmission.torrents.all[a]=b,transmission.torrents.datas[a]=b}})}},clearTorrentAttribute:function(){system.panel.attribute.find("#torrent-files-table").datagrid("loadData",[]),system.panel.attribute.find("#torrent-servers-table").datagrid("loadData",[]),system.panel.attribute.find("#torrent-peers-table").datagrid("loadData",[]),system.panel.attribute.find("span[id*='torrent-attribute-value']").html("")},updateCurrentPageDatas:function(a,b,c){var d=c.datagrid("getRows"),e=c.datagrid("options"),f=null;if(e.sortName&&(f=e.sortName,b=b.sort(arrayObjectSort(f,e.sortOrder))),0==d.length||b.length!=c.datagrid("getData").total&&b.length>e.pageSize)return void c.datagrid({loadFilter:pagerFilter,pageNumber:1,sortName:f,sortOrder:e.sortOrder}).datagrid("loadData",b);c.datagrid("getData").originalRows=b;var g=(e.pageNumber-1)*parseInt(e.pageSize),h=g+parseInt(e.pageSize);b=b.slice(g,h);var i={};for(var j in b){var k=b[j];i[k[a]]=k,k=null}for(var j=d.length-1;j>=0;j--){var k=d[j],l=i[k[a]];l?c.datagrid("updateRow",{index:j,row:l}):c.datagrid("deleteRow",j),l=null,k=null}},fillTorrentBaseInfos:function(a){$.each(a,function(a,b){switch(a){case"rateDownload":case"rateUpload":b=formatSize(b,!0,"speed");break;case"totalSize":case"uploadedEver":case"leftUntilDone":case"completeSize":b=formatSize(b);break;case"addedDate":case"dateCreated":case"doneDate":b=formatLongTime(b);break;case"status":b=system.lang.torrent["status-text"][b];break;case"error":0==b?system.panel.attribute.find("#torrent-attribute-tr-error").hide():system.panel.attribute.find("#torrent-attribute-tr-error").show();break;case"comment":b=system.replaceURI(b)}system.panel.attribute.find("#torrent-attribute-value-"+a).html(b)})},fillTorrentFileList:function(a){var b=a.files,c=a.fileStats,d=new Array,e=a.name.length+1;for(var f in b){var g=b[f],h=c[f],i=parseFloat(h.bytesCompleted/g.length*100).toFixed(2);d.push({name:g.name==a.name?g.name:g.name.substr(e),index:f,bytesCompleted:h.bytesCompleted,percentDone:system.getTorrentProgressBar(i,transmission._status.download),length:g.length,wanted:system.lang.torrent.attribute.status[h.wanted],priority:''+system.lang.torrent.attribute.priority[h.priority]+""})}this.updateCurrentPageDatas("index",d,system.panel.attribute.find("#torrent-files-table"))},fillTorrentServerList:function(a){var b=a.trackers,c=a.trackerStats,d=new Array;for(var e in b){var f=(b[e],c[e]),g={};for(var h in f)switch(h){case"lastAnnounceTime":case"nextAnnounceTime":g[h]=formatLongTime(f[h]);break;case"lastAnnounceSucceeded":case"lastAnnounceTimedOut":g[h]=system.lang.torrent.attribute.status[f[h]];break;default:g[h]=f[h]}d.push(g)}transmission.torrents.addTracker(a),this.updateCurrentPageDatas("id",d,system.panel.attribute.find("#torrent-servers-table"))},fillTorrentPeersList:function(a){var b=a.peers,c=new Array;for(var d in b){var e=b[d],f={};for(var g in e)f[g]=e[g];var h=parseFloat(100*e.progress).toFixed(2);f.progress=system.getTorrentProgressBar(h,transmission._status.download),c.push(f)}this.updateCurrentPageDatas("address",c,system.panel.attribute.find("#torrent-peers-table"))},fillTorrentConfig:function(a){4==system.panel.attribute.find("#torrent-attribute-tabs").data("selectedIndex")&&transmission.torrents.getConfig(a.id,function(a){if(null!=a){var b=transmission.torrents.all[system.currentTorrentId];jQuery.extend(b,a[0]),0!=system.currentTorrentId&&$.each(a[0],function(a,b){var c=!1,d=!1,e=!1;switch(a){case"seedIdleMode":case"seedRatioMode":0==b&&(d=!1,c=!0),e=!0;case"downloadLimited":case"uploadLimited":1!=b&&1!=b||(d=!0),system.panel.attribute.find("input[enabledof='"+a+"']").prop("disabled",!d),e&&system.panel.attribute.find("#"+a).prop("indeterminate",c).data("_tag",b),system.panel.attribute.find("#"+a).prop("checked",d);break;default:system.panel.attribute.find("#"+a).val(b),system.panel.attribute.find("#"+a).numberspinner("setValue",b)}})}})},setFieldFormat:function(a){if(a.formatter)switch(a.formatter){case"size":a.formatter=function(a,b,c){return formatSize(a)};break;case"speed":a.formatter=function(a,b,c){return formatSize(a,!0,"speed")};break;case"longtime":a.formatter=function(a,b,c){return formatLongTime(a)};break;case"progress":a.formatter=function(a,b,c){var d=parseFloat(100*a).toFixed(2);return system.getTorrentProgressBar(d,transmission.torrents.all[b.id])};break;case"_usename_":switch(a.field){case"name":a.formatter=function(a,b,c){return system.getTorrentNameBar(transmission.torrents.all[b.id])}}}},reloadData:function(){this.reloadSession(),this.reloading=!1,this.getServerStatus(),this.reloading=!1,this.reloadTorrentBaseInfos(),this.checkTorrentRow("all",!1)},loadFolderList:function(a){this.removeTreeNode("folders-loading");for(var b in a){var c=a[b];c&&system.removeTreeNode(c.nodeid)}0!=transmission.downloadDirs.length&&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"})})},appendFolder:function(a){if(a){var b="folders",c=a.split("/"),d="folders-";for(var e in c){var f=c[e];if(""!=f){d+=this.B64.encode(f);var g=this.panel.left.tree("find",d),h=transmission.torrents.folders[d],i=f+this.showNodeMoreInfos(h.count,h.size);g?this.updateTreeNodeText(d,i):(this.appendTreeNode(b,[{id:d,text:i}]),"folders"!=b&&(g=this.panel.left.tree("find",b),this.panel.left.tree("collapse",g.target))),b=d}}}},replaceURI:function(a){return a.replace(/(http|https|ftp):\/\/([^\/:]+)(:\d*)?([^# ]*)/gi,function(a){return''+a+""})},readConfig:function(){this.readUserConfig();var a=cookies.get(this.configHead);$.isPlainObject(a)&&(this.config=$.extend(this.config,a));for(var b in this.storageKeys.dictionary)this.dictionary[b]=this.getStorageData(this.storageKeys.dictionary[b])},saveConfig:function(){cookies.set(this.configHead,this.config,100);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){var b=JSON.parse(a);this.userConfig=$.extend(!0,this.userConfig,b)}},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(a,f){transmission.addTorrentFromFile(f,b,c,d,e.length)})}else alert(system.lang.publit["text-browsers-not-support-features"])},checkUpdate:function(){$.getScript(this.checkUpdateScript,function(){system.codeupdate "+system.lastUpdateInfos.infos)):$("#area-update-infos").hide()})},changeLanguages:function(a){a!=this.lang.name&&a&&(this.config.defaultLang=a,this.saveConfig(),location.href="?lang="+a)},getStorageData:function(a,b){return null==window.localStorage[a]?b:window.localStorage[a]},setStorageData:function(a,b){window.localStorage[a]=b},openDialogFromTemplate:function(a){var b={id:null,options:null,datas:null};if(a=$.extend(!0,b,a),null!=a.id){var c=a.id,d=a.options,e=a.datas,f=$("#"+c);if(f.length)return f.dialog("open"),e&&$.each(e,function(a,b){f.data(a,b)}),void f.dialog({content:system.templates[c]});var g={title:"",width:100,height:100,resizable:!1,cache:!0,content:"loading...",modal:!0};d=$.extend(!0,g,d),$("").attr("id",c).appendTo(document.body).dialog(d),$.get(system.rootPath+"template/"+c+".html?time="+new Date,function(a){system.templates[c]=a,e&&$.each(e,function(a,b){$("#"+c).data(a,b)}),$("#"+c).dialog({content:a})})}},debug:function(a,b){window.console&&window.console.log&&window.console.log(a,b)}};$(document).ready(function(){$.getScript(system.rootPath+"lang/default.js"),$.getScript(system.rootPath+"lang/_languages.js",function(){system.init(location.search.getQueryString("lang"),location.search.getQueryString("local"))})});
\ No newline at end of file
+function pagerFilter(a){"number"==typeof a.length&&"function"==typeof a.splice&&(a={total:a.length,rows:a});var b=$(this),c=b.datagrid("options"),d=b.datagrid("getPager"),e=b.data("buttons");d.pagination({onSelectPage:function(e,f){c.pageNumber=e,c.pageSize=f,d.pagination("refresh",{pageNumber:e,pageSize:f}),b.datagrid("loadData",a)},buttons:e}),a.originalRows||(a.originalRows=a.rows);var f=(c.pageNumber-1)*parseInt(c.pageSize),g=f+parseInt(c.pageSize);return a.rows=a.originalRows.slice(f,g),a}var system={version:"1.1 Beta",rootPath:"tr-web-control/",codeupdate:"20170518",configHead:"transmission-web-control",config:{autoReload:!0,reloadStep:5e3,pageSize:30,defaultSelectNode:null,autoExpandAttribute:!1,defaultLang:""},storageKeys:{dictionary:{folders:"dictionary.folders"}},dictionary:{folders:null},checkUpdateScript:"https://transmission-control.googlecode.com/svn/resouces/checkupdate.js",contextMenus:{},panel:null,lang:null,reloading:!1,autoReloadTimer:null,downloadDir:"",islocal:!1,B64:new Base64,currentTorrentId:0,control:{tree:null,torrentlist:null},userConfig:{torrentList:{fields:[],sortName:null,sortOrder:"asc"}},serverConfig:null,serverSessionStats:null,templates:{},setlang:function(a,b){a||(a=this.config.defaultLang?this.config.defaultLang:navigator.language||navigator.browserLanguage),a||(a="zh-CN"),-1!=a.indexOf("-")&&(a=a.split("-")[0].toLocaleLowerCase()+"-"+a.split("-")[1].toLocaleUpperCase()),this.languages[a]||(a="en"),$.getScript(system.rootPath+"lang/"+a+".js",function(){system.lang=$.extend(!0,system.defaultLang,system.lang),system.resetLangText(),$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-"+a.replace("-","_")+".js").done(function(a,c){b&&b()}).fail(function(a,c,d){$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-en.js",function(){b&&b()})})})},init:function(a,b,c){this.readConfig(),this.islocal=1==b,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"),list:$("#m_list"),attribute:$("#m_attribute"),bottom:$("#m_bottom"),title:$("#m_title"),status:$("#m_status"),statusbar:$("#m_statusbar"),status_text:$("#status_text"),droparea:$("#dropArea")},null==this.lang?this.setlang(a,function(){system.initdata()}):this.initdata()},resetLangText:function(parent){parent||(parent=$);var items=parent.find("*[system-lang]");$.each(items,function(key,item){var name=$(item).attr("system-lang");"["==name.substr(0,1)?$(item).html(eval("system.lang"+name)):$(item).html(eval("system.lang."+name))}),items=parent.find("*[system-tip-lang]"),$.each(items,function(key,item){var name=$(item).attr("system-tip-lang");"["==name.substr(0,1)?$(item).attr("title",eval("system.lang"+name)):$(item).attr("title",eval("system.lang."+name))})},initdata:function(){$(document).attr("title",this.lang.system.title+" "+this.version);var a=new Array,b=""+this.lang.title.left+"";a.push("");for(var c in this.lang.tree.toolbar.nav){var d=this.lang.tree.toolbar.nav[c];a.push(''+d+"")}if(a.push(""),a.length>1){b+=a.join(""),this.panel.left_layout.panel("setTitle",b);for(var c in this.lang.tree.toolbar.nav)$("#tree-toolbar-nav-"+c).linkbutton()}else this.panel.left_layout.panel("setTitle",b);b=""+this.lang.title.list+"",a.length=0,a.push("");for(var c in this.lang["torrent-head"].buttons){var d=this.lang["torrent-head"].buttons[c];a.push(''+d+"")}if(a.push(""),a.length>1){b+=a.join(""),this.panel.body.panel("setTitle",b);for(var c in this.lang["torrent-head"].buttons)switch($("#torrent-head-buttons-"+c).linkbutton(),c){case"autoExpandAttribute":system.config.autoExpandAttribute?$("#torrent-head-buttons-"+c).linkbutton({iconCls:"icon-enabled"}).data("status",1):$("#torrent-head-buttons-"+c).linkbutton({iconCls:"icon-disabled"}).data("status",0)}}else this.panel.body.panel("setTitle",b);this.panel.status.panel("setTitle",this.lang.title.status),this.panel.attribute.panel({title:this.lang.title.attribute,onExpand:function(){0!=system.currentTorrentId&&$(this).data("isload")?system.getTorrentInfos(system.currentTorrentId):system.clearTorrentAttribute()},onLoad:function(){$(this).data("isload")||($(this).data("isload",!0),0!=system.currentTorrentId&&setTimeout(function(){system.getTorrentInfos(system.currentTorrentId)},500))}}),$.each(this.languages,function(a,b){$("").text(b).val(a).attr("selected",a==system.lang.name).appendTo(system.panel.top.find("#lang"))}),this.panel.top.find("#lang").change(function(){location.href="?lang="+this.value}),this.panel.toolbar.attr("class","panel-header"),this.initTree(),this.initToolbar(),this.initStatusBar(),this.initTorrentTable(),this.connect(),this.initEvent()},initEvent:function(){$(window).resize(function(){$("#main").layout("resize")}),this.panel.droparea[0].addEventListener("dragover",function(a){a.stopPropagation(),a.preventDefault(),system.debug("#dropArea.dragover")},!1),this.panel.list[0].addEventListener("dragover",function(a){a.stopPropagation(),a.preventDefault(),system.panel.droparea.show(),system.debug("dragover")},!1),this.panel.droparea[0].addEventListener("drop",function(a){a.stopPropagation(),a.preventDefault(),system.panel.droparea.hide(),system.debug("drop.e.dataTransfer:",a.dataTransfer),system.checkDropFiles(a.dataTransfer.files)},!1),this.panel.droparea[0].addEventListener("dragleave",function(a){a.stopPropagation(),a.preventDefault(),system.panel.droparea.hide(),system.debug("dragleave")},!1),$("#text-drop-title").html(this.lang.public["text-drop-title"])},navToolbarClick:function(a){var b=a.id,c=$(a).data("status"),d=null;switch(b){case"tree-toolbar-nav-folders":d=this.panel.left.tree("find","folders");break;case"tree-toolbar-nav-statistics":d=this.panel.left.tree("find","statistics");break;case"torrent-head-buttons-autoExpandAttribute":d={},d.target=null,this.config.autoExpandAttribute=1!=c}d&&(1==c?($(a).linkbutton({iconCls:"icon-disabled"}),$(d.target).parent().hide(),c=0):($(a).linkbutton({iconCls:"icon-enabled"}),$(d.target).parent().show(),c=1),$(a).data("status",c),this.saveConfig())},checkDropFiles:function(a){if(a&&a.length){for(var b=new Array,c=0;c0&&system.openDialogFromTemplate({id:"dialog-torrent-addfile",options:{title:system.lang.toolbar["add-torrent"],width:620,height:300,resizable:!0},datas:{files:b}})}},initTree:function(){this.panel.left.tree({data:[{id:"torrent-all",iconCls:"icon-home",text:this.lang.tree.all+" ("+this.lang.tree.status.loading+")",children:[{id:"downloading",text:this.lang.tree.downloading,iconCls:"icon-download"},{id:"paused",text:this.lang.tree.paused,iconCls:"icon-pause"},{id:"sending",text:this.lang.tree.sending,iconCls:"icon-seed"},{id:"check",text:this.lang.tree.check,iconCls:"icon-check"},{id:"actively",text:this.lang.tree.actively,iconCls:"icon-actively"},{id:"error",text:this.lang.tree.error,iconCls:"icon-error"},{id:"warning",text:this.lang.tree.warning,iconCls:"icon-warning"}]},{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"icon-servers",children:[{id:"servers-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"folders",text:this.lang.tree.folders,children:[{id:"folders-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"statistics",text:this.lang.tree.statistics.title,state:"closed",iconCls:"icon-chart",children:[{id:"cumulative-stats",text:this.lang.tree.statistics.cumulative,children:[{id:"uploadedBytes",text:this.lang.tree.statistics.uploadedBytes},{id:"downloadedBytes",text:this.lang.tree.statistics.downloadedBytes},{id:"filesAdded",text:this.lang.tree.statistics.filesAdded},{id:"sessionCount",text:this.lang.tree.statistics.sessionCount},{id:"secondsActive",text:this.lang.tree.statistics.secondsActive}]},{id:"current-stats",text:this.lang.tree.statistics.current,children:[{id:"current-uploadedBytes",text:this.lang.tree.statistics.uploadedBytes},{id:"current-downloadedBytes",text:this.lang.tree.statistics.downloadedBytes},{id:"current-filesAdded",text:this.lang.tree.statistics.filesAdded},{id:"current-sessionCount",text:this.lang.tree.statistics.sessionCount},{id:"current-secondsActive",text:this.lang.tree.statistics.secondsActive}]}]}],onSelect:function(a){system.loadTorrentToList({node:a})},lines:!0});for(var a in this.lang.tree.toolbar.nav){var b=this.panel.left.tree("find",a);$(b.target).parent().hide()}if(this.config.defaultSelectNode){var c=this.panel.left.tree("find",this.config.defaultSelectNode);c&&this.panel.left.tree("select",c.target)}},initTorrentTable:function(){function a(){b&&$(b).remove(),b=$("").appendTo("body"),b.menu({onClick:function(a){"icon-ok"==a.iconCls?(system.control.torrentlist.datagrid("hideColumn",a.name),b.menu("setIcon",{target:a.target,iconCls:"icon-empty"})):(system.control.torrentlist.datagrid("showColumn",a.name),b.menu("setIcon",{target:a.target,iconCls:"icon-ok"})),system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.saveUserConfig()}});for(var a=system.control.torrentlist.datagrid("getColumnFields"),c=0;c").attr("class","torrent-list").appendTo(this.panel.list);var b=null,c=-1,d=!1;$.get(system.rootPath+"template/torrent-fields.json?time="+new Date,function(e){var f=e.fields;0!=system.userConfig.torrentList.fields.length&&(f=system.userConfig.torrentList.fields);var g=JSON.stringify(f);system.userConfig.torrentList.fields=JSON.parse(g);for(var h in f)f[h].title=system.lang.torrent.fields[f[h].field]||f[h].field,system.setFieldFormat(f[h]);system.control.torrentlist.datagrid({autoRowHeight:!1,pagination:!0,rownumbers:!0,remoteSort:!1,checkOnSelect:!1,pageSize:system.config.pageSize,idField:"id",fit:!0,striped:!0,sortName:system.userConfig.torrentList.sortName,sortOrder:system.userConfig.torrentList.sortOrder,drophead:!0,columns:[f],onCheck:function(a,b){system.checkTorrentRow(a,b)},onUncheck:function(a,b){system.checkTorrentRow(a,b)},onCheckAll:function(a){system.checkTorrentRow("all",!1)},onUncheckAll:function(a){system.checkTorrentRow("all",!0)},onSelect:function(a,b){-1!=c&&(d=!0,system.control.torrentlist.datagrid("unselectRow",c),d=!1),system.config.autoExpandAttribute&&system.panel.attribute.panel("options").collapsed&&system.panel.layout_body.layout("expand","south"),system.getTorrentInfos(b.id),c=a},onUnselect:function(a,b){system.config.autoExpandAttribute&&0==d&&(system.panel.attribute.panel("options").collapsed||system.panel.layout_body.layout("collapse","south")),system.currentTorrentId=0,c=-1},onBeforeLoad:function(a){system.currentTorrentId=0},onSortColumn:function(a,b){var c=a;"remainingTime"==a&&(c="remainingTimeRaw");var d=system.control.torrentlist.datagrid("getData").originalRows.sort(arrayObjectSort(c,b));system.control.torrentlist.datagrid("loadData",d),system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.userConfig.torrentList.sortName=a,system.userConfig.torrentList.sortOrder=b,system.saveUserConfig()},onRowContextMenu:function(a,b,c){system.control.torrentlist.datagrid("uncheckAll"),system.control.torrentlist.datagrid("checkRow",b),a.preventDefault(),system.showContextMenu("torrent-list",a)},onHeadDrop:function(a,b){system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.saveUserConfig()},onResizeColumn:function(a,b){system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.saveUserConfig()},onHeaderContextMenu:function(c,d){c.preventDefault(),b||a(),b.menu("show",{left:c.pageX,top:c.pageY})}})},"json")},resetTorrentListFieldsUserConfig:function(a){var b={};$.each(this.userConfig.torrentList.fields,function(a,c){b[c.field]=c}),this.userConfig.torrentList.fields=[],$.each(a,function(a,c){var d=$.extend({},b[c.field]);d.width=c.width,d.hidden=c.hidden,system.userConfig.torrentList.fields.push(d)})},showContextMenu:function(a,b){var c=this.contextMenus[a];c?c.empty():(c=$("").attr("class","easyui-menu").css({width:"180px"}).appendTo(this.panel.main),this.contextMenus[a]=c,c.menu());var d=null;switch(a){case"torrent-list":d=new Array("start","pause","-","rename","remove","recheck","-","morepeers","changeDownloadDir","-","menu-queue-move-top","menu-queue-move-up","menu-queue-move-down","menu-queue-move-bottom");var e=this.panel.toolbar;for(var f in d){var g=d[f];if("-"==g)$("").appendTo(c);else{var h=e.find("#toolbar_"+g);h.length>0?c.menu("appendItem",{text:h.attr("title"),id:g,iconCls:h.linkbutton("options").iconCls,disabled:h.linkbutton("options").disabled,onclick:function(){system.panel.toolbar.find("#toolbar_"+$(this).attr("id")).click()}}):(h=$("#"+g),h.length>0&&c.menu("appendItem",{text:h.attr("title"),id:g,iconCls:h.attr("id").replace("menu","icon"),disabled:e.find("#toolbar_changeDownloadDir").linkbutton("options").disabled,onclick:function(){$("#"+$(this).attr("id")).click()}})),h=null}}}c.menu("show",{left:b.pageX,top:b.pageY}),c=null,d=null},checkTorrentRow:function(a,b){this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_queue").menubutton("enable")},initToolbar:function(){this.panel.toolbar.find("#toolbar_label_reload_time").html(this.lang.toolbar["reload-time"]),this.panel.toolbar.find("#toolbar_label_reload_time_unit").html(this.lang.toolbar["reload-time-unit"]),this.panel.toolbar.find("#toolbar_reload_time").numberspinner({value:this.config.reloadStep/1e3,min:3,disabled:!this.config.autoReload,onChange:function(){var a=this.value;$.isNumeric(a)&&(system.config.reloadStep=1e3*a,system.saveConfig())}}),this.panel.toolbar.find("#toolbar_autoreload").linkbutton({text:this.config.autoReload?this.lang.toolbar["autoreload-enabled"]:this.lang.toolbar["autoreload-disabled"],iconCls:this.config.autoReload?"icon-enabled":"icon-disabled"}).attr("title",this.config.autoReload?this.lang.toolbar.tip["autoreload-disabled"]:this.lang.toolbar.tip["autoreload-enabled"]).click(function(){system.config.autoReload?(system.config.autoReload=!1,clearTimeout(system.autoReloadTimer),system.panel.toolbar.find("#toolbar_reload_time").numberspinner("disable")):(system.config.autoReload=!0,system.reloadData(),system.panel.toolbar.find("#toolbar_reload_time").numberspinner("enable")),system.saveConfig(),$(this).linkbutton({text:system.config.autoReload?system.lang.toolbar["autoreload-enabled"]:system.lang.toolbar["autoreload-disabled"],iconCls:system.config.autoReload?"icon-enabled":"icon-disabled"}).attr("title",system.config.autoReload?system.lang.toolbar.tip["autoreload-disabled"]:system.lang.toolbar.tip["autoreload-enabled"])}),this.panel.toolbar.find("#toolbar_add_torrents").linkbutton({text:this.lang.toolbar["add-torrent"],disabled:!1}).attr("title",this.lang.toolbar.tip["add-torrent"]).click(function(){system.openDialogFromTemplate({id:"dialog-torrent-add",options:{title:system.lang.toolbar["add-torrent"],width:620,height:400,resizable:!0}})}),this.panel.toolbar.find("#toolbar_start_all").linkbutton({disabled:!1}).attr("title",this.lang.toolbar.tip["start-all"]).click(function(){var a=$(this),b=a.linkbutton("options").iconCls;a.linkbutton({disabled:!0,iconCls:"icon-loading"}),transmission.exec({method:"torrent-start"},function(c){a.linkbutton({iconCls:b,disabled:!1}),a=null})}),this.panel.toolbar.find("#toolbar_pause_all").linkbutton({disabled:!1}).attr("title",this.lang.toolbar.tip["pause-all"]).click(function(){var a=$(this),b=a.linkbutton("options").iconCls;a.linkbutton({disabled:!0,iconCls:"icon-loading"}),transmission.exec({method:"torrent-stop"},function(c){a.linkbutton({iconCls:b,disabled:!1}),a=null})}),this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.start).click(function(){system.changeSelectedTorrentStatus("start",$(this))}),this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.pause).click(function(){system.changeSelectedTorrentStatus("stop",$(this))}),this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.recheck).click(function(){var a=system.control.torrentlist.datagrid("getChecked");if(a.length>0)if(1==a.length){var b=transmission.torrents.all[a[0].id];b.percentDone>0?confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this)):system.changeSelectedTorrentStatus("verify",$(this))}else confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this))}),this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:!0}).click(function(){system.changeSelectedTorrentStatus("reannounce",$(this))}),this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.remove).click(function(){var a=system.control.torrentlist.datagrid("getChecked"),b=new Array;for(var c in a)b.push(a[c].id);0!=b.length&&system.openDialogFromTemplate({id:"dialog-torrent-remove-confirm",options:{title:system.lang.dialog["torrent-remove"].title,width:350,height:150},datas:{ids:b}})}),this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:!0}).click(function(){var a=system.control.torrentlist.datagrid("getChecked");0!=a.length&&system.openDialogFromTemplate({id:"dialog-torrent-rename",options:{title:system.lang.dialog["torrent-rename"].title,width:450,height:150,resizable:!0},datas:{id:a[0].id}})}),this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip["change-download-dir"]).click(function(){var a=system.control.torrentlist.datagrid("getChecked"),b=new Array;for(var c in a)b.push(a[c].id);0!=b.length&&system.openDialogFromTemplate({id:"dialog-torrent-changeDownloadDir",options:{title:system.lang.dialog["torrent-changeDownloadDir"].title,width:520,height:200},datas:{ids:b}})}),this.panel.toolbar.find("#toolbar_alt_speed").linkbutton().attr("title",this.lang.toolbar.tip["alt-speed"]).click(function(){var a=$(this),b=a.linkbutton("options"),c=!1;"icon-alt-speed-false"==b.iconCls&&(c=!0),transmission.exec({method:"session-set",arguments:{"alt-speed-enabled":c}},function(b){"success"==b.result&&(system.serverConfig["alt-speed-enabled"]=c,a.linkbutton({iconCls:"icon-alt-speed-"+c.toString()}),c?$("#status_alt_speed").show():$("#status_alt_speed").hide())}),a.linkbutton({iconCls:"icon-loading"})}),this.panel.toolbar.find("#toolbar_config").linkbutton().attr("title",this.lang.toolbar.tip["system-config"]).click(function(){system.openDialogFromTemplate({id:"dialog-system-config",options:{title:system.lang.toolbar["system-config"],width:620,height:440,resizable:!0}})}),this.panel.toolbar.find("#toolbar_reload").linkbutton().attr("title",this.lang.toolbar.tip["system-reload"]).click(function(){system.reloadData()}),this.panel.toolbar.find("#toolbar_search").searchbox({searcher:function(a){system.searchTorrents(a)},prompt:this.lang.toolbar["search-prompt"]})},initStatusBar:function(){this.panel.statusbar.find("#status_title_downloadspeed").html(this.lang.statusbar.downloadspeed),this.panel.statusbar.find("#status_title_uploadspeed").html(this.lang.statusbar.uploadspeed)},connect:function(){this.showStatus(this.lang.system.status.connect,0),transmission.on.torrentCountChange=function(){system.reloadTorrentBaseInfos()},transmission.on.postError=function(){},transmission.init({islocal:!0},function(){system.reloadSession(!0),system.getServerStatus()})},reloadSession:function(a){transmission.getSession(function(b){system.serverConfig=b,$("#status_version").html("Transmission "+system.lang.statusbar.version+b.version+", RPC: "+b["rpc-version"]+", WEB Control: "+system.version+"("+system.codeupdate+")"),1==b["alt-speed-enabled"]?(system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"icon-alt-speed-true"}),$("#status_alt_speed").show()):(system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"icon-alt-speed-false"}),$("#status_alt_speed").hide()),system.downloadDir=b["download-dir"],0==transmission.downloadDirs.length&&transmission.downloadDirs.push(system.downloadDir),parseInt(system.serverConfig["rpc-version"])>=15?transmission.getFreeSpace(system.downloadDir,function(a){system.serverConfig["download-dir-free-space"]=a.arguments["size-bytes"],system.showFreeSpace(a.arguments["size-bytes"])}):system.showFreeSpace(system.serverConfig["download-dir-free-space"]),a&&system.showStatus(system.lang.system.status.connected)})},showFreeSpace:function(a){var b=a;b=-1==b?system.lang.public["text-unknown"]:formatSize(b),$("#status_freespace").text(system.lang.dialog["system-config"]["download-dir-free-space"]+" "+b)},reloadTorrentBaseInfos:function(a,b){if(!this.reloading){clearTimeout(this.autoReloadTimer),this.reloading=!0;var c={trackers:transmission.trackers,folders:transmission.torrents.folders};transmission.torrents.getallids(function(a){var b=new Array;for(var d in a){var e=a[d];b.push(e.id)}var f=transmission.torrents.getErrorIds(b,!0);f.length>0?transmission.torrents.getallids(function(){system.resetTorrentInfos(c)},f):system.resetTorrentInfos(c)},a,b)}},resetTorrentInfos:function(a){var b=this.currentTorrentId,c=this.panel.left.tree("find","servers");if(c){var d=c.state;this.removeTreeNode("servers-loading")}else this.appendTreeNode(null,[{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"icon-servers"}]),c=this.panel.left.tree("find","servers");new Array;for(var e in transmission.trackers){var f=transmission.trackers[e],g=system.panel.left.tree("find",f.nodeid),h=f.name+this.showNodeMoreInfos(f.count,f.size);g?system.updateTreeNodeText(f.nodeid,h,f.connected?"icon-server":"icon-server-error"):system.appendTreeNode(c,[{id:f.nodeid,text:h,iconCls:f.connected?"icon-server":"icon-server-error"}]),a.trackers[f.nodeid]=null}"closed"==d&&this.panel.left.tree("collapse",c.target);for(var e in a.trackers){var f=a.trackers[e];f&&system.removeTreeNode(f.nodeid)}if(transmission.torrents.status[transmission._status.stopped]?system.updateTreeNodeText("paused",system.lang.tree.paused+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.stopped].length)):system.updateTreeNodeText("paused",system.lang.tree.paused),transmission.torrents.status[transmission._status.seed]?system.updateTreeNodeText("sending",system.lang.tree.sending+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seed].length)):system.updateTreeNodeText("sending",system.lang.tree.sending),transmission.torrents.status[transmission._status.seedwait]){var g=system.panel.left.tree("find","sending"),i=system.panel.left.tree("getChildren",g.target),h=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seedwait].length);i.length>0?system.updateTreeNodeText(i[0].id,h):system.appendTreeNode(g,[{id:"seedwait",text:h,iconCls:"icon-wait"}])}else system.removeTreeNode("seedwait");if(transmission.torrents.status[transmission._status.check]?system.updateTreeNodeText("check",system.lang.tree.check+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.check].length)):system.updateTreeNodeText("check",system.lang.tree.check),transmission.torrents.status[transmission._status.checkwait]){var g=system.panel.left.tree("find","check"),i=system.panel.left.tree("getChildren",g.target),h=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.checkwait].length);i.length>0?system.updateTreeNodeText(i[0].id,h):system.appendTreeNode(g,[{id:"checkwait",text:h,iconCls:"icon-wait"}])}else system.removeTreeNode("checkwait");if(transmission.torrents.status[transmission._status.download]?system.updateTreeNodeText("downloading",system.lang.tree.downloading+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.download].length)):system.updateTreeNodeText("downloading",system.lang.tree.downloading),transmission.torrents.status[transmission._status.downloadwait]){var g=system.panel.left.tree("find","downloading"),i=system.panel.left.tree("getChildren",g.target),h=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.downloadwait].length);i.length>0?system.updateTreeNodeText(i[0].id,h):system.appendTreeNode(g,[{id:"downloadwait",text:h,iconCls:"icon-wait"}])}else system.removeTreeNode("downloadwait");system.updateTreeNodeText("actively",system.lang.tree.actively+this.showNodeMoreInfos(transmission.torrents.actively.length)),system.updateTreeNodeText("error",system.lang.tree.error+this.showNodeMoreInfos(transmission.torrents.error.length)),system.updateTreeNodeText("warning",system.lang.tree.warning+this.showNodeMoreInfos(transmission.torrents.warning.length));var g=system.panel.left.tree("getSelected");if(null!=g){var j=system.control.torrentlist.datagrid("options").pageNumber;system.loadTorrentToList({node:g,page:j})}0!=b&&system.control.torrentlist.datagrid("selectRecord",b),system.reloading=!1,system.config.autoReload&&(system.autoReloadTimer=setTimeout(function(){system.reloadData()},system.config.reloadStep)),system.updateTreeNodeText("torrent-all",system.lang.tree.all+this.showNodeMoreInfos(transmission.torrents.count,transmission.torrents.totalSize));var k="uploadedBytes,downloadedBytes,filesAdded,sessionCount,secondsActive".split(",");$.each(k,function(a,b){switch(b){case"uploadedBytes":case"downloadedBytes":system.updateTreeNodeText(b,system.lang.tree.statistics[b]+formatSize(system.serverSessionStats["cumulative-stats"][b])),system.updateTreeNodeText("current-"+b,system.lang.tree.statistics[b]+formatSize(system.serverSessionStats["current-stats"][b]));break;case"secondsActive":system.updateTreeNodeText(b,system.lang.tree.statistics[b]+getTotalTime(1e3*system.serverSessionStats["cumulative-stats"][b])),system.updateTreeNodeText("current-"+b,system.lang.tree.statistics[b]+getTotalTime(1e3*system.serverSessionStats["current-stats"][b]));break;default:system.updateTreeNodeText(b,system.lang.tree.statistics[b]+system.serverSessionStats["cumulative-stats"][b]),system.updateTreeNodeText("current-"+b,system.lang.tree.statistics[b]+system.serverSessionStats["current-stats"][b])}});for(var e in transmission.torrents.folders){var l=transmission.torrents.folders[e];a.folders[l.nodeid]=null}this.loadFolderList(a.folders),navigator.userAgent.indexOf("Firefox")>0&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"})},showNodeMoreInfos:function(a,b){var c="";return a>0&&(c=" ("+a+")"),b>0&&(c+="["+formatSize(b)+"]"),c},getServerStatus:function(){this.reloading||(clearTimeout(this.autoReloadTimer),this.reloading=!0,transmission.getStatus(function(a){if(system.reloading=!1,$("#status_downloadspeed").html(formatSize(a.downloadSpeed,!1,"speed")),$("#status_uploadspeed").html(formatSize(a.uploadSpeed,!1,"speed")),system.serverSessionStats=a,0==a.torrentCount){var b=system.panel.left.tree("find","servers");b&&system.panel.left.tree("remove",b.target),system.updateTreeNodeText("torrent-all",system.lang.tree.all)}}))},showStatus:function(a,b){$("#m_status").panel("options").collapsed&&$("#layout_left").layout("expand","south"),this.panel.status_text.show(),this.panel.status_text.html(a),0!=b&&(void 0==b&&(b=3e3),this.panel.status_text.fadeOut(b,function(){$("#layout_left").layout("collapse","south")}))},updateTreeNodeText:function(a,b,c){var d=this.panel.left.tree("find",a);if(d){var e={target:d.target,text:b};void 0!=c&&(e.iconCls=c),this.panel.left.tree("update",e)}d=null},appendTreeNode:function(a,b){var c=null;c="string"==typeof a?this.panel.left.tree("find",a):a,c?this.panel.left.tree("append",{parent:c.target,data:b}):this.panel.left.tree("append",{data:b}),c=null},removeTreeNode:function(a){var b=this.panel.left.tree("find",a);b&&this.panel.left.tree("remove",b.target),b=null},loadTorrentToList:function(a){if(transmission.torrents.all){var b={node:null,page:1};if(jQuery.extend(b,a),a.node){var c=null,d=this.panel.left.tree("getParent",a.node.target)||{id:""},e=this.panel.left.data("currentNodeId");switch(e!=a.node.id&&(this.control.torrentlist.datagrid({pageNumber:1}),e=a.node.id),this.panel.left.data("currentNodeId",e),d.id){case"servers":c=transmission.trackers[a.node.id].torrents;break;default:switch(a.node.id){case"torrent-all":case"servers":c=transmission.torrents.all;break;case"paused":c=transmission.torrents.status[transmission._status.stopped];break;case"sending":c=transmission.torrents.status[transmission._status.seed];break;case"seedwait":c=transmission.torrents.status[transmission._status.seedwait];break;case"check":c=transmission.torrents.status[transmission._status.check];break;case"checkwait":c=transmission.torrents.status[transmission._status.checkwait];break;case"downloading":c=transmission.torrents.status[transmission._status.download];break;case"downloadwait":c=transmission.torrents.status[transmission._status.downloadwait];break;case"actively":c=transmission.torrents.actively;break;case"error":c=transmission.torrents.error;break;case"warning":c=transmission.torrents.warning;break;case"search-result":c=transmission.torrents.searchResult;break;default:if(-1!=a.node.id.indexOf("folders-")){var f=transmission.torrents.folders[a.node.id];f&&(c=f.torrents)}}}this.config.defaultSelectNode!=a.node.id&&(this.control.torrentlist.datagrid("loadData",[]),this.config.defaultSelectNode=a.node.id,this.saveConfig());var g=new Array;for(var h in c){if(!c[h])return;var i=this.lang.torrent["status-text"][c[h].status];parseFloat(100*c[h].percentDone).toFixed(2);i==transmission._status.check&&parseFloat(100*c[h].recheckProgress).toFixed(2),0!=c[h].error?i=""+i+"":c[h].warning&&(i=""+i+"");var j={};j=$.extend(j,c[h]),j.status=i,j.statusCode=c[h].status,j.completeSize=Math.max(0,c[h].totalSize-c[h].leftUntilDone),j.leecherCount=c[h].leecher,j.seederCount=c[h].seeder,g.push(j)}this.updateTorrentCurrentPageDatas(g)}}},updateTorrentCurrentPageDatas:function(a){var b=this.control.torrentlist.datagrid("getRows");if(0==a.length&&b.length>0)return void this.control.torrentlist.datagrid("loadData",[]);var c=this.control.torrentlist.datagrid("options"),d=null;if(c.sortName){d=c.sortName;var e=d;"remainingTime"==d&&(e="remainingTimeRaw"),a=a.sort(arrayObjectSort(e,c.sortOrder))}if(0==b.length||a.length!=this.control.torrentlist.datagrid("getData").total&&a.length>c.pageSize)return void this.control.torrentlist.datagrid({loadFilter:pagerFilter,pageNumber:c.pageNumber,sortName:d,sortOrder:c.sortOrder}).datagrid("loadData",a)
+;this.control.torrentlist.datagrid("getData").originalRows=a;var f=(c.pageNumber-1)*parseInt(c.pageSize),g=f+parseInt(c.pageSize);a=a.slice(f,g);var h={},i={};for(var j in transmission.torrents.recently){var k=transmission.torrents.recently[j];h[k.id]=!0,k=null}for(var j in a){var k=a[j];i[k.id]=k,k=null}for(var l={},j=b.length-1;j>=0;j--){var k=b[j],m=i[k.id];m?h[k.id]?(this.control.torrentlist.datagrid("updateRow",{index:j,row:m}),l[k.id]=k):transmission.torrents.removed&&transmission.torrents.removed.length>0&&-1!=$.inArray(k.id,transmission.torrents.removed)?this.control.torrentlist.datagrid("deleteRow",j):l[k.id]=k:this.control.torrentlist.datagrid("deleteRow",j),k=null,m=null}for(var j in a){var k=a[j];l[k.id]||this.control.torrentlist.datagrid("appendRow",k)}b=null,h=null,i=null},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"}return c+="\n"+a.downloadDir,a.warning&&(b="iconlabel icon-warning-type1",c+="\n\n"+this.lang.public["text-info"]+": "+a.warning),0!=a.error&&(b="iconlabel icon-exclamation",c+="\n\n"+this.lang.public["text-info"]+": "+a.errorString),''+a.name+""},getTorrentProgressBar:function(a,b){a+="%";var c="";switch("object"==typeof b?b.status:b){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"}return"object"==typeof b&&(b.warning&&(c="torrent-progress-warning"),0!=b.error&&(c="torrent-progress-error")),'
'+a+'
'},addTorrentsToServer:function(a,b,c,d){var e=b-a.length,f=a.shift();if(!f)return this.showStatus(this.lang.system.status.queuefinish),void this.getServerStatus();this.showStatus(this.lang.system.status.queue+(e+1)+"/"+b+" "+f,0),transmission.addTorrentFromUrl(f,d,c,function(e){system.addTorrentsToServer(a,b,c,d)})},changeSelectedTorrentStatus:function(a,b,c){var d=this.control.torrentlist.datagrid("getChecked"),e=new Array;a||(a="start");for(var f in d)e.push(d[f].id);if(c||(c="torrent-"+a),e.length>0){if(b){var g=b.linkbutton("options").iconCls;b.linkbutton({disabled:!0,iconCls:"icon-loading"})}transmission.exec({method:c,arguments:{ids:e}},function(a){b&&b.linkbutton({iconCls:g}),system.control.torrentlist.datagrid("uncheckAll"),system.reloadTorrentBaseInfos()})}},searchTorrents:function(a){if(""!=a){var b=transmission.torrents.search(a);if(null==b||0==b.length)return void this.removeTreeNode("search-result");var c=this.panel.left.tree("find","search-result"),d=this.lang.tree["search-result"]+" : "+a+" ("+b.length+")";null==c?(this.appendTreeNode("torrent-all",[{id:"search-result",text:d,iconCls:"icon-search"}]),c=this.panel.left.tree("find","search-result")):this.panel.left.tree("update",{target:c.target,text:d}),this.panel.left.tree("select",c.target)}},getTorrentInfos:function(a){if(transmission.torrents.all[a]&&!transmission.torrents.all[a].infoIsLoading&&!(this.currentTorrentId>0&&transmission.torrents.all[this.currentTorrentId]&&transmission.torrents.all[this.currentTorrentId].infoIsLoading||(this.currentTorrentId=a,this.panel.attribute.panel("options").collapsed))){var b=transmission.torrents.all[a];b.infoIsLoading=!0;var c="fileStats,trackerStats,peers,leftUntilDone,status,rateDownload,rateUpload,uploadedEver,uploadRatio,error,errorString";b.moreInfosTag||(c+=",files,trackers,comment,dateCreated,creator,downloadDir"),transmission.torrents.getMoreInfos(c,a,function(c){if(b.infoIsLoading=!1,null!=c){if(jQuery.extend(b,c[0]),0==system.currentTorrentId||system.currentTorrentId!=a)return void system.clearTorrentAttribute();b.completeSize=b.totalSize-b.leftUntilDone,b.moreInfosTag=!0,system.fillTorrentBaseInfos(b),system.fillTorrentFileList(b),system.fillTorrentServerList(b),system.fillTorrentPeersList(b),system.fillTorrentConfig(b),transmission.torrents.all[a]=b,transmission.torrents.datas[a]=b}})}},clearTorrentAttribute:function(){system.panel.attribute.find("#torrent-files-table").datagrid("loadData",[]),system.panel.attribute.find("#torrent-servers-table").datagrid("loadData",[]),system.panel.attribute.find("#torrent-peers-table").datagrid("loadData",[]),system.panel.attribute.find("span[id*='torrent-attribute-value']").html("")},updateCurrentPageDatas:function(a,b,c){var d=c.datagrid("getRows"),e=c.datagrid("options"),f=null;if(e.sortName&&(f=e.sortName,b=b.sort(arrayObjectSort(f,e.sortOrder))),0==d.length||b.length!=c.datagrid("getData").total&&b.length>e.pageSize)return void c.datagrid({loadFilter:pagerFilter,pageNumber:1,sortName:f,sortOrder:e.sortOrder}).datagrid("loadData",b);c.datagrid("getData").originalRows=b;var g=(e.pageNumber-1)*parseInt(e.pageSize),h=g+parseInt(e.pageSize);b=b.slice(g,h);var i={};for(var j in b){var k=b[j];i[k[a]]=k,k=null}for(var j=d.length-1;j>=0;j--){var k=d[j],l=i[k[a]];l?c.datagrid("updateRow",{index:j,row:l}):c.datagrid("deleteRow",j),l=null,k=null}},fillTorrentBaseInfos:function(a){$.each(a,function(a,b){switch(a){case"rateDownload":case"rateUpload":b=formatSize(b,!0,"speed");break;case"totalSize":case"uploadedEver":case"leftUntilDone":case"completeSize":b=formatSize(b);break;case"addedDate":case"dateCreated":case"doneDate":b=formatLongTime(b);break;case"status":b=system.lang.torrent["status-text"][b];break;case"error":0==b?system.panel.attribute.find("#torrent-attribute-tr-error").hide():system.panel.attribute.find("#torrent-attribute-tr-error").show();break;case"comment":b=system.replaceURI(b)}system.panel.attribute.find("#torrent-attribute-value-"+a).html(b)})},fillTorrentFileList:function(a){var b=a.files,c=a.fileStats,d=new Array,e=a.name.length+1;for(var f in b){var g=b[f],h=c[f],i=parseFloat(h.bytesCompleted/g.length*100).toFixed(2);d.push({name:g.name==a.name?g.name:g.name.substr(e),index:f,bytesCompleted:h.bytesCompleted,percentDone:system.getTorrentProgressBar(i,transmission._status.download),length:g.length,wanted:system.lang.torrent.attribute.status[h.wanted],priority:''+system.lang.torrent.attribute.priority[h.priority]+""})}this.updateCurrentPageDatas("index",d,system.panel.attribute.find("#torrent-files-table"))},fillTorrentServerList:function(a){var b=a.trackers,c=a.trackerStats,d=new Array;for(var e in b){var f=(b[e],c[e]),g={};for(var h in f)switch(h){case"lastAnnounceTime":case"nextAnnounceTime":g[h]=formatLongTime(f[h]);break;case"lastAnnounceSucceeded":case"lastAnnounceTimedOut":g[h]=system.lang.torrent.attribute.status[f[h]];break;default:g[h]=f[h]}d.push(g)}transmission.torrents.addTracker(a),this.updateCurrentPageDatas("id",d,system.panel.attribute.find("#torrent-servers-table"))},fillTorrentPeersList:function(a){var b=a.peers,c=new Array;for(var d in b){var e=b[d],f={};for(var g in e)f[g]=e[g];var h=parseFloat(100*e.progress).toFixed(2);f.progress=system.getTorrentProgressBar(h,transmission._status.download),c.push(f)}this.updateCurrentPageDatas("address",c,system.panel.attribute.find("#torrent-peers-table"))},fillTorrentConfig:function(a){4==system.panel.attribute.find("#torrent-attribute-tabs").data("selectedIndex")&&transmission.torrents.getConfig(a.id,function(a){if(null!=a){var b=transmission.torrents.all[system.currentTorrentId];jQuery.extend(b,a[0]),0!=system.currentTorrentId&&$.each(a[0],function(a,b){var c=!1,d=!1,e=!1;switch(a){case"seedIdleMode":case"seedRatioMode":0==b&&(d=!1,c=!0),e=!0;case"downloadLimited":case"uploadLimited":1!=b&&1!=b||(d=!0),system.panel.attribute.find("input[enabledof='"+a+"']").prop("disabled",!d),e&&system.panel.attribute.find("#"+a).prop("indeterminate",c).data("_tag",b),system.panel.attribute.find("#"+a).prop("checked",d);break;default:system.panel.attribute.find("#"+a).val(b),system.panel.attribute.find("#"+a).numberspinner("setValue",b)}})}})},setFieldFormat:function(a){if(a.formatter)switch(a.formatter){case"size":a.formatter=function(a,b,c){return formatSize(a)};break;case"speed":a.formatter=function(a,b,c){return formatSize(a,!0,"speed")};break;case"longtime":a.formatter=function(a,b,c){return formatLongTime(a)};break;case"progress":a.formatter=function(a,b,c){var d=parseFloat(100*a).toFixed(2);return system.getTorrentProgressBar(d,transmission.torrents.all[b.id])};break;case"_usename_":switch(a.field){case"name":a.formatter=function(a,b,c){return system.getTorrentNameBar(transmission.torrents.all[b.id])}}}},reloadData:function(){this.reloadSession(),this.reloading=!1,this.getServerStatus(),this.reloading=!1,this.reloadTorrentBaseInfos(),this.checkTorrentRow("all",!1)},loadFolderList:function(a){this.removeTreeNode("folders-loading");for(var b in a){var c=a[b];c&&system.removeTreeNode(c.nodeid)}0!=transmission.downloadDirs.length&&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"})})},appendFolder:function(a){if(a){var b="folders",c=a.split("/"),d="folders-";for(var e in c){var f=c[e];if(""!=f){d+=this.B64.encode(f);var g=this.panel.left.tree("find",d),h=transmission.torrents.folders[d],i=f+this.showNodeMoreInfos(h.count,h.size);g?this.updateTreeNodeText(d,i):(this.appendTreeNode(b,[{id:d,text:i}]),"folders"!=b&&(g=this.panel.left.tree("find",b),this.panel.left.tree("collapse",g.target))),b=d}}}},replaceURI:function(a){return a.replace(/(http|https|ftp):\/\/([^\/:]+)(:\d*)?([^# ]*)/gi,function(a){return''+a+""})},readConfig:function(){this.readUserConfig();var a=cookies.get(this.configHead);$.isPlainObject(a)&&(this.config=$.extend(this.config,a));for(var b in this.storageKeys.dictionary)this.dictionary[b]=this.getStorageData(this.storageKeys.dictionary[b])},saveConfig:function(){cookies.set(this.configHead,this.config,100);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){var b=JSON.parse(a);this.userConfig=$.extend(!0,this.userConfig,b)}},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(a,f){transmission.addTorrentFromFile(f,b,c,d,e.length)})}else alert(system.lang.publit["text-browsers-not-support-features"])},checkUpdate:function(){$.getScript(this.checkUpdateScript,function(){system.codeupdate "+system.lastUpdateInfos.infos)):$("#area-update-infos").hide()})},changeLanguages:function(a){a!=this.lang.name&&a&&(this.config.defaultLang=a,this.saveConfig(),location.href="?lang="+a)},getStorageData:function(a,b){return null==window.localStorage[a]?b:window.localStorage[a]},setStorageData:function(a,b){window.localStorage[a]=b},openDialogFromTemplate:function(a){var b={id:null,options:null,datas:null};if(a=$.extend(!0,b,a),null!=a.id){var c=a.id,d=a.options,e=a.datas,f=$("#"+c);if(f.length)return f.dialog("open"),e&&$.each(e,function(a,b){f.data(a,b)}),void f.dialog({content:system.templates[c]});var g={title:"",width:100,height:100,resizable:!1,cache:!0,content:"loading...",modal:!0};d=$.extend(!0,g,d),$("").attr("id",c).appendTo(document.body).dialog(d),$.get(system.rootPath+"template/"+c+".html?time="+new Date,function(a){system.templates[c]=a,e&&$.each(e,function(a,b){$("#"+c).data(a,b)}),$("#"+c).dialog({content:a})})}},debug:function(a,b){window.console&&window.console.log&&window.console.log(a,b)}};$(document).ready(function(){$.getScript(system.rootPath+"lang/default.js"),$.getScript(system.rootPath+"lang/_languages.js",function(){system.init(location.search.getQueryString("lang"),location.search.getQueryString("local"))})});
diff --git a/src/tr-web-control/script/system.js b/src/tr-web-control/script/system.js
index c33c8cd..4d6b452 100644
--- a/src/tr-web-control/script/system.js
+++ b/src/tr-web-control/script/system.js
@@ -2,7 +2,7 @@
var system = {
version:"1.1 Beta"
,rootPath: "tr-web-control/"
- ,codeupdate:"20170504"
+ ,codeupdate:"20170518"
,configHead: "transmission-web-control"
,config:{
autoReload: true
diff --git a/src/tr-web-control/script/transmission.torrents.js b/src/tr-web-control/script/transmission.torrents.js
index 958acf6..00c5352 100644
--- a/src/tr-web-control/script/transmission.torrents.js
+++ b/src/tr-web-control/script/transmission.torrents.js
@@ -155,7 +155,7 @@ transmission.torrents = {
continue;
}
- // If the current torrent is being acquired and there is no torrent in the previous torrent list, that is, the new torrent needs to be reloaded with the basic information
+ // If the current torrent is being acquired and there is no such torrent in the previous torrent list, that is, the new torrent needs to be reloaded with the basic information
if (this.isRecentlyActive&&!this.all[item.id])
{
this.newIds.push(item.id);
@@ -554,4 +554,4 @@ transmission.torrents = {
);
}
}
-};
\ No newline at end of file
+};
diff --git a/src/tr-web-control/template/dialog-system-config.html b/src/tr-web-control/template/dialog-system-config.html
index 5602747..0c0a211 100644
--- a/src/tr-web-control/template/dialog-system-config.html
+++ b/src/tr-web-control/template/dialog-system-config.html
@@ -10,13 +10,13 @@
-
+
-
+
@@ -40,7 +40,7 @@
-
+
@@ -396,16 +396,12 @@
}
thisDialog.find("#download-dir-free-space").text(tmp);
- // Local dictionary folder list
- //thisDialog.find("#local-storage-dictionary-folders").val(transmission.downloadDirs);
- // Will add back this feature if the bug solved
- var downloadDirs = $.merge([],transmission.downloadDirs);
- if (system.dictionary.folders.length!=0)
- {
- $.merge(downloadDirs,system.dictionary.folders.split("\n"));
- }
- downloadDirs = uniq(downloadDirs);
- thisDialog.find("#local-storage-dictionary-folders").val(downloadDirs.join("\n"));
+ // Local dictionary folder list (not including transmission.downloadDirs)
+ if (system.dictionary.folders == null) {
+ thisDialog.find("#local-storage-dictionary-folders").val("");
+ } else{
+ thisDialog.find("#local-storage-dictionary-folders").val(system.dictionary.folders);
+ }
//thisDialog.find("#local-storage-dictionary-folders").val(transmission.downloadDirs);
@@ -623,7 +619,11 @@
// Save the local data
function saveLocalData()
{
- system.dictionary.folders = thisDialog.find("#local-storage-dictionary-folders").val().replace(/^\s*[\r\n]/gm, "");
+ if(thisDialog.find("#local-storage-dictionary-folders").val().replace(/^\s*[\r\n]/gm, "").length==0) {
+ system.dictionary.folders=null;
+ } else {
+ system.dictionary.folders = thisDialog.find("#local-storage-dictionary-folders").val().replace(/^\s*[\r\n]/gm, "");
+ }
system.saveConfig();
thisDialog.dialog("close");
}
diff --git a/src/tr-web-control/template/dialog-torrent-add.html b/src/tr-web-control/template/dialog-torrent-add.html
index feeafe4..065ec00 100644
--- a/src/tr-web-control/template/dialog-torrent-add.html
+++ b/src/tr-web-control/template/dialog-torrent-add.html
@@ -61,19 +61,19 @@
thisDialog.find("#download-dir").val(system.downloadDir);
var downloadDirs = $.merge([],transmission.downloadDirs);
- if (system.dictionary.folders.length!=0)
+ if (system.dictionary.folders != null)
{
$.merge(downloadDirs,system.dictionary.folders.split("\n"));
}
downloadDirs = uniq(downloadDirs);
-
- $.each(downloadDirs, function(i, item){
- $("").text(item).val(item).attr("selected",(item==system.downloadDir?true:false)).appendTo(thisDialog.find("#download-dir"));
- });
- if (downloadDirs.length==0)
+ if (downloadDirs == null)
{
$("").text(system.downloadDir).val(system.downloadDir).attr("selected",true).appendTo(thisDialog.find("#download-dir"));
- }
+ } else {
+ $.each(downloadDirs, function(i, item){
+ $("").text(item).val(item).attr("selected",(item==system.downloadDir?true:false)).appendTo(thisDialog.find("#download-dir"));
+ });
+ }
thisDialog.find("#chkautostart").prop("checked", system.serverConfig["start-added-torrents"]);
thisDialog.find("#download-dir").combobox();
diff --git a/src/tr-web-control/template/dialog-torrent-addfile.html b/src/tr-web-control/template/dialog-torrent-addfile.html
index c770ab6..24b5294 100644
--- a/src/tr-web-control/template/dialog-torrent-addfile.html
+++ b/src/tr-web-control/template/dialog-torrent-addfile.html
@@ -50,19 +50,20 @@
thisDialog.find("#download-dir").val(system.downloadDir);
var downloadDirs = $.merge([],transmission.downloadDirs);
- if (system.dictionary.folders.length!=0)
+ if (system.dictionary.folders != null)
{
$.merge(downloadDirs,system.dictionary.folders.split("\n"));
}
downloadDirs = uniq(downloadDirs);
-
- $.each(downloadDirs, function(i, item){
- $("").text(item).val(item).attr("selected",(item==system.downloadDir?true:false)).appendTo(thisDialog.find("#download-dir"));
- });
- if (downloadDirs.length==0)
- {
+ if (downloadDirs == null)
+ {
$("").text(system.downloadDir).val(system.downloadDir).attr("selected",true).appendTo(thisDialog.find("#download-dir"));
- }
+ } else {
+ $.each(downloadDirs, function(i, item){
+ $("").text(item).val(item).attr("selected",(item==system.downloadDir?true:false)).appendTo(thisDialog.find("#download-dir"));
+ });
+ }
+
thisDialog.find("#download-dir").combobox();
$.each(thisDialog.data("files"),function(i,item){
$("").text((i+1)+"."+item.name).appendTo(thisDialog.find("#torrent_upload_file"));