diff --git a/src/tr-web-control/i18n/en.json b/src/tr-web-control/i18n/en.json
index 757a77d..b7b2e8f 100644
--- a/src/tr-web-control/i18n/en.json
+++ b/src/tr-web-control/i18n/en.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "Automatically matches data directory"
},
- "setLabels": "Set User Labels"
+ "setLabels": "Set User Labels",
+ "copyMagnetLink": "Copy magnetLink to clipboard"
},
"title": {
"left": "Navigation",
diff --git a/src/tr-web-control/i18n/es.json b/src/tr-web-control/i18n/es.json
index 2a74721..da165df 100644
--- a/src/tr-web-control/i18n/es.json
+++ b/src/tr-web-control/i18n/es.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "Elegir automáticamente directorio de datos"
},
- "setLabels": "Set User Labels"
+ "setLabels": "Set User Labels",
+ "copyMagnetLink": "Copy magnetLink to clipboard"
},
"title": {
"left": "Navegación",
diff --git a/src/tr-web-control/i18n/fr.json b/src/tr-web-control/i18n/fr.json
index df67d11..1c32c32 100644
--- a/src/tr-web-control/i18n/fr.json
+++ b/src/tr-web-control/i18n/fr.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "Correspondance auto des dossiers de données"
},
- "setLabels": "Personnaliser les étiquettes"
+ "setLabels": "Personnaliser les étiquettes",
+ "copyMagnetLink": "Copy magnetLink to clipboard"
},
"title": {
"left": "Navigation",
diff --git a/src/tr-web-control/i18n/hu.json b/src/tr-web-control/i18n/hu.json
index 3ac67f0..d25a4d1 100644
--- a/src/tr-web-control/i18n/hu.json
+++ b/src/tr-web-control/i18n/hu.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "Könyvtárak automatikus felismerése"
},
- "setLabels": "Set User Labels"
+ "setLabels": "Set User Labels",
+ "copyMagnetLink": "Copy magnetLink to clipboard"
},
"title": {
"left": "Navigáció",
diff --git a/src/tr-web-control/i18n/it.json b/src/tr-web-control/i18n/it.json
index 0b0db08..052373c 100644
--- a/src/tr-web-control/i18n/it.json
+++ b/src/tr-web-control/i18n/it.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "Associa automaticamente cartella dati"
},
- "setLabels": "Imposta Etichette Utente"
+ "setLabels": "Imposta Etichette Utente",
+ "copyMagnetLink": "Copy magnetLink to clipboard"
},
"title": {
"left": "Navigazione",
diff --git a/src/tr-web-control/i18n/ko.json b/src/tr-web-control/i18n/ko.json
index 110fde9..75f0905 100644
--- a/src/tr-web-control/i18n/ko.json
+++ b/src/tr-web-control/i18n/ko.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "자동으로 데이터 폴더 일치시키기"
},
- "setLabels": "Set User Labels"
+ "setLabels": "Set User Labels",
+ "copyMagnetLink": "Copy magnetLink to clipboard"
},
"title": {
"left": "안내",
diff --git a/src/tr-web-control/i18n/nl.json b/src/tr-web-control/i18n/nl.json
index b98fc75..8eb0804 100644
--- a/src/tr-web-control/i18n/nl.json
+++ b/src/tr-web-control/i18n/nl.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "Automatically matches data directory"
},
- "setLabels": "Set User Labels"
+ "setLabels": "Set User Labels",
+ "copyMagnetLink": "Copy magnetLink to clipboard"
},
"title": {
"left": "Navigatie",
diff --git a/src/tr-web-control/i18n/pl.json b/src/tr-web-control/i18n/pl.json
index f67ce44..a1667a2 100644
--- a/src/tr-web-control/i18n/pl.json
+++ b/src/tr-web-control/i18n/pl.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "Automatyczne dopasowanie katalogu"
},
- "setLabels": "Ustaw własne etykiety"
+ "setLabels": "Ustaw własne etykiety",
+ "copyMagnetLink": "Copy magnetLink to clipboard"
},
"title": {
"left": "Nawigacja",
diff --git a/src/tr-web-control/i18n/pt_BR.json b/src/tr-web-control/i18n/pt_BR.json
index 23052b6..f2f9c09 100644
--- a/src/tr-web-control/i18n/pt_BR.json
+++ b/src/tr-web-control/i18n/pt_BR.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "Combinar automaticamente diretório de dados"
},
- "setLabels": "Definir Rótulos do Usuário"
+ "setLabels": "Definir Rótulos do Usuário",
+ "copyMagnetLink": "Copy magnetLink to clipboard"
},
"title": {
"left": "Navegação",
diff --git a/src/tr-web-control/i18n/pt_PT.json b/src/tr-web-control/i18n/pt_PT.json
index a595e5f..eaffb94 100644
--- a/src/tr-web-control/i18n/pt_PT.json
+++ b/src/tr-web-control/i18n/pt_PT.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "Combinar automaticamente o diretório de dados"
},
- "setLabels": "Set User Labels"
+ "setLabels": "Set User Labels",
+ "copyMagnetLink": "Copy magnetLink to clipboard"
},
"title": {
"left": "Navegação",
diff --git a/src/tr-web-control/i18n/ro.json b/src/tr-web-control/i18n/ro.json
index c3411f9..cf060de 100644
--- a/src/tr-web-control/i18n/ro.json
+++ b/src/tr-web-control/i18n/ro.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "Automatically matches data directory"
},
- "setLabels": "Set User Labels"
+ "setLabels": "Set User Labels",
+ "copyMagnetLink": "Copy magnetLink to clipboard"
},
"title": {
"left": "Navigare",
diff --git a/src/tr-web-control/i18n/ru.json b/src/tr-web-control/i18n/ru.json
index 4d22fed..e05a07b 100644
--- a/src/tr-web-control/i18n/ru.json
+++ b/src/tr-web-control/i18n/ru.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "Автосопоставление путей"
},
- "setLabels": "Присвоить метки"
+ "setLabels": "Присвоить метки",
+ "copyMagnetLink": "Copy magnetLink to clipboard"
},
"title": {
"left": "Навигация",
diff --git a/src/tr-web-control/i18n/uk.json b/src/tr-web-control/i18n/uk.json
index 2ea766c..0cd1a25 100644
--- a/src/tr-web-control/i18n/uk.json
+++ b/src/tr-web-control/i18n/uk.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "Авто-зіставлення шляхів"
},
- "setLabels": "Set User Labels"
+ "setLabels": "Set User Labels",
+ "copyMagnetLink": "Copy magnetLink to clipboard"
},
"title": {
"left": "Навігація",
diff --git a/src/tr-web-control/i18n/zh_CN.json b/src/tr-web-control/i18n/zh_CN.json
index e894467..add9b1a 100644
--- a/src/tr-web-control/i18n/zh_CN.json
+++ b/src/tr-web-control/i18n/zh_CN.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "自动匹配数据目录"
},
- "setLabels": "设置用户标签"
+ "setLabels": "设置用户标签",
+ "copyMagnetLink": "复制磁力链接到剪切板"
},
"title": {
"left": "导航",
diff --git a/src/tr-web-control/i18n/zh_TW.json b/src/tr-web-control/i18n/zh_TW.json
index 7735155..1d56ce6 100644
--- a/src/tr-web-control/i18n/zh_TW.json
+++ b/src/tr-web-control/i18n/zh_TW.json
@@ -85,7 +85,8 @@
"plugin": {
"auto-match-data-folder": "自動配對資料夾"
},
- "setLabels": "設置使用者標籤"
+ "setLabels": "設置使用者標籤",
+ "copyMagnetLink": "复制磁力链接到剪切板"
},
"title": {
"left": "分類資料夾",
diff --git a/src/tr-web-control/script/min/system.min.js b/src/tr-web-control/script/min/system.min.js
index a3c7d69..6db06c2 100644
--- a/src/tr-web-control/script/min/system.min.js
+++ b/src/tr-web-control/script/min/system.min.js
@@ -28,23 +28,24 @@ pageSize:system.config.pageSize,pageList:system.config.pageList,idField:"id",fit
c);system.getTorrentInfos(j.id);c=i},onUnselect:function(){system.currentTorrentId=0;c=-1},onBeforeLoad:function(){system.currentTorrentId=0},onSortColumn:function(i,j){var k=system.control.torrentlist.datagrid("getData").originalRows.sort(arrayObjectSort(i,j));system.control.torrentlist.datagrid("loadData",k);system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);system.userConfig.torrentList.sortName=i;system.userConfig.torrentList.sortOrder=j;system.saveUserConfig()},
onRowContextMenu:function(i,j){system.config.simpleCheckMode&&system.control.torrentlist.datagrid("uncheckAll");system.checkedRows.length==0&&system.control.torrentlist.datagrid("checkRow",j);i.preventDefault();system.showContextMenu("torrent-list",i)},onHeadDrop:function(){system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);system.saveUserConfig()},onResizeColumn:function(){system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);
system.saveUserConfig()},onHeaderContextMenu:function(i){i.preventDefault();b||a();b.menu("show",{left:i.pageX,top:i.pageY})}})},"json");this.control.torrentlist.refresh=function(){system.control.torrentlist.datagrid("getPager").find(".pagination-load").click()}},resetTorrentListFieldsUserConfig:function(a){var b={};$.each(this.userConfig.torrentList.fields,function(c,d){b[d.field]=d});this.userConfig.torrentList.fields=[];$.each(a,function(c,d){var f=$.extend({},b[d.field]);f.width=d.width;f.hidden=
-d.hidden;system.userConfig.torrentList.fields.push(f)})},showContextMenu:function(a,b){var c=this.contextMenus[a];if(c)c.empty();else{c=$("
").attr("class","easyui-menu").css({"min-width":"180px"}).appendTo(this.panel.main);this.contextMenus[a]=c;c.menu()}var d=null;switch(a){case "torrent-list":d=["start","pause","-","rename","remove","recheck","-","morepeers","changeDownloadDir","copyPath","-","menu-queue-move-top","menu-queue-move-up","menu-queue-move-down","menu-queue-move-bottom"];if(this.config.nav.labels){d.push("-");
-d.push("setLabels")}var f=this.panel.toolbar,e;for(e in d){var g=d[e];if(g=="-")$("").appendTo(c);else{var h=f.find("#toolbar_"+g);if(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()}});else{h=$("#"+g);if(h.length>0)c.menu("appendItem",{text:h.attr("title"),id:g,iconCls:h.attr("id").replace("menu-queue-move",
-"iconfont tr-icon"),disabled:f.find("#toolbar_queue").linkbutton("options").disabled,onclick:function(){$("#"+$(this).attr("id")).click()}});else(h=this.getContentMenuWithKey(g))&&c.menu("appendItem",h)}h=null}}d=$("#copyPath",c);d.attr({"data-clipboard-action":"copy","data-clipboard-target":"#clipboard-source"});new ClipboardJS(d.get(0))}c.menu("show",{left:b.pageX,top:b.pageY});d=c=null},getContentMenuWithKey:function(a){switch(a){case "setLabels":return{id:"setLabels",text:system.lang.menus.setLabels,
-iconCls:"iconfont tr-icon-labels",disabled:this.checkedRows.length==0,onclick:function(){var b=system.checkedRows,c=[],d;for(d in b)c.push(b[d].hashString);c.length!=0&&system.openDialogFromTemplate({id:"dialog-torrent-setLabels",options:{title:system.lang.dialog["torrent-setLabels"].title,width:520,height:200},datas:{hashs:c}})}}}},formetTorrentLabels:function(a,b){var c=$("");if(a){if(typeof a=="string")a=a.split(",");for(var d=0;d").html(f.name).css({"background-color":f.color,color:getGrayLevel(f.color)>0.5?"#000":"#fff"}).appendTo(c)}}d=$("').appendTo(c);d.linkbutton();d.find("span").first().attr({title:system.lang.dialog["torrent-setLabels"].title});return c.get(0).outerHTML},setTorrentLabels:function(a,b){system.openDialogFromTemplate({id:"dialog-torrent-setLabels",
-options:{title:system.lang.dialog["torrent-setLabels"].title,width:520,height:200},datas:{hashs:[b]},type:1,source:$(a)})},checkTorrentRow:function(a,b){this.checkedRows=this.control.torrentlist.datagrid("getChecked");this.showCheckedInStatus();if(a=="all"){if(this.control.torrentlist.datagrid("getRows").length!=0){$("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers,#toolbar_copyPath",this.panel.toolbar).linkbutton({disabled:b});$("#toolbar_rename, #toolbar_morepeers",
-this.panel.toolbar).linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable")}}else if(this.checkedRows.length==0){$("#toolbar_start, #toolbar_pause, #toolbar_rename, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers,#toolbar_copyPath",this.panel.toolbar).linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable")}else if(this.checkedRows.length==1){$("#toolbar_remove, #toolbar_rename, #toolbar_changeDownloadDir,#toolbar_copyPath",
-this.panel.toolbar).linkbutton({disabled:false});this.panel.toolbar.find("#toolbar_queue").menubutton("enable");switch(transmission.torrents.all[b.id].status){case transmission._status.stopped:this.panel.toolbar.find("#toolbar_start, #toolbar_recheck").linkbutton({disabled:false});this.panel.toolbar.find("#toolbar_pause, #toolbar_morepeers").linkbutton({disabled:true});break;case transmission._status.check:case transmission._status.checkwait:this.panel.toolbar.find("#toolbar_start, #toolbar_pause, #toolbar_recheck, #toolbar_morepeers").linkbutton({disabled:true});
-break;default:this.panel.toolbar.find("#toolbar_start, #toolbar_recheck").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_pause, #toolbar_morepeers").linkbutton({disabled:false})}}else{$("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_copyPath",this.panel.toolbar).linkbutton({disabled:false});$("#toolbar_rename, #toolbar_morepeers",this.panel.toolbar).linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable")}},
-showCheckedInStatus:function(){if(this.checkedRows.length>0){this.panel.status_text.empty();this.showStatus(undefined,0);var a=[],b=this.lang.system.status.checked.replace("%n",this.checkedRows.length),c=[];$("").html(b).appendTo(this.panel.status_text);for(b=0;b").appendTo(this.panel.status_text).datalist({data:a});
-$(".datalist>.panel-body",this.panel.status_text).css({border:0});$("#button-cancel-checked").show();$("#clipboard-source").val(c.join("\n"))}else{$("#button-cancel-checked").hide();this.panel.status_text.empty();$("#clipboard-source").val("")}},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;if($.isNumeric(a)){system.config.reloadStep=a*1E3;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(){if(system.config.autoReload){system.config.autoReload=
-false;clearTimeout(system.autoReloadTimer);system.panel.toolbar.find("#toolbar_reload_time").numberspinner("disable")}else{system.config.autoReload=true;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:false}).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:true}})});this.panel.toolbar.find("#toolbar_start_all").linkbutton({disabled:false}).attr("title",
-this.lang.toolbar.tip["start-all"]).click(function(){var a=$(this),b=a.linkbutton("options").iconCls;a.linkbutton({disabled:true,iconCls:"icon-loading"});transmission.exec({method:"torrent-start"},function(){a.linkbutton({iconCls:b,disabled:false});a=null})});this.panel.toolbar.find("#toolbar_pause_all").linkbutton({disabled:false}).attr("title",this.lang.toolbar.tip["pause-all"]).click(function(){var a=$(this),b=a.linkbutton("options").iconCls;a.linkbutton({disabled:true,iconCls:"icon-loading"});
-transmission.exec({method:"torrent-stop"},function(){a.linkbutton({iconCls:b,disabled:false});a=null})});this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip.start).click(function(){system.changeSelectedTorrentStatus("start",$(this))});this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip.pause).click(function(){system.changeSelectedTorrentStatus("stop",$(this))});this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:true}).attr("title",
-this.lang.toolbar.tip.recheck).click(function(){var a=system.control.torrentlist.datagrid("getChecked");if(a.length>0)if(a.length==1)if(transmission.torrents.all[a[0].id].percentDone>0)confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this));else system.changeSelectedTorrentStatus("verify",$(this));else confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this))});this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:true}).click(function(){system.changeSelectedTorrentStatus("reannounce",
+d.hidden;system.userConfig.torrentList.fields.push(f)})},showContextMenu:function(a,b){var c=this.contextMenus[a];if(c)c.empty();else{c=$("").attr("class","easyui-menu").css({"min-width":"180px"}).appendTo(this.panel.main);this.contextMenus[a]=c;c.menu()}var d=null;switch(a){case "torrent-list":d=["start","pause","-","rename","remove","recheck","-","morepeers","changeDownloadDir","copyPath","-","menu-queue-move-top","menu-queue-move-up","menu-queue-move-down","menu-queue-move-bottom","magnetLink"];
+if(this.config.nav.labels){d.push("-");d.push("setLabels")}var f=this.panel.toolbar,e;for(e in d){var g=d[e];if(g=="-")$("").appendTo(c);else{var h=f.find("#toolbar_"+g);if(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()}});else{h=$("#"+g);if(h.length>0)c.menu("appendItem",{text:h.attr("title"),
+id:g,iconCls:h.attr("id").replace("menu-queue-move","iconfont tr-icon"),disabled:f.find("#toolbar_queue").linkbutton("options").disabled,onclick:function(){$("#"+$(this).attr("id")).click()}});else(h=this.getContentMenuWithKey(g))&&c.menu("appendItem",h)}h=null}}d=$("#copyPath",c);d.attr({"data-clipboard-action":"copy","data-clipboard-target":"#clipboard-source"});new ClipboardJS(d.get(0))}c.menu("show",{left:b.pageX,top:b.pageY});d=c=null},getContentMenuWithKey:function(a){switch(a){case "setLabels":return{id:"setLabels",
+text:system.lang.menus.setLabels,iconCls:"iconfont tr-icon-labels",disabled:this.checkedRows.length==0,onclick:function(){var b=system.checkedRows,c=[],d;for(d in b)c.push(b[d].hashString);c.length!=0&&system.openDialogFromTemplate({id:"dialog-torrent-setLabels",options:{title:system.lang.dialog["torrent-setLabels"].title,width:520,height:200},datas:{hashs:c}})}};case "magnetLink":return{id:"magnetLink",text:system.lang.menus.copyMagnetLink,iconCls:"iconfont tr-icon-labels",disabled:this.checkedRows.length==
+0,onclick:function(){system.getTorrentMagnetLink(function(b){system.copyToClipboard(b)})}}}},formetTorrentLabels:function(a,b){var c=$("");if(a){if(typeof a=="string")a=a.split(",");for(var d=0;d").html(f.name).css({"background-color":f.color,color:getGrayLevel(f.color)>0.5?"#000":"#fff"}).appendTo(c)}}d=$("').appendTo(c);
+d.linkbutton();d.find("span").first().attr({title:system.lang.dialog["torrent-setLabels"].title});return c.get(0).outerHTML},setTorrentLabels:function(a,b){system.openDialogFromTemplate({id:"dialog-torrent-setLabels",options:{title:system.lang.dialog["torrent-setLabels"].title,width:520,height:200},datas:{hashs:[b]},type:1,source:$(a)})},checkTorrentRow:function(a,b){this.checkedRows=this.control.torrentlist.datagrid("getChecked");this.showCheckedInStatus();if(a=="all"){if(this.control.torrentlist.datagrid("getRows").length!=
+0){$("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers,#toolbar_copyPath",this.panel.toolbar).linkbutton({disabled:b});$("#toolbar_rename, #toolbar_morepeers",this.panel.toolbar).linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable")}}else if(this.checkedRows.length==0){$("#toolbar_start, #toolbar_pause, #toolbar_rename, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers,#toolbar_copyPath",
+this.panel.toolbar).linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable")}else if(this.checkedRows.length==1){$("#toolbar_remove, #toolbar_rename, #toolbar_changeDownloadDir,#toolbar_copyPath",this.panel.toolbar).linkbutton({disabled:false});this.panel.toolbar.find("#toolbar_queue").menubutton("enable");switch(transmission.torrents.all[b.id].status){case transmission._status.stopped:this.panel.toolbar.find("#toolbar_start, #toolbar_recheck").linkbutton({disabled:false});
+this.panel.toolbar.find("#toolbar_pause, #toolbar_morepeers").linkbutton({disabled:true});break;case transmission._status.check:case transmission._status.checkwait:this.panel.toolbar.find("#toolbar_start, #toolbar_pause, #toolbar_recheck, #toolbar_morepeers").linkbutton({disabled:true});break;default:this.panel.toolbar.find("#toolbar_start, #toolbar_recheck").linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_pause, #toolbar_morepeers").linkbutton({disabled:false})}}else{$("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_copyPath",
+this.panel.toolbar).linkbutton({disabled:false});$("#toolbar_rename, #toolbar_morepeers",this.panel.toolbar).linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable")}},showCheckedInStatus:function(){if(this.checkedRows.length>0){this.panel.status_text.empty();this.showStatus(undefined,0);var a=[],b=this.lang.system.status.checked.replace("%n",this.checkedRows.length),c=[];$("").html(b).appendTo(this.panel.status_text);for(b=0;b").appendTo(this.panel.status_text).datalist({data:a});$(".datalist>.panel-body",this.panel.status_text).css({border:0});$("#button-cancel-checked").show();$("#clipboard-source").val(c.join("\n"))}else{$("#button-cancel-checked").hide();this.panel.status_text.empty();$("#clipboard-source").val("")}},copyToClipboard:function(a){var b=document.createElement("input");b.setAttribute("value",
+a);document.body.appendChild(b);b.select();document.execCommand("copy");document.body.removeChild(b)},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;if($.isNumeric(a)){system.config.reloadStep=
+a*1E3;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(){if(system.config.autoReload){system.config.autoReload=false;clearTimeout(system.autoReloadTimer);
+system.panel.toolbar.find("#toolbar_reload_time").numberspinner("disable")}else{system.config.autoReload=true;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:false}).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:true}})});this.panel.toolbar.find("#toolbar_start_all").linkbutton({disabled:false}).attr("title",this.lang.toolbar.tip["start-all"]).click(function(){var a=
+$(this),b=a.linkbutton("options").iconCls;a.linkbutton({disabled:true,iconCls:"icon-loading"});transmission.exec({method:"torrent-start"},function(){a.linkbutton({iconCls:b,disabled:false});a=null})});this.panel.toolbar.find("#toolbar_pause_all").linkbutton({disabled:false}).attr("title",this.lang.toolbar.tip["pause-all"]).click(function(){var a=$(this),b=a.linkbutton("options").iconCls;a.linkbutton({disabled:true,iconCls:"icon-loading"});transmission.exec({method:"torrent-stop"},function(){a.linkbutton({iconCls:b,
+disabled:false});a=null})});this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip.start).click(function(){system.changeSelectedTorrentStatus("start",$(this))});this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip.pause).click(function(){system.changeSelectedTorrentStatus("stop",$(this))});this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip.recheck).click(function(){var a=
+system.control.torrentlist.datagrid("getChecked");if(a.length>0)if(a.length==1)if(transmission.torrents.all[a[0].id].percentDone>0)confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this));else system.changeSelectedTorrentStatus("verify",$(this));else confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this))});this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:true}).click(function(){system.changeSelectedTorrentStatus("reannounce",
$(this))});this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip.remove).click(function(){var a=system.control.torrentlist.datagrid("getChecked"),b=[],c;for(c in a)b.push(a[c].id);b.length!=0&&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:true}).click(function(){var a=
system.control.torrentlist.datagrid("getChecked");a.length!=0&&system.openDialogFromTemplate({id:"dialog-torrent-rename",options:{title:system.lang.dialog["torrent-rename"].title,width:520,height:200,resizable:true},datas:{id:a[0].id}})});this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip["change-download-dir"]).click(function(){var a=system.control.torrentlist.datagrid("getChecked"),b=[],c;for(c in a)b.push(a[c].id);b.length!=0&&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=false;if(a.linkbutton("options").iconCls=="iconfont tr-icon-rocket")b=true;transmission.exec({method:"session-set",arguments:{"alt-speed-enabled":b}},function(c){if(c.result=="success"){system.serverConfig["alt-speed-enabled"]=b;a.linkbutton({iconCls:"iconfont tr-icon-"+
@@ -82,30 +83,31 @@ break;case transmission._status.check:b="iconlabel icon-checking";break;case tra
c+="\n\n"+this.lang["public"]["text-info"]+": "+a.errorString}return''+a.name+""},getTorrentProgressBar:function(a,b){a+="%";var c="",d=0;d=typeof b=="object"?b.status:b;switch(d){case transmission._status.stopped:c="torrent-progress-stop";break;case transmission._status.checkwait:case transmission._status.check:c="torrent-progress-check";break;case transmission._status.downloadwait:case transmission._status.download:c="torrent-progress-download";break;case transmission._status.seedwait:case transmission._status.seed:c=
"torrent-progress-seed"}if(typeof b=="object"){if(b.warning)c="torrent-progress-warning";if(b.error!=0)c="torrent-progress-error"}return''},addTorrentsToServer:function(a,b,c,d){var f=b-a.length,e=a.shift();if(e){this.showStatus(this.lang.system.status.queue+(f+1)+"/"+b+"
"+e,0);transmission.addTorrentFromUrl(e,d,c,function(){system.addTorrentsToServer(a,
b,c,d)})}else{this.showStatus(this.lang.system.status.queuefinish);this.getServerStatus()}},changeSelectedTorrentStatus:function(a,b,c){var d=this.control.torrentlist.datagrid("getChecked"),f=[];a||(a="start");for(var e in d)f.push(d[e].id);c||(c="torrent-"+a);if(f.length>0){if(b){var g=b.linkbutton("options").iconCls;b.linkbutton({disabled:true,iconCls:"icon-loading"})}transmission.exec({method:c,arguments:{ids:f}},function(){b&&b.linkbutton({iconCls:g});system.control.torrentlist.datagrid("uncheckAll");
-system.reloadTorrentBaseInfos()})}},searchTorrents:function(a){if(a!=""){var b=transmission.torrents.search(a);if(b==null||b.length==0)this.removeTreeNode("search-result");else{var c=this.panel.left.tree("find","search-result");a=this.lang.tree["search-result"]+" : "+a+" ("+b.length+")";if(c==null){this.appendTreeNode("torrent-all",[{id:"search-result",text:a,iconCls:"iconfont tr-icon-search"}]);c=this.panel.left.tree("find","search-result")}else this.panel.left.tree("update",{target:c.target,text:a});
-this.panel.left.tree("select",c.target)}}},getTorrentInfos:function(a){if(transmission.torrents.all[a])if(!transmission.torrents.all[a].infoIsLoading){if(this.currentTorrentId>0&&transmission.torrents.all[this.currentTorrentId])if(transmission.torrents.all[this.currentTorrentId].infoIsLoading)return;this.currentTorrentId=a;if(!this.panel.attribute.panel("options").collapsed){var b=transmission.torrents.all[a];b.infoIsLoading=true;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(d){b.infoIsLoading=false;if(d!=null){jQuery.extend(b,d[0]);if(system.currentTorrentId==0||system.currentTorrentId!=a)system.clearTorrentAttribute();else{b.completeSize=b.totalSize-b.leftUntilDone;b.moreInfosTag=true;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"),f=c.datagrid("options"),e=null;if(f.sortName){e=f.sortName;
-b=b.sort(arrayObjectSort(e,f.sortOrder))}if(d.length==0||b.length!=c.datagrid("getData").total)c.datagrid({loadFilter:pagerFilter,pageNumber:1,sortName:e,sortOrder:f.sortOrder}).datagrid("loadData",b);else{c.datagrid("getData").originalRows=b;e=(f.pageNumber-1)*parseInt(f.pageSize);f=e+parseInt(f.pageSize);b=b.slice(e,f);f={};for(var g in b){e=b[g];f[e[a]]=e}for(g=d.length-1;g>=0;g--){e=d[g];(b=f[e[a]])?c.datagrid("updateRow",{index:g,row:b}):c.datagrid("deleteRow",g)}}},fillTorrentBaseInfos:function(a){$.each(a,
-function(b,c){switch(b){case "rateDownload":case "rateUpload":c=formatSize(c,true,"speed");break;case "totalSize":case "uploadedEver":case "leftUntilDone":case "completeSize":c=formatSize(c);break;case "addedDate":case "dateCreated":case "doneDate":c=formatLongTime(c);break;case "status":c=system.lang.torrent["status-text"][c];break;case "error":c==0?system.panel.attribute.find("#torrent-attribute-tr-error").hide():system.panel.attribute.find("#torrent-attribute-tr-error").show();break;case "remainingTime":c=
-c>=31536E8?"∞":getTotalTime(c);break;case "comment":c=system.replaceURI(c)}system.panel.attribute.find("#torrent-attribute-value-"+b).html(c)})},fillTorrentFileList:function(a){var b=a.files,c=a.fileStats,d=[],f=a.name.length+1,e;for(e in b){var g=b[e],h=c[e],i=parseFloat(h.bytesCompleted/g.length*100).toFixed(2);d.push({name:g.name==a.name?g.name:g.name.substr(f),index:e,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.trackerStats,c=[],d;for(d in b){var f=b[d],e={},g;for(g in f)switch(g){case "lastAnnounceTime":case "nextAnnounceTime":e[g]=formatLongTime(f[g]);break;case "lastAnnounceSucceeded":case "lastAnnounceTimedOut":e[g]=system.lang.torrent.attribute.status[f[g]];
-break;default:e[g]=f[g]}c.push(e)}transmission.torrents.addTracker(a);this.updateCurrentPageDatas("id",c,system.panel.attribute.find("#torrent-servers-table"))},fillTorrentPeersList:function(a){a=a.peers;var b=[],c;for(c in a){var d=a[c],f={},e;for(e in d)f[e]=d[e];d=parseFloat(d.progress*100).toFixed(2);f.progress=system.getTorrentProgressBar(d,transmission._status.download);b.push(f)}this.updateCurrentPageDatas("address",b,system.panel.attribute.find("#torrent-peers-table"))},fillTorrentConfig:function(a){system.panel.attribute.find("#torrent-attribute-tabs").data("selectedIndex")==
-4&&transmission.torrents.getConfig(a.id,function(b){if(b!=null){jQuery.extend(transmission.torrents.all[system.currentTorrentId],b[0]);system.currentTorrentId!=0&&$.each(b[0],function(c,d){var f=false,e=false,g=false;switch(c){case "seedIdleMode":case "seedRatioMode":if(d==0){e=false;f=true}g=true;case "downloadLimited":case "uploadLimited":if(d==true||d==1)e=true;system.panel.attribute.find("input[enabledof='"+c+"']").prop("disabled",!e);g&&system.panel.attribute.find("#"+c).prop("indeterminate",
-f).data("_tag",d);system.panel.attribute.find("#"+c).prop("checked",e);break;default:system.panel.attribute.find("#"+c).val(d);system.panel.attribute.find("#"+c).numberspinner("setValue",d)}})}})},setFieldFormat:function(a){if(a.formatter)switch(a.formatter){case "size":a.formatter=function(b){return formatSize(b)};break;case "speed":a.formatter=function(b){return formatSize(b,true,"speed")};break;case "longtime":a.formatter=function(b){return formatLongTime(b)};break;case "progress":a.formatter=
-function(b,c){var d=parseFloat(b*100).toFixed(2);return system.getTorrentProgressBar(d,transmission.torrents.all[c.id])};break;case "_usename_":switch(a.field){case "name":a.formatter=function(b,c){return system.getTorrentNameBar(transmission.torrents.all[c.id])}}break;case "ratio":a.formatter=function(b){var c="";if(parseFloat(b)<1)c="text-status-warning";return''+b+""};break;case "remainingTime":a.formatter=function(b){if(b>=31536E8)return"∞";return getTotalTime(b)};break;
-case "labels":a.formatter=function(b,c){return system.formetTorrentLabels(b,c.hashString)};break;case "color":a.formatter=function(b){return $("").html(b).css({"background-color":b,color:getGrayLevel(b)>0.5?"#000":"#fff"}).get(0).outerHTML}}},reloadData:function(){if(this.popoverCount>0)setTimeout(function(){system.reloadData()},2E3);else{this.reloadSession();this.reloading=false;this.getServerStatus();this.reloading=false;this.reloadTorrentBaseInfos()}},loadFolderList:function(a){this.removeTreeNode("folders-loading");
-for(var b in a){var c=a[b];c&&system.removeTreeNode(c.nodeid)}transmission.downloadDirs.length!=0&&timedChunk(transmission.downloadDirs,this.appendFolder,this,10,function(){navigator.userAgent.indexOf("Firefox")>0&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"});system.initUIStatus()})},appendFolder:function(a){if(a){var b="folders";a=a.replace(/\\/g,"/").split("/");var c="folders-",d="",f;for(f in a){var e=a[f];if(e!=""){d+=e;var g=this.B64.encode(e);c+=g.replace(/[+|\/|=]/g,
-"0");g=this.panel.left.tree("find",c);var h=transmission.torrents.folders[c];if(h){e=e+this.showNodeMoreInfos(h.count,h.size);if(g)this.updateTreeNodeText(c,e);else{this.appendTreeNode(b,[{id:c,path:d,text:e,iconCls:"iconfont tr-icon-file"}]);if(b!="folders"){g=this.panel.left.tree("find",b);this.panel.left.tree("collapse",g.target)}}b=c}else{this.debug("appendFolder:key",c);this.debug("appendFolder:name",e);this.debug("appendFolder:node",g)}}}}},replaceURI:function(a){return a.replace(/(http|https|ftp):\/\/([^/:]+)(:\d*)?([^# ]*)/ig,
-function(b){return''+b+""})},readConfig:function(){this.readUserConfig();var a=this.getStorageData(this.configHead+".system");if(a)this.config=$.extend(true,this.config,JSON.parse(a));for(var b in this.storageKeys.dictionary)this.dictionary[b]=this.getStorageData(this.storageKeys.dictionary[b])},saveConfig:function(){this.setStorageData(this.configHead+".system",JSON.stringify(this.config));for(var a in this.storageKeys.dictionary)this.setStorageData(this.storageKeys.dictionary[a],
-this.dictionary[a]);this.saveUserConfig()},readUserConfig:function(){var a=window.localStorage[this.configHead];if(a){a=JSON.parse(a);this.userConfig=$.extend(true,this.userConfig,a)}},saveUserConfig:function(){window.localStorage[this.configHead]=JSON.stringify(this.userConfig)},uploadTorrentFile:function(a,b,c,d){if(window.FileReader){var f=$("input[id='"+a+"']")[0].files;$.each(f,function(e,g){transmission.addTorrentFromFile(g,b,c,d,f.length)})}else alert(system.lang["public"]["text-browsers-not-support-features"])},
-checkUpdate:function(){$.ajax({url:this.checkUpdateScript,dataType:"json",success:function(a){if(a&&a.tag_name){var b=a.created_at.substr(0,10).replace(/-/g,""),c=a.tag_name;if($.inArray(c,system.config.ignoreVersion)==-1)if(system.codeupdate "+a.name);var d=$(""),f=a.body.replace(/\r\n/g,"
"),e=$("").appendTo(d);$('').html(a.name+
-" ("+b+")").appendTo(e).linkbutton();$("").html(" ").appendTo(e);$('').html(system.lang["public"]["text-how-to-update"]).appendTo(e).linkbutton();$("").html(" ").appendTo(e);$("').html(system.lang["public"]["text-ignore-this-version"]).appendTo(e).linkbutton();
-$("
").appendTo(d);$("").html(f).appendTo(d);$("#button-download-update").webuiPopover({content:d.html(),backdrop:true})}else $("#area-update-infos").hide()}}})},addIgnoreVersion:function(a){if($.inArray(a,system.config.ignoreVersion)==-1){this.config.ignoreVersion.push(a);this.saveConfig()}$("#button-download-update").webuiPopover("hide");$("#area-update-infos").hide()},changeLanguages:function(a){if(!(a==this.lang.name||!a)){this.config.defaultLang=a;this.saveConfig();location.href="?lang="+
-a}},getStorageData:function(a,b){return window.localStorage[a]==null?b:window.localStorage[a]},setStorageData:function(a,b){window.localStorage[a]=b},openDialogFromTemplate:function(a){a=$.extend(true,{id:null,options:null,datas:null,type:0},a);if(a.id!=null){var b=a.id,c=a.options,d=a.datas,f=$("#"+b);if(f.length){d&&$.each(d,function(e,g){f.data(e,g)});if(a.type==0&&f.attr("type")==a.type){f.dialog("open");f.dialog({content:system.templates[b]});return}else{if(system.popoverCount!=0){setTimeout(function(){system.openDialogFromTemplate(a)},
-350);return}f.remove()}}c=$.extend(true,{title:"",width:100,height:100,resizable:false,cache:true,content:system.lang.dialog["system-config"].loading,modal:true},c);f=$("").attr({id:b,type:a.type}).appendTo(document.body);if(a.type==0)f.dialog(c);else{f.css({width:c.width,height:c.height}).data("popoverSource",a.source);$(a.source).webuiPopover({url:"#"+b,title:c.title,width:c.width,height:c.height-18,padding:false,onHide:function(e){$(a.source).webuiPopover("destroy");$("#"+b).remove();$(e).remove();
-system.popoverCount--;a.onClose&&a.onClose(a.source)},onShow:function(){system.popoverCount++}})}$.get(system.rootPath+"template/"+b+".html?time="+new Date,function(e){system.templates[b]=e;d&&$.each(d,function(g,h){$("#"+b).data(g,h)});if(a.type==0)$("#"+b).dialog({content:e});else{f.html(e);$.parser.parse("#"+b);$(a.source).webuiPopover("show")}})}},debug:function(a,b){window.console&&window.console.log&&window.console.log(a,b)},initThemes:function(){this.themes&&$("#select-themes").combobox({groupField:"group",
-data:this.themes,editable:false,panelHeight:"auto",onChange:function(a){var b=(a+";").split(";"),c=b[0];b=b[1]||"logo.png";$("#styleEasyui").attr("href","tr-web-control/script/easyui/themes/"+c+"/easyui.css");$("#logo").attr("src","tr-web-control/"+b);system.config.theme=a;system.saveConfig()},onLoadSuccess:function(){$(this).combobox("setValue",system.config.theme||"default")}})},getValidTreeKey:function(a){if(!a)return"";return this.B64.encode(a).replace(/[+|\/|=]/g,"0")}};
+system.reloadTorrentBaseInfos()})}},getTorrentMagnetLink:function(a){var b=this.control.torrentlist.datagrid("getChecked"),c=[],d;for(d in b)c.push(b[d].id);transmission.torrents.getMagnetLink(c,a)},searchTorrents:function(a){if(a!=""){var b=transmission.torrents.search(a);if(b==null||b.length==0)this.removeTreeNode("search-result");else{var c=this.panel.left.tree("find","search-result");a=this.lang.tree["search-result"]+" : "+a+" ("+b.length+")";if(c==null){this.appendTreeNode("torrent-all",[{id:"search-result",
+text:a,iconCls:"iconfont tr-icon-search"}]);c=this.panel.left.tree("find","search-result")}else this.panel.left.tree("update",{target:c.target,text:a});this.panel.left.tree("select",c.target)}}},getTorrentInfos:function(a){if(transmission.torrents.all[a])if(!transmission.torrents.all[a].infoIsLoading){if(this.currentTorrentId>0&&transmission.torrents.all[this.currentTorrentId])if(transmission.torrents.all[this.currentTorrentId].infoIsLoading)return;this.currentTorrentId=a;if(!this.panel.attribute.panel("options").collapsed){var b=
+transmission.torrents.all[a];b.infoIsLoading=true;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(d){b.infoIsLoading=false;if(d!=null){jQuery.extend(b,d[0]);if(system.currentTorrentId==0||system.currentTorrentId!=a)system.clearTorrentAttribute();else{b.completeSize=b.totalSize-b.leftUntilDone;b.moreInfosTag=
+true;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"),f=c.datagrid("options"),e=null;if(f.sortName){e=f.sortName;b=b.sort(arrayObjectSort(e,f.sortOrder))}if(d.length==0||b.length!=c.datagrid("getData").total)c.datagrid({loadFilter:pagerFilter,pageNumber:1,sortName:e,sortOrder:f.sortOrder}).datagrid("loadData",b);else{c.datagrid("getData").originalRows=b;e=(f.pageNumber-1)*parseInt(f.pageSize);f=e+parseInt(f.pageSize);b=b.slice(e,f);f={};for(var g in b){e=b[g];f[e[a]]=e}for(g=d.length-
+1;g>=0;g--){e=d[g];(b=f[e[a]])?c.datagrid("updateRow",{index:g,row:b}):c.datagrid("deleteRow",g)}}},fillTorrentBaseInfos:function(a){$.each(a,function(b,c){switch(b){case "rateDownload":case "rateUpload":c=formatSize(c,true,"speed");break;case "totalSize":case "uploadedEver":case "leftUntilDone":case "completeSize":c=formatSize(c);break;case "addedDate":case "dateCreated":case "doneDate":c=formatLongTime(c);break;case "status":c=system.lang.torrent["status-text"][c];break;case "error":c==0?system.panel.attribute.find("#torrent-attribute-tr-error").hide():
+system.panel.attribute.find("#torrent-attribute-tr-error").show();break;case "remainingTime":c=c>=31536E8?"∞":getTotalTime(c);break;case "comment":c=system.replaceURI(c)}system.panel.attribute.find("#torrent-attribute-value-"+b).html(c)})},fillTorrentFileList:function(a){var b=a.files,c=a.fileStats,d=[],f=a.name.length+1,e;for(e in b){var g=b[e],h=c[e],i=parseFloat(h.bytesCompleted/g.length*100).toFixed(2);d.push({name:g.name==a.name?g.name:g.name.substr(f),index:e,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.trackerStats,c=[],d;for(d in b){var f=b[d],e={},g;for(g in f)switch(g){case "lastAnnounceTime":case "nextAnnounceTime":e[g]=
+formatLongTime(f[g]);break;case "lastAnnounceSucceeded":case "lastAnnounceTimedOut":e[g]=system.lang.torrent.attribute.status[f[g]];break;default:e[g]=f[g]}c.push(e)}transmission.torrents.addTracker(a);this.updateCurrentPageDatas("id",c,system.panel.attribute.find("#torrent-servers-table"))},fillTorrentPeersList:function(a){a=a.peers;var b=[],c;for(c in a){var d=a[c],f={},e;for(e in d)f[e]=d[e];d=parseFloat(d.progress*100).toFixed(2);f.progress=system.getTorrentProgressBar(d,transmission._status.download);
+b.push(f)}this.updateCurrentPageDatas("address",b,system.panel.attribute.find("#torrent-peers-table"))},fillTorrentConfig:function(a){system.panel.attribute.find("#torrent-attribute-tabs").data("selectedIndex")==4&&transmission.torrents.getConfig(a.id,function(b){if(b!=null){jQuery.extend(transmission.torrents.all[system.currentTorrentId],b[0]);system.currentTorrentId!=0&&$.each(b[0],function(c,d){var f=false,e=false,g=false;switch(c){case "seedIdleMode":case "seedRatioMode":if(d==0){e=false;f=true}g=
+true;case "downloadLimited":case "uploadLimited":if(d==true||d==1)e=true;system.panel.attribute.find("input[enabledof='"+c+"']").prop("disabled",!e);g&&system.panel.attribute.find("#"+c).prop("indeterminate",f).data("_tag",d);system.panel.attribute.find("#"+c).prop("checked",e);break;default:system.panel.attribute.find("#"+c).val(d);system.panel.attribute.find("#"+c).numberspinner("setValue",d)}})}})},setFieldFormat:function(a){if(a.formatter)switch(a.formatter){case "size":a.formatter=function(b){return formatSize(b)};
+break;case "speed":a.formatter=function(b){return formatSize(b,true,"speed")};break;case "longtime":a.formatter=function(b){return formatLongTime(b)};break;case "progress":a.formatter=function(b,c){var d=parseFloat(b*100).toFixed(2);return system.getTorrentProgressBar(d,transmission.torrents.all[c.id])};break;case "_usename_":switch(a.field){case "name":a.formatter=function(b,c){return system.getTorrentNameBar(transmission.torrents.all[c.id])}}break;case "ratio":a.formatter=function(b){var c="";if(parseFloat(b)<
+1)c="text-status-warning";return''+b+""};break;case "remainingTime":a.formatter=function(b){if(b>=31536E8)return"∞";return getTotalTime(b)};break;case "labels":a.formatter=function(b,c){return system.formetTorrentLabels(b,c.hashString)};break;case "color":a.formatter=function(b){return $("").html(b).css({"background-color":b,color:getGrayLevel(b)>0.5?"#000":"#fff"}).get(0).outerHTML}}},reloadData:function(){if(this.popoverCount>0)setTimeout(function(){system.reloadData()},
+2E3);else{this.reloadSession();this.reloading=false;this.getServerStatus();this.reloading=false;this.reloadTorrentBaseInfos()}},loadFolderList:function(a){this.removeTreeNode("folders-loading");for(var b in a){var c=a[b];c&&system.removeTreeNode(c.nodeid)}transmission.downloadDirs.length!=0&&timedChunk(transmission.downloadDirs,this.appendFolder,this,10,function(){navigator.userAgent.indexOf("Firefox")>0&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"});system.initUIStatus()})},
+appendFolder:function(a){if(a){var b="folders";a=a.replace(/\\/g,"/").split("/");var c="folders-",d="",f;for(f in a){var e=a[f];if(e!=""){d+=e;var g=this.B64.encode(e);c+=g.replace(/[+|\/|=]/g,"0");g=this.panel.left.tree("find",c);var h=transmission.torrents.folders[c];if(h){e=e+this.showNodeMoreInfos(h.count,h.size);if(g)this.updateTreeNodeText(c,e);else{this.appendTreeNode(b,[{id:c,path:d,text:e,iconCls:"iconfont tr-icon-file"}]);if(b!="folders"){g=this.panel.left.tree("find",b);this.panel.left.tree("collapse",
+g.target)}}b=c}else{this.debug("appendFolder:key",c);this.debug("appendFolder:name",e);this.debug("appendFolder:node",g)}}}}},replaceURI:function(a){return a.replace(/(http|https|ftp):\/\/([^/:]+)(:\d*)?([^# ]*)/ig,function(b){return''+b+""})},readConfig:function(){this.readUserConfig();var a=this.getStorageData(this.configHead+".system");if(a)this.config=$.extend(true,this.config,JSON.parse(a));for(var b in this.storageKeys.dictionary)this.dictionary[b]=this.getStorageData(this.storageKeys.dictionary[b])},
+saveConfig:function(){this.setStorageData(this.configHead+".system",JSON.stringify(this.config));for(var a in this.storageKeys.dictionary)this.setStorageData(this.storageKeys.dictionary[a],this.dictionary[a]);this.saveUserConfig()},readUserConfig:function(){var a=window.localStorage[this.configHead];if(a){a=JSON.parse(a);this.userConfig=$.extend(true,this.userConfig,a)}},saveUserConfig:function(){window.localStorage[this.configHead]=JSON.stringify(this.userConfig)},uploadTorrentFile:function(a,b,
+c,d){if(window.FileReader){var f=$("input[id='"+a+"']")[0].files;$.each(f,function(e,g){transmission.addTorrentFromFile(g,b,c,d,f.length)})}else alert(system.lang["public"]["text-browsers-not-support-features"])},checkUpdate:function(){$.ajax({url:this.checkUpdateScript,dataType:"json",success:function(a){if(a&&a.tag_name){var b=a.created_at.substr(0,10).replace(/-/g,""),c=a.tag_name;if($.inArray(c,system.config.ignoreVersion)==-1)if(system.codeupdate "+a.name);var d=$(""),f=a.body.replace(/\r\n/g,"
"),e=$("").appendTo(d);$('').html(a.name+" ("+b+")").appendTo(e).linkbutton();$("").html(" ").appendTo(e);$('').html(system.lang["public"]["text-how-to-update"]).appendTo(e).linkbutton();
+$("").html(" ").appendTo(e);$("').html(system.lang["public"]["text-ignore-this-version"]).appendTo(e).linkbutton();$("
").appendTo(d);$("").html(f).appendTo(d);$("#button-download-update").webuiPopover({content:d.html(),backdrop:true})}else $("#area-update-infos").hide()}}})},addIgnoreVersion:function(a){if($.inArray(a,system.config.ignoreVersion)==
+-1){this.config.ignoreVersion.push(a);this.saveConfig()}$("#button-download-update").webuiPopover("hide");$("#area-update-infos").hide()},changeLanguages:function(a){if(!(a==this.lang.name||!a)){this.config.defaultLang=a;this.saveConfig();location.href="?lang="+a}},getStorageData:function(a,b){return window.localStorage[a]==null?b:window.localStorage[a]},setStorageData:function(a,b){window.localStorage[a]=b},openDialogFromTemplate:function(a){a=$.extend(true,{id:null,options:null,datas:null,type:0},
+a);if(a.id!=null){var b=a.id,c=a.options,d=a.datas,f=$("#"+b);if(f.length){d&&$.each(d,function(e,g){f.data(e,g)});if(a.type==0&&f.attr("type")==a.type){f.dialog("open");f.dialog({content:system.templates[b]});return}else{if(system.popoverCount!=0){setTimeout(function(){system.openDialogFromTemplate(a)},350);return}f.remove()}}c=$.extend(true,{title:"",width:100,height:100,resizable:false,cache:true,content:system.lang.dialog["system-config"].loading,modal:true},c);f=$("").attr({id:b,type:a.type}).appendTo(document.body);
+if(a.type==0)f.dialog(c);else{f.css({width:c.width,height:c.height}).data("popoverSource",a.source);$(a.source).webuiPopover({url:"#"+b,title:c.title,width:c.width,height:c.height-18,padding:false,onHide:function(e){$(a.source).webuiPopover("destroy");$("#"+b).remove();$(e).remove();system.popoverCount--;a.onClose&&a.onClose(a.source)},onShow:function(){system.popoverCount++}})}$.get(system.rootPath+"template/"+b+".html?time="+new Date,function(e){system.templates[b]=e;d&&$.each(d,function(g,h){$("#"+
+b).data(g,h)});if(a.type==0)$("#"+b).dialog({content:e});else{f.html(e);$.parser.parse("#"+b);$(a.source).webuiPopover("show")}})}},debug:function(a,b){window.console&&window.console.log&&window.console.log(a,b)},initThemes:function(){this.themes&&$("#select-themes").combobox({groupField:"group",data:this.themes,editable:false,panelHeight:"auto",onChange:function(a){var b=(a+";").split(";"),c=b[0];b=b[1]||"logo.png";$("#styleEasyui").attr("href","tr-web-control/script/easyui/themes/"+c+"/easyui.css");
+$("#logo").attr("src","tr-web-control/"+b);system.config.theme=a;system.saveConfig()},onLoadSuccess:function(){$(this).combobox("setValue",system.config.theme||"default")}})},getValidTreeKey:function(a){if(!a)return"";return this.B64.encode(a).replace(/[+|\/|=]/g,"0")}};
$(document).ready(function(){$.getJSON(system.rootPath+"i18n/en.json").done(function(a){system.defaultLang=a});$.getJSON(system.rootPath+"i18n.json").done(function(a){system.languages=a;system.init(location.search.getQueryString("lang"),location.search.getQueryString("local"))})});
function pagerFilter(a){if(typeof a.length=="number"&&typeof a.splice=="function")a={total:a.length,rows:a};var b=$(this),c=b.datagrid("options"),d=b.datagrid("getPager"),f=b.data("buttons");d.pagination({onSelectPage:function(h,i){c.pageNumber=h;c.pageSize=i;d.pagination("refresh",{pageNumber:h,pageSize:i});b.datagrid("loadData",a)},buttons:f});if(!a.originalRows)a.originalRows=a.rows;var e=(c.pageNumber-1)*parseInt(c.pageSize),g=e+parseInt(c.pageSize);a.rows=a.originalRows.slice(e,g);if(f&&f.length)for(e=
0;e0){if(this.all[a.id]){this.all[a.id]=null;delete this.all[a.id]}this.datas[c]=null;delete this.datas[c]}else{this.isRecentlyActive&&!this.all[a.id]&&this.newIds.push(a.id);a=$.extend(this.all[a.id],a);if(a.uploadedEver==0&&a.downloadedEver==0)a.uploadRatio="∞";a.infoIsLoading=false;var e=this.status[a.status];this.addTracker(a);if(!e){this.status[a.status]=[];e=this.status[a.status]}this.totalSize+=a.totalSize;
-a.remainingTime=a.rateDownload>0&&a.leftUntilDone>0?Math.floor(a.leftUntilDone/a.rateDownload*1E3):a.rateDownload==0&&a.leftUntilDone==0&&a.totalSize!=0?0:31536E8;e.push(a);a.error!=0&&this.error.push(a);if(a.rateUpload>0||a.rateDownload>0)this.actively.push(a);switch(a.status){case b.stopped:this.puased.push(a);break;case b.download:this.downloading.push(a)}this.all[a.id]=a;$.inArray(a.downloadDir,transmission.downloadDirs)==-1&&transmission.downloadDirs.push(a.downloadDir);if(transmission.options.getFolders)if(a.downloadDir){e=
-a.downloadDir.replace(/\\/g,"/").split("/");var j="folders-",h;for(h in e){var f=e[h];if(f!=""){f=d.encode(f);j+=f.replace(/[+|\/|=]/g,"0");(f=this.folders[j])||(f={count:0,torrents:[],size:0,nodeid:j});f.torrents.push(a);f.count++;f.size+=a.totalSize;this.folders[j]=f}}}this.count++}}transmission.downloadDirs=transmission.downloadDirs.sort();this.newIds.length>0&&this.getallids(null,this.newIds)},addTracker:function(b){var d=b.trackerStats,c=[];b.leecherCount=0;b.seederCount=0;if(d.length>0){var a=
-[],g;for(g in d){var e=d[g],j=e.lastAnnounceResult.toLowerCase(),h=e.host.getHostName().split(".");$.inArray(h[0],"www,tracker".split(","))!=-1&&h.shift();h=h.join(".");var f="tracker-"+h.replace(/\./g,"-"),i=transmission.trackers[f];if(!i){transmission.trackers[f]={count:0,torrents:[],size:0,connected:true,isBT:d.length>5};i=transmission.trackers[f]}i.name=h;i.nodeid=f;i.host=e.host;if(!e.lastAnnounceSucceeded&&e.announceState!=transmission._trackerStatus.inactive){a.push(e.lastAnnounceResult);if(j==
-"could not connect to tracker")i.connected=false}if(i.torrents.indexOf(b)==-1){i.torrents.push(b);i.count++;i.size+=b.totalSize}b.leecherCount+=e.leecherCount;b.seederCount+=e.seederCount;c.indexOf(h)==-1&&c.push(h)}d.length>5&&this.btItems.push(b);if(a.length==d.length){b.warning=a.join(";");if(b.nextAnnounceTime){if(b.nextAnnounceTime>e.nextAnnounceTime)b.nextAnnounceTime=e.nextAnnounceTime}else b.nextAnnounceTime=e.nextAnnounceTime;this.warning.push(b)}if(b.leecherCount<0)b.leecherCount=0;if(b.seederCount<
-0)b.seederCount=0;b.leecher=b.leecherCount+" ("+b.peersGettingFromUs+")";b.seeder=b.seederCount+" ("+b.peersSendingToUs+")";b.trackers=c.join(";")}},getPeers:function(b){transmission.exec({method:"torrent-get",arguments:{fields:"peers,peersFrom".split(","),ids:b}},function(d){console.log("data:",d)})},getMoreInfos:function(b,d,c){transmission.exec({method:"torrent-get",arguments:{fields:b.split(","),ids:d}},function(a){if(a.result=="success")c&&c(a.arguments.torrents);else c&&c(null)})},search:function(b,
-d){if(!b)return null;if(!d)d=this.all;var c=[];$.each(d,function(a){d[a].name.toLowerCase().indexOf(b.toLowerCase())!=-1&&c.push(d[a])});return this.searchResult=c},getFiles:function(b,d){transmission.exec({method:"torrent-get",arguments:{fields:"files,fileStats".split(","),ids:b}},function(c){if(c.result=="success")d&&d(c.arguments.torrents);else d&&d(null)})},getConfig:function(b,d){this.getMoreInfos(this.fields.config,b,d)},getErrorIds:function(b,d){var c=[],a=new Date;if(d==true)a=a.getTime()/
-1E3;for(var g in this.error){var e=this.error[g];if(!($.inArray(e.id,b)!=-1&&b.length>0)){if(d==true)if(a0)){if(d==true)if(a0)this.all[s.id]&&(this.all[s.id]=null,delete this.all[s.id]),this.datas[n]=null,delete this.datas[n];else{this.isRecentlyActive&&!this.all[s.id]&&this.newIds.push(s.id),0==(s=$.extend(this.all[s.id],s)).uploadedEver&&0==s.downloadedEver&&(s.uploadRatio="∞"),s.infoIsLoading=!1;var i=this.status[s.status];switch(this.addTracker(s),i||(this.status[s.status]=new Array,i=this.status[s.status]),this.totalSize+=s.totalSize,s.rateDownload>0&&s.leftUntilDone>0?s.remainingTime=Math.floor(s.leftUntilDone/s.rateDownload*1e3):0==s.rateDownload&&0==s.leftUntilDone&&0!=s.totalSize?s.remainingTime=0:s.remainingTime=31536e8,i.push(s),0!=s.error&&this.error.push(s),(s.rateUpload>0||s.rateDownload>0)&&this.actively.push(s),s.status){case e.stopped:this.puased.push(s);break;case e.download:this.downloading.push(s)}if(this.all[s.id]=s,-1==$.inArray(s.downloadDir,transmission.downloadDirs)&&transmission.downloadDirs.push(s.downloadDir),transmission.options.getFolders&&s.downloadDir){var a=s.downloadDir.replace(/\\/g,"/").split("/"),o="folders-";for(var l in a){var d=a[l];if(""!=d){o+=t.encode(d).replace(/[+|\/|=]/g,"0");var u=this.folders[o];u||(u={count:0,torrents:new Array,size:0,nodeid:o}),u.torrents.push(s),u.count++,u.size+=s.totalSize,this.folders[o]=u}}}this.count++}}transmission.downloadDirs=transmission.downloadDirs.sort(),this.newIds.length>0&&this.getallids(null,this.newIds)},addTracker:function(e){var t=e.trackerStats,n=[];if(e.leecherCount=0,e.seederCount=0,t.length>0){var s=[];for(var r in t){var i=t[r],a=i.lastAnnounceResult.toLowerCase(),o=i.host.getHostName().split(".");-1!=$.inArray(o[0],"www,tracker".split(","))&&o.shift();var l=o.join("."),d="tracker-"+l.replace(/\./g,"-"),u=transmission.trackers[d];u||(transmission.trackers[d]={count:0,torrents:new Array,size:0,connected:!0,isBT:t.length>5},u=transmission.trackers[d]),u.name=l,u.nodeid=d,u.host=i.host,i.lastAnnounceSucceeded||i.announceState==transmission._trackerStatus.inactive||(s.push(i.lastAnnounceResult),"could not connect to tracker"==a&&(u.connected=!1)),-1==u.torrents.indexOf(e)&&(u.torrents.push(e),u.count++,u.size+=e.totalSize),e.leecherCount+=i.leecherCount,e.seederCount+=i.seederCount,-1==n.indexOf(l)&&n.push(l)}t.length>5&&this.btItems.push(e),s.length==t.length&&(e.warning=s.join(";"),e.nextAnnounceTime?e.nextAnnounceTime>i.nextAnnounceTime&&(e.nextAnnounceTime=i.nextAnnounceTime):e.nextAnnounceTime=i.nextAnnounceTime,this.warning.push(e)),e.leecherCount<0&&(e.leecherCount=0),e.seederCount<0&&(e.seederCount=0),e.leecher=e.leecherCount+" ("+e.peersGettingFromUs+")",e.seeder=e.seederCount+" ("+e.peersSendingToUs+")",e.trackers=n.join(";")}},getPeers:function(e){transmission.exec({method:"torrent-get",arguments:{fields:"peers,peersFrom".split(","),ids:e}},function(e){console.log("data:",e)})},getMoreInfos:function(e,t,n){transmission.exec({method:"torrent-get",arguments:{fields:e.split(","),ids:t}},function(e){"success"==e.result?n&&n(e.arguments.torrents):n&&n(null)})},search:function(e,t){if(!e)return null;t||(t=this.all);var n=new Array;return $.each(t,function(s,r){-1!=t[s].name.toLowerCase().indexOf(e.toLowerCase())&&n.push(t[s])}),this.searchResult=n,n},getFiles:function(e,t){transmission.exec({method:"torrent-get",arguments:{fields:"files,fileStats".split(","),ids:e}},function(e){"success"==e.result?t&&t(e.arguments.torrents):t&&t(null)})},getConfig:function(e,t){this.getMoreInfos(this.fields.config,e,t)},getErrorIds:function(e,t){var n=new Array,s=new Date;1==t&&(s=s.getTime()/1e3);for(var r in this.error){var i=this.error[r];-1!=$.inArray(i.id,e)&&e.length>0||(1==t&&s0||(1==t&&s