Revert "calls are now jsonp (#461)"

This reverts commit 450ca4e169.
This commit is contained in:
栽培者 2020-09-15 19:42:23 +08:00 committed by GitHub
parent 450ca4e169
commit 79989ed754
2 changed files with 135 additions and 210 deletions

View File

@ -1,206 +1,124 @@
var system={version:"1.6.1",rootPath:"tr-web-control/",codeupdate:"20200913",configHead:"transmission-web-control",config:{autoReload:true,reloadStep:5000,pageSize:30,pagination:true,pageList:[10,20,30,40,50,100,150,200,250,300,5000],defaultSelectNode:null,autoExpandAttribute:false,defaultLang:"",foldersShow:false,theme:"default",showBTServers:false,ipInfoToken:'',ui:{status:{tree:{},layout:{main:{},body:{},left:{}},panel:{},size:{nav:{},attribute:{}}}},hideSubfolders:false,simpleCheckMode:false,nav:{servers:true,folders:true,statistics:true,labels:false},labels:[],labelMaps:{},ignoreVersion:[]},storageKeys:{dictionary:{folders:"dictionary.folders"}},dictionary:{folders:null},checkUpdateScript:"https://api.github.com/repos/ronggang/transmission-web-control/releases/latest",contextMenus:{},panel:null,lang:null,reloading:false,autoReloadTimer:null,downloadDir:"",islocal:false,B64:new Base64(),currentTorrentId:0,flags:[],control:{tree:null,torrentlist:null},userConfig:{torrentList:{fields:[],sortName:null,sortOrder:"asc"}},serverConfig:null,serverSessionStats:null,templates:{},checkedRows:[],uiIsInitialized:false,popoverCount:0,currentListDir:"",setlang:function(lang,callback){if(!lang){if(this.config.defaultLang)
lang=this.config.defaultLang;else
lang=navigator.language||navigator.browserLanguage;}
if(!lang)lang="zh-CN";if(lang.indexOf("-")!=-1){lang=lang.split("-")[0].toLocaleLowerCase()+"-"+lang.split("-")[1].toLocaleUpperCase();}
if(!this.languages[lang]){lang="en";}
lang=lang.replace("-","_");$.getJSON(system.rootPath+"i18n/"+lang+".json",function(result){if(result){system.lang=$.extend(true,system.defaultLang,result);}
system.resetLangText();$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-"+lang+".js").done(function(script,textStatus){if(callback)
callback();}).fail(function(jqxhr,settings,exception){$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-en.js",function(){if(callback)
callback();});});});},init:function(lang,islocal,devicetype){this.readConfig();this.lastUIStatus=JSON.parse(JSON.stringify(this.config.ui.status));this.islocal=(islocal==1?true:false);this.panel={main:$("#main"),top:$("#m_top"),toolbar:$("#m_toolbar"),left_layout:$("#m_left_layout"),left:$("#m_left"),body:$("#m_body"),layout_body:$("#layout_body"),layout_left:$("#layout_left"),list:$("#m_list"),attribute:$("#m_attribute"),bottom:$("#m_bottom"),title:$("#m_title"),status:$("#m_status"),statusbar:$("#m_statusbar"),status_text:$("#status_text"),droparea:$("#dropArea")};if(this.lang==null){this.setlang(lang,function(){system.initdata()});}else{this.initdata();}
this.initThemes();this.clipboard=new ClipboardJS('#toolbar_copyPath');},resetLangText:function(parent){if(!parent)
parent=$;var items=parent.find("*[system-lang]");$.each(items,function(key,item){var name=$(item).attr("system-lang");if(name.substr(0,1)=="["){$(item).html(eval("system.lang"+name));}else{$(item).html(eval("system.lang."+name));}});items=parent.find("*[system-tip-lang]");$.each(items,function(key,item){var name=$(item).attr("system-tip-lang");if(name.substr(0,1)=="["){$(item).attr("title",eval("system.lang"+name));}else{$(item).attr("title",eval("system.lang."+name));}});},initdata:function(){$(document).attr("title",this.lang.system.title+" "+this.version);$.fn.switchbutton.defaults.onText=this.lang["public"]["text-on"];$.fn.switchbutton.defaults.offText=this.lang["public"]["text-off"];var buttons=new Array();var title="<span>"+this.lang.title.left+"</span>";if(buttons.length>1){title+=buttons.join("");this.panel.left_layout.panel("setTitle",title);for(var key in this.lang.tree.toolbar.nav){$("#tree-toolbar-nav-"+key).linkbutton();switch(key){case "folders":if(system.config.foldersShow){$("tree-toolbar-nav-"+key).linkbutton({iconCls:"icon-enabled"}).data("status",1);}else{$("tree-toolbar-nav-"+key).linkbutton({iconCls:"icon-disabled"}).data("status",0);}
break;default:break;}}}else{this.panel.left_layout.panel("setTitle",title);}
title="<span>"+this.lang.title.list+"</span>";buttons.length=0;if(buttons.length>1){title+=buttons.join("");this.panel.body.panel("setTitle",title);for(var key in this.lang["torrent-head"].buttons){$("#torrent-head-buttons-"+key).linkbutton();switch(key){case "autoExpandAttribute":if(system.config.autoExpandAttribute){$("#torrent-head-buttons-"+key).linkbutton({iconCls:"icon-enabled"}).data("status",1);}else{$("#torrent-head-buttons-"+key).linkbutton({iconCls:"icon-disabled"}).data("status",0);}
break;default:break;}}}else{this.panel.body.panel("setTitle",title);}
this.panel.status.panel("setTitle",this.lang.title.status);this.panel.attribute.panel({title:this.lang.title.attribute,onExpand:function(){if(system.currentTorrentId!=0&&$(this).data("isload")){system.getTorrentInfos(system.currentTorrentId);}else{system.clearTorrentAttribute();}},onLoad:function(){if(!$(this).data("isload")){$(this).data("isload",true);if(system.currentTorrentId!=0){setTimeout(function(){system.getTorrentInfos(system.currentTorrentId);},500);}}}});$.each(this.languages,function(key,value){$("<option/>").text(value).val(key).attr("selected",(key==system.lang.name?true:false)).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();this.checkUpdate();},initEvent:function(){$(window).resize(function(){$("#main").layout("resize");});this.panel.droparea[0].addEventListener("dragover",function(e){e.stopPropagation();e.preventDefault();system.debug("#dropArea.dragover");},false);this.panel.list[0].addEventListener("dragover",function(e){e.stopPropagation();e.preventDefault();system.panel.droparea.show();system.debug("dragover");},false);this.panel.droparea[0].addEventListener("drop",function(e){e.stopPropagation();e.preventDefault();system.panel.droparea.hide();system.debug("drop.e.dataTransfer:",e.dataTransfer);system.checkDropFiles(e.dataTransfer.files);},false);this.panel.droparea[0].addEventListener("dragleave",function(e){e.stopPropagation();e.preventDefault();system.panel.droparea.hide();system.debug("dragleave");},false);$("#text-drop-title").html(this.lang["public"]["text-drop-title"]);$("#button-cancel-checked").on("click",function(){system.control.torrentlist.datagrid("uncheckAll");});this.panel.left.tree({onExpand:function(node){system.config.ui.status.tree[node.id]=node.state;system.saveConfig();},onCollapse:function(node){system.config.ui.status.tree[node.id]=node.state;system.saveConfig();}});this.panel.layout_body.layout({onExpand:function(region){system.config.ui.status.layout.body[region]="open";system.saveConfig();},onCollapse:function(region){system.config.ui.status.layout.body[region]="closed";system.saveConfig();}});this.panel.layout_left.layout({onExpand:function(region){system.config.ui.status.layout.left[region]="open";system.saveConfig();},onCollapse:function(region){system.config.ui.status.layout.left[region]="closed";system.saveConfig();}});this.panel.main.layout({onExpand:function(region){system.config.ui.status.layout.main[region]="open";system.saveConfig();},onCollapse:function(region){system.config.ui.status.layout.main[region]="closed";system.saveConfig();}});},layoutResize:function(target,size){if(!system.uiIsInitialized)return;if(system.config.ui.status.size[target]){system.config.ui.status.size[target]=size;system.saveConfig();}},navToolbarClick:function(source){var key=source.id;var status=$(source).data("status");var treenode=null;switch(key){case "tree-toolbar-nav-folders":treenode=this.panel.left.tree("find","folders");if(status==1){this.config.foldersShow=false;}else{this.config.foldersShow=true;}
break;case "tree-toolbar-nav-statistics":treenode=this.panel.left.tree("find","statistics");break;case "torrent-head-buttons-autoExpandAttribute":treenode={};treenode.target=null;if(status==1){this.config.autoExpandAttribute=false;}else{this.config.autoExpandAttribute=true;}
break;}
if(!treenode){return;}
if(status==1){$(source).linkbutton({iconCls:"icon-disabled"});$(treenode.target).parent().hide();status=0;}else{$(source).linkbutton({iconCls:"icon-enabled"});$(treenode.target).parent().show();status=1;}
$(source).data("status",status);this.saveConfig();},checkDropFiles:function(sources){if(!sources||!sources.length)return;var files=new Array();for(var i=0;i<sources.length;i++){var file=sources[i];if((file.name.split(".")).pop().toLowerCase()=="torrent")
files.push(file);}
if(files.length>0){system.openDialogFromTemplate({id:"dialog-torrent-addfile",options:{title:system.lang.toolbar["add-torrent"],width:620,height:system.config.nav.labels?500:300,resizable:true},datas:{"files":files}});}},initTree:function(){var items=[{id:"torrent-all",iconCls:"iconfont tr-icon-home",text:this.lang.tree.all+" ("+this.lang.tree.status.loading+")",children:[{id:"downloading",text:this.lang.tree.downloading,iconCls:"iconfont tr-icon-download"},{id:"paused",text:this.lang.tree.paused,iconCls:"iconfont tr-icon-pause2"},{id:"sending",text:this.lang.tree.sending,iconCls:"iconfont tr-icon-upload"},{id:"check",text:this.lang.tree.check,iconCls:"iconfont tr-icon-data-check"},{id:"actively",text:this.lang.tree.actively,iconCls:"iconfont tr-icon-actively"},{id:"error",text:this.lang.tree.error,iconCls:"iconfont tr-icon-errors"},{id:"warning",text:this.lang.tree.warning,iconCls:"iconfont tr-icon-warning"}]}];var navContents={"servers":{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"iconfont tr-icon-servers",children:[{id:"servers-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},"folders":{id:"folders",text:this.lang.tree.folders,iconCls:"iconfont tr-icon-folder",state:"closed",children:[{id:"folders-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},"statistics":{id:"statistics",text:this.lang.tree.statistics.title,state:"closed",iconCls:"iconfont tr-icon-shuju",children:[{id:"cumulative-stats",text:this.lang.tree.statistics.cumulative,iconCls:"iconfont tr-icon-folder",children:[{id:"uploadedBytes",text:this.lang.tree.statistics.uploadedBytes,iconCls:"iconfont tr-icon-empty"},{id:"downloadedBytes",text:this.lang.tree.statistics.downloadedBytes,iconCls:"iconfont tr-icon-empty"},{id:"filesAdded",text:this.lang.tree.statistics.filesAdded,iconCls:"iconfont tr-icon-empty"},{id:"sessionCount",text:this.lang.tree.statistics.sessionCount,iconCls:"iconfont tr-icon-empty"},{id:"secondsActive",text:this.lang.tree.statistics.secondsActive,iconCls:"iconfont tr-icon-empty"}]},{id:"current-stats",text:this.lang.tree.statistics.current,iconCls:"iconfont tr-icon-folder",children:[{id:"current-uploadedBytes",text:this.lang.tree.statistics.uploadedBytes,iconCls:"iconfont tr-icon-empty"},{id:"current-downloadedBytes",text:this.lang.tree.statistics.downloadedBytes,iconCls:"iconfont tr-icon-empty"},{id:"current-filesAdded",text:this.lang.tree.statistics.filesAdded,iconCls:"iconfont tr-icon-empty"},{id:"current-sessionCount",text:this.lang.tree.statistics.sessionCount,iconCls:"iconfont tr-icon-empty"},{id:"current-secondsActive",text:this.lang.tree.statistics.secondsActive,iconCls:"iconfont tr-icon-empty"}]}]},"labels":{id:"labels",text:this.lang.tree.labels,iconCls:"iconfont tr-icon-labels"}}
for(var key in this.config.nav){var value=this.config.nav[key];var data=navContents[key];if(data){if(value){items.push(data);}}}
this.panel.left.tree({data:items,onSelect:function(node){system.loadTorrentToList({node:node});system.currentListDir=node.downDir;},lines:true});},initUIStatus:function(){if(this.uiIsInitialized)return;system.uiIsInitialized=true;var status=this.lastUIStatus.tree;for(var key in status){var node=this.panel.left.tree("find",key);if(node&&node.target){if(status[key]=="open"){this.panel.left.tree("expand",node.target);}else{this.panel.left.tree("collapse",node.target);}}}
if(this.config.defaultSelectNode){var node=this.panel.left.tree("find",this.config.defaultSelectNode);if(node&&(this.config.foldersShow||this.config.defaultSelectNode.indexOf("folders")==-1)){this.panel.left.tree("select",node.target);}else{node=this.panel.left.tree("find","torrent-all");this.panel.left.tree("select",node.target);}}
if(this.lastUIStatus.size.nav&&this.lastUIStatus.size.nav.width){this.panel.main.layout('panel','west').panel('resize',{width:this.lastUIStatus.size.nav.width+5});this.panel.main.layout("resize");}
if(this.lastUIStatus.size.attribute&&this.lastUIStatus.size.attribute.height){this.panel.layout_body.layout('panel','south').panel('resize',{height:this.lastUIStatus.size.attribute.height});this.panel.layout_body.layout("resize");}
status=this.lastUIStatus.layout.body;for(var key in status){if(status[key]=="open"){this.panel.layout_body.layout("expand",key);}else{this.panel.layout_body.layout("collapse",key);}}
status=this.lastUIStatus.layout.left;for(var key in status){if(status[key]=="open"){this.panel.layout_left.layout("expand",key);}else{this.panel.layout_left.layout("collapse",key);}}
status=this.lastUIStatus.layout.main;for(var key in status){if(status[key]=="open"){this.panel.main.layout("expand",key);}else{this.panel.main.layout("collapse",key);}}},initTorrentTable:function(){this.control.torrentlist=$("<table/>").attr("class","torrent-list").appendTo(this.panel.list);var headContextMenu=null;var selectedIndex=-1;$.get(system.rootPath+"template/torrent-fields.json?time="+(new Date()),function(data){var fields=data.fields;var _fields={}
for(var i=0;i<fields.length;i++){var item=fields[i];_fields[item.field]=item;}
if(system.userConfig.torrentList.fields.length!=0){fields=$.extend(fields,system.userConfig.torrentList.fields);}
system.userConfig.torrentList.fields=fields;for(var key in fields){var item=fields[key];var _field=_fields[item.field];if(_field&&_field["formatter"]){item["formatter"]=_field["formatter"];}else if(item["formatter"]){delete item["formatter"];}
if(_field&&_field["sortable"]){item["sortable"]=_field["sortable"];}else if(item["sortable"]){delete item["sortable"];}
item.title=system.lang.torrent.fields[item.field]||item.field;system.setFieldFormat(item);}
system.control.torrentlist.datagrid({autoRowHeight:false,pagination:system.config.pagination,rownumbers:true,remoteSort:false,checkOnSelect:false,pageSize:system.config.pageSize,pageList:system.config.pageList,idField:"id",fit:true,striped:true,sortName:system.userConfig.torrentList.sortName,sortOrder:system.userConfig.torrentList.sortOrder,drophead:true,columns:[fields],onCheck:function(rowIndex,rowData){system.checkTorrentRow(rowIndex,rowData);},onUncheck:function(rowIndex,rowData){system.checkTorrentRow(rowIndex,rowData);},onCheckAll:function(rows){system.checkTorrentRow("all",false);},onUncheckAll:function(rows){system.checkTorrentRow("all",true);},onSelect:function(rowIndex,rowData){if(selectedIndex!=-1){system.control.torrentlist.datagrid("unselectRow",selectedIndex);}
system.getTorrentInfos(rowData.id);selectedIndex=rowIndex;},onUnselect:function(rowIndex,rowData){system.currentTorrentId=0;selectedIndex=-1;},onBeforeLoad:function(param){system.currentTorrentId=0;},onSortColumn:function(field,order){var field_func=field;var datas=system.control.torrentlist.datagrid("getData").originalRows.sort(arrayObjectSort(field_func,order));system.control.torrentlist.datagrid("loadData",datas);system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);system.userConfig.torrentList.sortName=field;system.userConfig.torrentList.sortOrder=order;system.saveUserConfig();},onRowContextMenu:function(e,rowIndex,rowData){if(system.config.simpleCheckMode){system.control.torrentlist.datagrid("uncheckAll");}
if(system.checkedRows.length==0){system.control.torrentlist.datagrid("checkRow",rowIndex);}
e.preventDefault();system.showContextMenu("torrent-list",e);},onHeadDrop:function(sourceField,targetField){system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);system.saveUserConfig();},onResizeColumn:function(field,width){system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);system.saveUserConfig();},onHeaderContextMenu:function(e,field){e.preventDefault();if(!headContextMenu){createHeadContextMenu();}
headContextMenu.menu('show',{left:e.pageX,top:e.pageY});}});},"json");this.control.torrentlist.refresh=function(){system.control.torrentlist.datagrid("getPager").find(".pagination-load").click();};function createHeadContextMenu(){if(headContextMenu){$(headContextMenu).remove();}
headContextMenu=$('<div/>').appendTo('body');headContextMenu.menu({onClick:function(item){if(item.iconCls=='icon-ok'){system.control.torrentlist.datagrid('hideColumn',item.name);headContextMenu.menu('setIcon',{target:item.target,iconCls:'icon-empty'});}else{system.control.torrentlist.datagrid('showColumn',item.name);headContextMenu.menu('setIcon',{target:item.target,iconCls:'icon-ok'});}
system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]);system.saveUserConfig();}});var fields=system.control.torrentlist.datagrid('getColumnFields');for(var i=0;i<fields.length;i++){var field=fields[i];var col=system.control.torrentlist.datagrid('getColumnOption',field);if(col.allowCustom!=false&&col.allowCustom!="false"){headContextMenu.menu('appendItem',{text:col.title,name:field,iconCls:(col.hidden?"icon-empty":"icon-ok")});}}}},resetTorrentListFieldsUserConfig:function(columns){var fields={};$.each(this.userConfig.torrentList.fields,function(index,item){fields[item.field]=item;});this.userConfig.torrentList.fields=[];$.each(columns,function(index,item){var field=$.extend({},fields[item.field]);field.width=item.width;field.hidden=item.hidden;system.userConfig.torrentList.fields.push(field);});},showContextMenu:function(type,e){var parent=this.contextMenus[type];if(!parent){parent=$("<div/>").attr("class","easyui-menu").css({"min-width":"180px"}).appendTo(this.panel.main);this.contextMenus[type]=parent;parent.menu();}else{parent.empty();}
var menus=null;switch(type){case "torrent-list":menus=new Array("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){menus.push("-");menus.push("setLabels");}
var toolbar=this.panel.toolbar;for(var item in menus){var key=menus[item];if(key=="-"){$("<div class='menu-sep'></div>").appendTo(parent);}else{var menu=toolbar.find("#toolbar_"+key);if(menu.length>0){parent.menu("appendItem",{text:menu.attr("title"),id:key,iconCls:menu.linkbutton("options").iconCls,disabled:menu.linkbutton("options").disabled,onclick:function(){system.panel.toolbar.find("#toolbar_"+$(this).attr("id")).click();}});}else{menu=$("#"+key);if(menu.length>0){parent.menu("appendItem",{text:menu.attr("title"),id:key,iconCls:menu.attr("id").replace("menu-queue-move","iconfont tr-icon"),disabled:toolbar.find("#toolbar_queue").linkbutton("options").disabled,onclick:function(){$("#"+$(this).attr("id")).click();}});}else{menu=this.getContentMenuWithKey(key,parent);if(menu){parent.menu("appendItem",menu);}}}
menu=null;}}
var btn=$('#copyPath',parent);btn.attr({"data-clipboard-action":"copy","data-clipboard-target":"#clipboard-source"});var clipboard=new ClipboardJS(btn.get(0));break;}
parent.menu("show",{left:e.pageX,top:e.pageY,hideOnUnhover:false});parent=null;menus=null;},getContentMenuWithKey:function(key,parent){switch(key){case "setLabels":return{id:"setLabels",text:system.lang.menus.setLabels,iconCls:"iconfont tr-icon-labels",disabled:this.checkedRows.length==0,onclick:function(){var rows=system.checkedRows;var values=new Array();for(var i in rows){values.push(rows[i].hashString);}
if(values.length==0)return;system.openDialogFromTemplate({id:"dialog-torrent-setLabels",options:{title:system.lang.dialog["torrent-setLabels"].title,width:520,height:200},datas:{"hashs":values}});}};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(data){system.copyToClipboard(data);parent.css("display","block");});}}}},formetTorrentLabels:function(ids,hashString){var box=$("<div style='position: relative;'/>");if(ids){if(typeof(ids)=="string"){ids=ids.split(",");}
for(var i=0;i<ids.length;i++){var index=ids[i];var item=this.config.labels[index];if(item){$("<span class='user-label'/>").html(item.name).css({"background-color":item.color,"color":(getGrayLevel(item.color)>0.5?"#000":"#fff")}).appendTo(box);}}}
var button=$("<button onclick='javascript:system.setTorrentLabels(this,\""+hashString+"\");' data-options=\"iconCls:'iconfont tr-icon-labels',plain:true\" class=\"easyui-linkbutton user-label-set\"/>").appendTo(box);button.linkbutton();button.find("span").first().attr({"title":system.lang.dialog["torrent-setLabels"].title});return box.get(0).outerHTML;},setTorrentLabels:function(button,hashString){system.openDialogFromTemplate({id:"dialog-torrent-setLabels",options:{title:system.lang.dialog["torrent-setLabels"].title,width:520,height:200},datas:{"hashs":[hashString]},type:1,source:$(button)});},checkTorrentRow:function(rowIndex,rowData){this.checkedRows=this.control.torrentlist.datagrid("getChecked");this.showCheckedInStatus();if(rowIndex=="all"){if(this.control.torrentlist.datagrid("getRows").length==0){return;}
$("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers,#toolbar_copyPath",this.panel.toolbar).linkbutton({disabled:rowData});$("#toolbar_rename, #toolbar_morepeers",this.panel.toolbar).linkbutton({disabled:true});this.panel.toolbar.find("#toolbar_queue").menubutton("disable");return;}
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");return;}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");var torrent=transmission.torrents.all[rowData.id];switch(torrent.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});break;}}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 items=[];var text=this.lang.system.status.checked.replace("%n",this.checkedRows.length);var paths=[];$("<div style='padding: 5px;'/>").html(text).appendTo(this.panel.status_text);for(var index=0;index<this.checkedRows.length;index++){var item=this.checkedRows[index];items.push({value:index,text:(index+1)+". "+item.name});if($.inArray(item.downloadDir,paths)===-1){paths.push(item.downloadDir);}}
$("<div/>").appendTo(this.panel.status_text).datalist({data:items});$(".datalist>.panel-body",this.panel.status_text).css({border:0});$("#button-cancel-checked").show();$("#clipboard-source").val(paths.join("\n"));}else{$("#button-cancel-checked").hide();this.panel.status_text.empty();$("#clipboard-source").val("");}},copyToClipboard:function(text){var id="copy_to_clipboard_textarea";var aux=document.getElementById(id);if(!aux)aux=document.createElement("textarea");aux.id=id;aux.style.display="block";aux.value=text;document.body.appendChild(aux);aux.select();document.execCommand("copy");aux.style.display="none";},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/1000,min:3,disabled:!this.config.autoReload,onChange:function(){var value=this.value;if($.isNumeric(value)){system.config.reloadStep=value*1000;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:system.config.nav.labels?600:400,resizable:true}});});this.panel.toolbar.find("#toolbar_start_all").linkbutton({disabled:false}).attr("title",this.lang.toolbar.tip["start-all"]).click(function(){var button=$(this);var icon=button.linkbutton("options").iconCls;button.linkbutton({disabled:true,iconCls:"icon-loading"});transmission.exec({method:"torrent-start"},function(data){button.linkbutton({iconCls:icon,disabled:false});button=null;});});this.panel.toolbar.find("#toolbar_pause_all").linkbutton({disabled:false}).attr("title",this.lang.toolbar.tip["pause-all"]).click(function(){var button=$(this);var icon=button.linkbutton("options").iconCls;button.linkbutton({disabled:true,iconCls:"icon-loading"});transmission.exec({method:"torrent-stop"},function(data){button.linkbutton({iconCls:icon,disabled:false});button=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 rows=system.control.torrentlist.datagrid("getChecked");if(rows.length>0){if(rows.length==1){var torrent=transmission.torrents.all[rows[0].id];if(torrent.percentDone>0){if(confirm(system.lang.toolbar.tip["recheck-confirm"])){system.changeSelectedTorrentStatus("verify",$(this));}}else{system.changeSelectedTorrentStatus("verify",$(this));}}else if(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 rows=system.control.torrentlist.datagrid("getChecked");var ids=new Array();for(var i in rows){ids.push(rows[i].id);}
if(ids.length==0)return;system.openDialogFromTemplate({id:"dialog-torrent-remove-confirm",options:{title:system.lang.dialog["torrent-remove"].title,width:350,height:150},datas:{"ids":ids}});});this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:true}).click(function(){var rows=system.control.torrentlist.datagrid("getChecked");if(rows.length==0)return;system.openDialogFromTemplate({id:"dialog-torrent-rename",options:{title:system.lang.dialog["torrent-rename"].title,width:520,height:200,resizable:true},datas:{id:rows[0].id}});});this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:true}).attr("title",this.lang.toolbar.tip["change-download-dir"]).click(function(){var rows=system.control.torrentlist.datagrid("getChecked");var ids=new Array();for(var i in rows){ids.push(rows[i].id);}
if(ids.length==0)return;system.openDialogFromTemplate({id:"dialog-torrent-changeDownloadDir",options:{title:system.lang.dialog["torrent-changeDownloadDir"].title,width:520,height:200},datas:{"ids":ids}});});this.panel.toolbar.find("#toolbar_alt_speed").linkbutton().attr("title",this.lang.toolbar.tip["alt-speed"]).click(function(){var button=$(this);var options=button.linkbutton("options");var enabled=false;if(options.iconCls=="iconfont tr-icon-rocket"){enabled=true;}
transmission.exec({method:"session-set",arguments:{"alt-speed-enabled":enabled}},function(data){if(data.result=="success"){system.serverConfig["alt-speed-enabled"]=enabled;button.linkbutton({iconCls:"iconfont tr-icon-"+(enabled?"woniu":"rocket")});if(enabled){$("#status_alt_speed").show();}else{$("#status_alt_speed").hide();}}});button.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:680,height:500,resizable:true}});});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(value){system.searchTorrents(value);},prompt:this.lang.toolbar["search-prompt"]});this.panel.toolbar.find("#toolbar_copyPath").linkbutton().attr("title",this.lang.toolbar.tip["copy-path-to-clipboard"]);},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:true},function(){system.reloadSession(true);system.getServerStatus();});},reloadSession:function(isinit){transmission.getSession(function(result){system.serverConfig=result;$("#status_version").html("Transmission "+system.lang.statusbar.version+result["version"]+", RPC: "+result["rpc-version"]+
", WEB Control: "+system.version+"("+system.codeupdate+")");if(result["alt-speed-enabled"]==true){system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"iconfont tr-icon-woniu"});$("#status_alt_speed").show();}else{system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"iconfont tr-icon-rocket"});$("#status_alt_speed").hide();}
system.downloadDir=result["download-dir"];if(transmission.downloadDirs.length==0){transmission.downloadDirs.push(system.downloadDir);}
if(parseInt(system.serverConfig["rpc-version"])>=15){transmission.getFreeSpace(system.downloadDir,function(datas){system.serverConfig["download-dir-free-space"]=datas.arguments["size-bytes"];system.showFreeSpace(datas.arguments["size-bytes"]);});}else{system.showFreeSpace(system.serverConfig["download-dir-free-space"]);}
if(isinit){system.showStatus(system.lang.system.status.connected);}});},showFreeSpace:function(size){var tmp=size;if(tmp==-1){tmp=system.lang["public"]["text-unknown"];}else{tmp=formatSize(tmp);}
$("#status_freespace").text(system.lang.dialog["system-config"]["download-dir-free-space"]+" "+tmp);},reloadTorrentBaseInfos:function(ids,moreFields){if(this.reloading)return;clearTimeout(this.autoReloadTimer);this.reloading=true;var oldInfos={trackers:transmission.trackers,folders:transmission.torrents.folders}
transmission.torrents.getallids(function(resultTorrents){var ignore=new Array();for(var index in resultTorrents){var item=resultTorrents[index];ignore.push(item.id);}
var errorIds=transmission.torrents.getErrorIds(ignore,true);if(errorIds.length>0){transmission.torrents.getallids(function(){system.resetTorrentInfos(oldInfos);},errorIds);}else{system.resetTorrentInfos(oldInfos);}},ids,moreFields);},resetTorrentInfos:function(oldInfos){this.resetNavTorrentStatus();this.resetNavServers(oldInfos);this.resetNavStatistics();this.resetNavFolders(oldInfos);this.resetNavLabels();if($.ua.browser.name=="Firefox"&&$.ua.browser.major<60){system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"});}},resetNavTorrentStatus:function(){var currentTorrentId=this.currentTorrentId;if(transmission.torrents.status[transmission._status.stopped]){system.updateTreeNodeText("paused",system.lang.tree.paused+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.stopped].length));}else{system.updateTreeNodeText("paused",system.lang.tree.paused);}
if(transmission.torrents.status[transmission._status.seed]){system.updateTreeNodeText("sending",system.lang.tree.sending+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seed].length));}else{system.updateTreeNodeText("sending",system.lang.tree.sending);}
if(transmission.torrents.status[transmission._status.seedwait]){var node=system.panel.left.tree("find","sending");var childs=system.panel.left.tree("getChildren",node.target);var text=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seedwait].length);if(childs.length>0){system.updateTreeNodeText(childs[0].id,text);}else{system.appendTreeNode(node,[{id:"seedwait",text:text,iconCls:"iconfont tr-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));}else{system.updateTreeNodeText("check",system.lang.tree.check);}
if(transmission.torrents.status[transmission._status.checkwait]){var node=system.panel.left.tree("find","check");var childs=system.panel.left.tree("getChildren",node.target);var text=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.checkwait].length);if(childs.length>0){system.updateTreeNodeText(childs[0].id,text);}else{system.appendTreeNode(node,[{id:"checkwait",text:text,iconCls:"iconfont tr-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));}else{system.updateTreeNodeText("downloading",system.lang.tree.downloading);}
if(transmission.torrents.status[transmission._status.downloadwait]){var node=system.panel.left.tree("find","downloading");var childs=system.panel.left.tree("getChildren",node.target);var text=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.downloadwait].length);if(childs.length>0){system.updateTreeNodeText(childs[0].id,text);}else{system.appendTreeNode(node,[{id:"downloadwait",text:text,iconCls:"iconfont tr-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 node=system.panel.left.tree("getSelected");if(node!=null){var p=system.control.torrentlist.datagrid("options").pageNumber;system.loadTorrentToList({node:node,page:p});}
if(currentTorrentId!=0){system.control.torrentlist.datagrid("selectRecord",currentTorrentId);}
system.reloading=false;if(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));},resetNavServers:function(oldInfos){var serversNode=this.panel.left.tree("find","servers");if(!this.config.nav.servers){if(serversNode){this.panel.left.tree("remove",serversNode.target);}
return;}
if(serversNode){var serversNode_collapsed=serversNode.state;this.removeTreeNode("servers-loading");}else{this.appendTreeNode(null,[{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"iconfont tr-icon-servers"}]);serversNode=this.panel.left.tree("find","servers");}
var datas=new Array();var BTServersNode=this.panel.left.tree("find","btservers");var BTServersNodeState=(BTServersNode?BTServersNode.state:"close");if(!BTServersNode&&system.config.showBTServers){this.appendTreeNode(serversNode,[{id:"btservers",text:"BT",state:"open",iconCls:"iconfont tr-icon-bt"}]);BTServersNode=this.panel.left.tree("find","btservers");}
for(var index in transmission.trackers){var tracker=transmission.trackers[index];if(tracker.isBT){if(!system.config.showBTServers){continue;}}
var node=system.panel.left.tree("find",tracker.nodeid);var text=tracker.name+this.showNodeMoreInfos(tracker.count,tracker.size);if(node){system.updateTreeNodeText(tracker.nodeid,text,(tracker.connected?"iconfont tr-icon-server":"iconfont tr-icon-server-error"));}else{system.appendTreeNode((tracker.isBT?BTServersNode:serversNode),[{id:tracker.nodeid,text:text,iconCls:(tracker.connected?"iconfont tr-icon-server":"iconfont tr-icon-server-error")}]);}
oldInfos.trackers[tracker.nodeid]=null;}
if(serversNode_collapsed=="closed"){this.panel.left.tree("collapse",serversNode.target);}
if(system.config.showBTServers&&BTServersNode&&BTServersNodeState=="closed"){this.panel.left.tree("collapse",BTServersNode.target);}
for(var index in oldInfos.trackers){var tracker=oldInfos.trackers[index];if(tracker){system.removeTreeNode(tracker.nodeid);}}},resetNavStatistics:function(){if(!this.config.nav.statistics){var node=this.panel.left.tree("find","statistics");if(node){this.panel.left.tree("remove",node.target);}
return;}
var items=("uploadedBytes,downloadedBytes,filesAdded,sessionCount,secondsActive").split(",");$.each(items,function(key,item){switch(item){case "uploadedBytes":case "downloadedBytes":system.updateTreeNodeText(item,system.lang.tree.statistics[item]+" "+formatSize(system.serverSessionStats["cumulative-stats"][item]));system.updateTreeNodeText("current-"+item,system.lang.tree.statistics[item]+" "+formatSize(system.serverSessionStats["current-stats"][item]));break;case "secondsActive":system.updateTreeNodeText(item,system.lang.tree.statistics[item]+" "+getTotalTime(system.serverSessionStats["cumulative-stats"][item]*1000));system.updateTreeNodeText("current-"+item,system.lang.tree.statistics[item]+" "+getTotalTime(system.serverSessionStats["current-stats"][item]*1000));break;default:system.updateTreeNodeText(item,system.lang.tree.statistics[item]+" "+system.serverSessionStats["cumulative-stats"][item]);system.updateTreeNodeText("current-"+item,system.lang.tree.statistics[item]+" "+system.serverSessionStats["current-stats"][item]);break;}});},resetNavFolders:function(oldInfos){if(!this.config.nav.folders){this.initUIStatus();var node=this.panel.left.tree("find","folders");if(node){this.panel.left.tree("remove",node.target);}
return;}
for(var index in transmission.torrents.folders){var item=transmission.torrents.folders[index];oldInfos.folders[item.nodeid]=null;}
this.loadFolderList(oldInfos.folders);},resetNavLabels:function(clear){if(!this.config.nav.labels){var node=this.panel.left.tree("find","labels");if(node){this.panel.left.tree("remove",node.target);}
return;}
if(clear){var items=this.panel.left.tree("getChildren",this.panel.left.tree("find","labels").target);for(var index=0;index<items.length;index++){this.panel.left.tree("remove",items[index].target);}}
var prefix="label-";for(var index=0;index<this.config.labels.length;index++){var item=this.config.labels[index];var key=prefix+this.getValidTreeKey(item.name);var node=this.panel.left.tree("find",key);if(!node){this.appendTreeNode("labels",[{id:key,text:item.name,labelIndex:index,iconCls:"iconfont tr-icon-label"}]);node=this.panel.left.tree("find",key);$(".tree-icon",node.target).css({color:item.color});$(".tree-title",node.target).addClass("user-label").css({"background-color":item.color,"color":(getGrayLevel(item.color)>0.5?"#000":"#fff")});}}},showNodeMoreInfos:function(count,size){var result="";if(count>0){result=" <span class='nav-torrents-number'>("+count+")</span>";}
if(size>0){result+="<span class='nav-total-size'>["+formatSize(size)+"]</span>";}
return result;},getServerStatus:function(){if(this.reloading)return;clearTimeout(this.autoReloadTimer);this.reloading=true;transmission.getStatus(function(data){system.reloading=false;$("#status_downloadspeed").html(formatSize(data["downloadSpeed"],false,"speed"));$("#status_uploadspeed").html(formatSize(data["uploadSpeed"],false,"speed"));system.serverSessionStats=data;if(data["torrentCount"]==0){var serversNode=system.panel.left.tree("find","servers");if(serversNode){system.panel.left.tree('remove',serversNode.target);}
system.updateTreeNodeText("torrent-all",system.lang.tree.all);}});},showStatus:function(msg,outtime){if($("#m_status").panel("options").collapsed){$("#layout_left").layout("expand","south");}
this.panel.status_text.show();if(msg){this.panel.status_text.html(msg);}
if(outtime==0){return;}
if(outtime==undefined){outtime=3000;}
this.panel.status_text.fadeOut(outtime,function(){$("#layout_left").layout("collapse","south");});},updateTreeNodeText:function(id,text,iconCls){var node=this.panel.left.tree("find",id);if(node){var data={target:node.target,text:text};if(iconCls!=undefined){data["iconCls"]=iconCls}
this.panel.left.tree("update",data);}
node=null;},appendTreeNode:function(parentid,data){var parent=null;if(typeof(parentid)=="string"){parent=this.panel.left.tree("find",parentid);}else
parent=parentid;if(parent){this.panel.left.tree("append",{parent:parent.target,data:data});}else{this.panel.left.tree("append",{data:data});}
parent=null;},removeTreeNode:function(id){var node=this.panel.left.tree("find",id);if(node){this.panel.left.tree("remove",node.target);}
node=null;},loadTorrentToList:function(config){if(!transmission.torrents.all){return;}
var def={node:null,page:1};jQuery.extend(def,config);if(!config.node)return;var torrents=null;var parent=this.panel.left.tree("getParent",config.node.target)||{id:""};var currentNodeId=this.panel.left.data("currentNodeId");if(currentNodeId!=config.node.id){this.control.torrentlist.datagrid("uncheckAll");this.control.torrentlist.datagrid({pageNumber:1});currentNodeId=config.node.id;}
this.panel.left.data("currentNodeId",currentNodeId);switch(parent.id){case "servers":case "btservers":if(config.node.id=="btservers"){torrents=transmission.torrents.btItems;}else{torrents=transmission.trackers[config.node.id].torrents;}
break;default:switch(config.node.id){case "torrent-all":case "servers":torrents=transmission.torrents.all;break;case "paused":torrents=transmission.torrents.status[transmission._status.stopped];break;case "sending":torrents=transmission.torrents.status[transmission._status.seed];break;case "seedwait":torrents=transmission.torrents.status[transmission._status.seedwait];break;case "check":torrents=transmission.torrents.status[transmission._status.check];break;case "checkwait":torrents=transmission.torrents.status[transmission._status.checkwait];break;case "downloading":torrents=transmission.torrents.status[transmission._status.download];break;case "downloadwait":torrents=transmission.torrents.status[transmission._status.downloadwait];break;case "actively":torrents=transmission.torrents.actively;break;case "error":torrents=transmission.torrents.error;break;case "warning":torrents=transmission.torrents.warning;break;case "search-result":torrents=transmission.torrents.searchResult;break;case "btservers":torrents=transmission.torrents.btItems;break;default:if(config.node.id.indexOf("folders-")!=-1){var folder=transmission.torrents.folders[config.node.id];if(folder){if(!this.config.hideSubfolders){torrents=folder.torrents;}else{torrents=[];for(var index=0;index<folder.torrents.length;index++){var element=folder.torrents[index];if(element.downloadDir.replace(/[\\|\/]/g,"")==config.node.path){torrents.push(element);}}}}}else if(config.node.id.indexOf("label-")!=-1){var labelIndex=parseInt(config.node.labelIndex);torrents=[];for(var key in transmission.torrents.all){var item=transmission.torrents.all[key];var labels=this.config.labelMaps[item.hashString];if(labels&&$.inArray(labelIndex,labels)!=-1){torrents.push(item);}}}
break;}
break;}
if(this.config.defaultSelectNode!=config.node.id){this.control.torrentlist.datagrid("loadData",[]);this.config.defaultSelectNode=config.node.id;this.saveConfig();};var datas=new Array();for(var index in torrents){if(!torrents[index]){return;}
var status=this.lang.torrent["status-text"][torrents[index].status];if(torrents[index].error!=0){status="<span class='text-status-error'>"+status+"</span>";}else if(torrents[index].warning){status="<span class='text-status-warning' title='"+torrents[index].warning+"'>"+status+"</span>";}
var data={};data=$.extend(data,torrents[index]);data.status=status;data.statusCode=torrents[index].status;data.completeSize=Math.max(0,torrents[index].totalSize-torrents[index].leftUntilDone);data.leecherCount=torrents[index].leecher;data.seederCount=torrents[index].seeder;var labels=this.config.labelMaps[data.hashString];if(labels){data.labels=labels;}
datas.push(data);}
this.updateTorrentCurrentPageDatas(datas);this.initShiftCheck();},initShiftCheck:function(){var items=$('#m_list div.datagrid-cell-check input:checkbox');var eventName="click.Shift";items.off(eventName);var lastChecked=null;var torrentlist=this.control.torrentlist;items.on(eventName,function(e){if(!lastChecked){lastChecked=this;return;}
if(e.shiftKey){var start=items.index(this);var end=items.index(lastChecked);var checked=lastChecked.checked;var startIndex=Math.min(start,end);var endIndex=Math.max(start,end)+1;for(var index=startIndex;index<endIndex;index++){if(checked){torrentlist.datagrid("checkRow",index);}else{torrentlist.datagrid("uncheckRow",index);}}}
lastChecked=this;});},updateTorrentCurrentPageDatas:function(currentTypeDatas){var rows=this.control.torrentlist.datagrid("getRows");if(currentTypeDatas.length==0&&rows.length>0){this.control.torrentlist.datagrid("loadData",[]);return;}
var _options=this.control.torrentlist.datagrid("options");var orderField=null;if(_options.sortName){orderField=_options.sortName;var orderField_func=orderField;currentTypeDatas=currentTypeDatas.sort(arrayObjectSort(orderField_func,_options.sortOrder));}
if(rows.length==0||(currentTypeDatas.length!=this.control.torrentlist.datagrid("getData").total)&&currentTypeDatas.length>_options.pageSize){this.control.torrentlist.datagrid({loadFilter:pagerFilter,pageNumber:_options.pageNumber,sortName:orderField,sortOrder:_options.sortOrder}).datagrid("loadData",currentTypeDatas);return;}
this.control.torrentlist.datagrid("getData").originalRows=currentTypeDatas;var start=(_options.pageNumber-1)*parseInt(_options.pageSize);var end=start+parseInt(_options.pageSize);currentTypeDatas=(currentTypeDatas.slice(start,end));var recently={};var datas={};for(var index in transmission.torrents.recently){var item=transmission.torrents.recently[index];recently[item.id]=true;item=null;}
for(var index in currentTypeDatas){var item=currentTypeDatas[index];datas[item.id]=item;item=null;}
var addedDatas={};for(var index=rows.length-1;index>=0;index--){var item=rows[index];var data=datas[item.id];if(!data){this.control.torrentlist.datagrid("deleteRow",index);}else if(recently[item.id]){this.control.torrentlist.datagrid("updateRow",{index:index,row:data});addedDatas[item.id]=item;}
else if(transmission.torrents.removed){if(transmission.torrents.removed.length>0&&$.inArray(item.id,transmission.torrents.removed)!=-1){this.control.torrentlist.datagrid("deleteRow",index);}else{addedDatas[item.id]=item;}}else{addedDatas[item.id]=item;}
item=null;data=null;}
for(var index in currentTypeDatas){var item=currentTypeDatas[index];if(!addedDatas[item.id]){this.control.torrentlist.datagrid("appendRow",item);}}
rows=null;recently=null;datas=null;},getTorrentNameBar:function(torrent){var className="";var tip=torrent.name;switch(torrent.status){case transmission._status.stopped:className="iconlabel icon-pause-small";break;case transmission._status.check:className="iconlabel icon-checking";break;case transmission._status.download:className="iconlabel icon-down";break;case transmission._status.seed:className="iconlabel icon-up";break;case transmission._status.seedwait:case transmission._status.downloadwait:case transmission._status.checkwait:className="iconlabel icon-wait";break;}
tip+="\n"+torrent.downloadDir;if(torrent.warning){className="iconlabel icon-warning-type1";tip+="\n\n"+this.lang["public"]["text-info"]+": "+torrent.warning;}
if(torrent.error!=0){className="iconlabel icon-exclamation";tip+="\n\n"+this.lang["public"]["text-info"]+": "+torrent.errorString;}
return '<span class="'+className+'" title="'+tip+'">'+torrent.name+'</span>';},getTorrentProgressBar:function(progress,torrent){var className="";var status=0;if(typeof(torrent)=="object"){status=torrent.status;}else{status=torrent;}
switch(status){case transmission._status.stopped:className="torrent-progress-stop";break;case transmission._status.checkwait:case transmission._status.check:className="torrent-progress-check";break;case transmission._status.downloadwait:case transmission._status.download:className="torrent-progress-download";break;case transmission._status.seedwait:case transmission._status.seed:className="torrent-progress-seed";break;}
if(typeof(torrent)=="object"){if(torrent.warning){className="torrent-progress-warning";}
if(torrent.error!=0){className="torrent-progress-error";}}
if(status==transmission._status.check){var percentCheckText=parseFloat(torrent.recheckProgress*100).toFixed(2);var percentCheckView=parseFloat(progress*torrent.recheckProgress).toFixed(2);return '<div class="torrent-progress" title="'+progress+'%">'+
'<div class="torrent-progress-text" style="z-index:2;">'+percentCheckText+'%</div>'+
'<div class="torrent-progress-bar torrent-progress-seed" style="width:'+percentCheckView+'%;z-index:1;opacity:0.7;"></div>'+
'<div class="torrent-progress-bar '+className+'" style="width:'+progress+'%;"></div>'+
'</div>';}
progress=progress+"%";return '<div class="torrent-progress" title="'+progress+'"><div class="torrent-progress-text">'+progress+'</div><div class="torrent-progress-bar '+className+'" style="width:'+progress+';"></div></div>';},addTorrentsToServer:function(urls,count,autostart,savepath,labels){var index=count-urls.length;var url=urls.shift();if(!url){this.showStatus(this.lang.system.status.queuefinish);this.getServerStatus();if(labels!=null)
system.saveConfig();return;}
this.showStatus(this.lang.system.status.queue+(index+1)+"/"+(count)+"<br/>"+url,0);transmission.addTorrentFromUrl(url,savepath,autostart,function(data){system.addTorrentsToServer(urls,count,autostart,savepath,labels);if(labels!=null&&data.hashString!=null)
system.saveLabelsConfig(data.hashString,labels);});},changeSelectedTorrentStatus:function(status,button,method){var rows=this.control.torrentlist.datagrid("getChecked");var ids=new Array();if(!status){status="start";}
for(var i in rows){ids.push(rows[i].id);}
if(!method){method="torrent-"+status;}
if(ids.length>0){if(button){var icon=button.linkbutton("options").iconCls;button.linkbutton({disabled:true,iconCls:"icon-loading"});}
transmission.exec({method:method,arguments:{ids:ids}},function(data){if(button){button.linkbutton({iconCls:icon});}
system.control.torrentlist.datagrid("uncheckAll");system.reloadTorrentBaseInfos();});}},getTorrentMagnetLink:function(callback){var rows=this.control.torrentlist.datagrid("getChecked");var ids=new Array();for(var i in rows){ids.push(rows[i].id);}
transmission.torrents.getMagnetLink(ids,callback);},searchTorrents:function(key){if(key==""){return;}
var result=transmission.torrents.search(key);if(result==null||result.length==0){this.removeTreeNode("search-result");return;}
var node=this.panel.left.tree("find","search-result");var text=this.lang.tree["search-result"]+" : "+key+" ("+result.length+")";if(node==null){this.appendTreeNode("torrent-all",[{id:"search-result",text:text,iconCls:"iconfont tr-icon-search"}]);node=this.panel.left.tree("find","search-result");}else{this.panel.left.tree("update",{target:node.target,text:text});}
this.panel.left.tree("select",node.target);},getTorrentInfos:function(id){if(!transmission.torrents.all[id])return;if(transmission.torrents.all[id].infoIsLoading)return;if(this.currentTorrentId>0&&transmission.torrents.all[this.currentTorrentId]){if(transmission.torrents.all[this.currentTorrentId].infoIsLoading)return;}
this.currentTorrentId=id;if(!this.panel.attribute.panel("options").collapsed){var torrent=transmission.torrents.all[id];torrent.infoIsLoading=true;var fields="fileStats,trackerStats,peers,leftUntilDone,status,rateDownload,rateUpload,uploadedEver,uploadRatio,error,errorString,pieces,pieceCount,pieceSize";if(!torrent.moreInfosTag){fields+=",files,trackers,comment,dateCreated,creator,downloadDir";}
transmission.torrents.getMoreInfos(fields,id,function(result){torrent.infoIsLoading=false;if(result==null)return;jQuery.extend(torrent,result[0]);if(system.currentTorrentId==0||system.currentTorrentId!=id){system.clearTorrentAttribute();return;}
torrent.completeSize=(torrent.totalSize-torrent.leftUntilDone);if(("files"in torrent)&&torrent.files.length>0){torrent.moreInfosTag=true;}
system.fillTorrentBaseInfos(torrent);system.fillTorrentFileList(torrent);system.fillTorrentServerList(torrent);system.fillTorrentPeersList(torrent);system.fillTorrentConfig(torrent);transmission.torrents.all[id]=torrent;transmission.torrents.datas[id]=torrent;});}},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(keyField,datas,sourceTable){var rows=sourceTable.datagrid("getRows");var _options=sourceTable.datagrid("options");var orderField=null;if(_options.sortName){orderField=_options.sortName;datas=datas.sort(arrayObjectSort(orderField,_options.sortOrder));}
var isFileTable=(sourceTable.selector.indexOf("#torrent-files-table")!=-1);var tableData=sourceTable.datagrid("getData");var isFileFilterMode=isFileTable&&!!tableData.filterString&&tableData.torrentId==system.currentTorrentId;if(isFileFilterMode){datas=fileFilter(datas,tableData.filterString);}
if(isFileFilterMode==false&&(rows.length==0||(datas.length!=tableData.total))){sourceTable.datagrid({loadFilter:pagerFilter,pageNumber:1,sortName:orderField,sortOrder:_options.sortOrder}).datagrid("loadData",datas);return;}
sourceTable.datagrid("getData").originalRows=datas;var start=(_options.pageNumber-1)*parseInt(_options.pageSize);var end=start+parseInt(_options.pageSize);datas=(datas.slice(start,end));var newDatas={};for(var index in datas){var item=datas[index];newDatas[item[keyField]]=item;item=null;}
for(var index=rows.length-1;index>=0;index--){var item=rows[index];var data=newDatas[item[keyField]];if(data){sourceTable.datagrid("updateRow",{index:index,row:data});}else{sourceTable.datagrid("deleteRow",index);}
data=null;item=null;}},fillTorrentBaseInfos:function(torrent){$.each(torrent,function(key,value){switch(key){case "rateDownload":case "rateUpload":value=formatSize(value,true,"speed");break;case "totalSize":case "uploadedEver":case "leftUntilDone":case "completeSize":value=formatSize(value);break;case "addedDate":case "dateCreated":case "doneDate":value=formatLongTime(value);break;case "status":value=system.lang.torrent["status-text"][value];break;case "error":if(value==0){system.panel.attribute.find("#torrent-attribute-tr-error").hide();}else{system.panel.attribute.find("#torrent-attribute-tr-error").show();}
break;case "remainingTime":if(value>=3153600000000){value="∞";}else{value=getTotalTime(value);}
break;case "comment":value=system.replaceURI(value);break;}
system.panel.attribute.find("#torrent-attribute-value-"+key).html(value);});var pieces=new Base64().decode_bytes(torrent.pieces);var piece=0;var pieceCount=torrent.pieceCount;var pieceSize=torrent.pieceSize;var piecesFlag=[];while(piece<pieceCount){var bset=pieces.codePointAt(piece>>3);for(var test=0x80;test>0&&piece<pieceCount;test=test>>1,++piece){piecesFlag.push((bset&test)?false:true);}}
var MAXCELLS=500;var piecePerCell=parseInt((MAXCELLS-1+pieceCount)/MAXCELLS);var cellSize=formatSize(pieceSize*piecePerCell);var cellCount=parseInt((piecePerCell-1+pieceCount)/piecePerCell);var cell=0;var cells='';for(var cell=0,piece=0;cell<cellCount;++cell){var done=piecePerCell;for(var i=0;i<piecePerCell;++i,++piece){if(piecesFlag[piece])--done;}
var percent=parseInt(done*100/piecePerCell);var rate=percent/100;var ramp=parseInt((Math.pow(128,rate)-1)*100/127)/100;cells+=('<i style="filter:saturate('+ramp+')" title="'+cellSize+' x '+percent+'%"></i>');}
system.panel.attribute.find("#torrent-attribute-pieces").html(cells);},fillTorrentFileList:function(torrent){var files=torrent.files;var fileStats=torrent.fileStats;var datas=new Array();var namelength=torrent.name.length+1;for(var index in files){var file=files[index];var stats=fileStats[index];var percentDone=parseFloat(stats.bytesCompleted/file.length*100).toFixed(2);datas.push({name:(file.name==torrent.name?file.name:file.name.substr(namelength)),index:index,bytesCompleted:stats.bytesCompleted,percentDone:system.getTorrentProgressBar(percentDone,transmission._status.download),length:file.length,wanted:system.lang.torrent.attribute["status"][stats.wanted],priority:'<span class="iconlabel icon-flag-'+stats.priority+'">'+system.lang.torrent.attribute["priority"][stats.priority]+'</span>'});}
this.updateCurrentPageDatas("index",datas,system.panel.attribute.find("#torrent-files-table"));},fillTorrentServerList:function(torrent){var trackerStats=torrent.trackerStats;var datas=new Array();for(var index in trackerStats){var stats=trackerStats[index];var rowdata={};for(var key in stats){switch(key){case "downloadCount":case "leecherCount":case "seederCount":rowdata[key]=(stats[key]==-1?system.lang["public"]["text-unknown"]:stats[key]);break;case "announceState":rowdata[key]=system.lang.torrent.attribute["servers-fields"]["announceStateText"][stats[key]];break;case "lastAnnounceTime":case "nextAnnounceTime":rowdata[key]=formatLongTime(stats[key]);break;case "lastAnnounceSucceeded":case "lastAnnounceTimedOut":rowdata[key]=system.lang.torrent.attribute["status"][stats[key]];break;default:rowdata[key]=stats[key];break;}}
datas.push(rowdata);}
transmission.torrents.addTracker(torrent);this.updateCurrentPageDatas("id",datas,system.panel.attribute.find("#torrent-servers-table"));},fillTorrentPeersList:function(torrent){var peers=torrent.peers;var datas=new Array();let flag;for(var index in peers){var item=peers[index];var rowdata={};for(var key in item){rowdata[key]=item[key];}
if(system.config.ipInfoToken!==''){let flag='';let ip=rowdata['address'];if(this.flags[ip]===undefined){let url='https://ipinfo.io/'+ip+'/country?token='+system.config.ipInfoToken,$.get("https://ipinfo.io?token=$TOKEN",function(response){flag=response.toLowerCase().trim();},"jsonp")
this.flags[ip]=flag;}else{flag=this.flags[ip];}
rowdata['address']='<img src="'+this.rootPath+'/style/flags/'+flag+'.png" alt="'+flag+'" title="'+flag+'"> '+ip;}
rowdata.isUTP=system.lang.torrent.attribute["status"][item.isUTP];var percentDone=parseFloat(item.progress*100).toFixed(2);rowdata.progress=system.getTorrentProgressBar(percentDone,transmission._status.download)
datas.push(rowdata);}
this.updateCurrentPageDatas("address",datas,system.panel.attribute.find("#torrent-peers-table"));},fillTorrentConfig:function(torrent){if(system.panel.attribute.find("#torrent-attribute-tabs").data("selectedIndex")!=4){return;}
transmission.torrents.getConfig(torrent.id,function(result){if(result==null)return;var torrent=transmission.torrents.all[system.currentTorrentId];jQuery.extend(torrent,result[0]);if(system.currentTorrentId==0)return;$.each(result[0],function(key,value){var indeterminate=false;var checked=false;var useTag=false;switch(key){case "seedIdleMode":case "seedRatioMode":if(value==0){checked=false;indeterminate=true;}
useTag=true;case "downloadLimited":case "uploadLimited":if(value==true||value==1){checked=true;}
system.panel.attribute.find("input[enabledof='"+key+"']").prop("disabled",!checked);if(useTag){system.panel.attribute.find("#"+key).prop("indeterminate",indeterminate).data("_tag",value)}
system.panel.attribute.find("#"+key).prop("checked",checked);break;default:system.panel.attribute.find("#"+key).val(value);system.panel.attribute.find("#"+key).numberspinner("setValue",value);break;}});});},setFieldFormat:function(field){if(field.formatter){switch(field.formatter){case "size":field.formatter=function(value,row,index){return formatSize(value);};break;case "speed":field.formatter=function(value,row,index){return formatSize(value,true,"speed");};break;case "longtime":field.formatter=function(value,row,index){return formatLongTime(value);};break;case "progress":field.formatter=function(value,row,index){var percentDone=parseFloat(value*100).toFixed(2);return system.getTorrentProgressBar(percentDone,transmission.torrents.all[row["id"]]);};break;case "_usename_":switch(field.field){case "name":field.formatter=function(value,row,index){return system.getTorrentNameBar(transmission.torrents.all[row["id"]]);};break;}
break;case "ratio":field.formatter=function(value,row,index){var className='';if(parseFloat(value)<1&&value!=-1){className='text-status-warning';}
return '<span class="'+className+'">'+(value==-1?"∞":value)+'</span>';};break;case "remainingTime":field.formatter=function(value,row,index){if(value>=3153600000000){return "∞";}
return getTotalTime(value);};break;case "labels":field.formatter=function(value,row,index){return system.formetTorrentLabels(value,row.hashString);}
break;case "color":field.formatter=function(value,row,index){var box=$("<span class='user-label'/>").html(value).css({"background-color":value,"color":(getGrayLevel(value)>0.5?"#000":"#fff")});return box.get(0).outerHTML;}
break;}}},reloadData:function(){if(this.popoverCount>0){setTimeout(function(){system.reloadData();},2000);return;}
this.reloadSession();this.reloading=false;this.getServerStatus();this.reloading=false;this.reloadTorrentBaseInfos();},loadFolderList:function(oldFolders){this.removeTreeNode("folders-loading");for(var index in oldFolders){var item=oldFolders[index];if(item){system.removeTreeNode(item.nodeid);}}
if(transmission.downloadDirs.length==0){return;}
timedChunk(transmission.downloadDirs,this.appendFolder,this,10,function(){if($.ua.browser.name=="Firefox"&&$.ua.browser.major<60){system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"});}
system.initUIStatus();});},appendFolder:function(fullkey){if(!fullkey)return;var rootkey="folders";var parentkey=rootkey;var folder=fullkey.replace(/\\/g,"/").split("/");var key=rootkey+"-";var path="";for(var i in folder){var name=folder[i];if(name==""){continue;}
path+=name;var _key=this.B64.encode(name);key+=_key.replace(/[+|\/|=]/g,"0");var node=this.panel.left.tree("find",key);var folderinfos=transmission.torrents.folders[key];if(folderinfos){var text=name+this.showNodeMoreInfos(folderinfos.count,folderinfos.size);if(!node){this.appendTreeNode(parentkey,[{id:key,path:path,downDir:fullkey,text:text,iconCls:"iconfont tr-icon-file"}]);if(parentkey!=rootkey){node=this.panel.left.tree("find",parentkey);this.panel.left.tree("collapse",node.target);}}else{this.updateTreeNodeText(key,text);}
parentkey=key;}else{this.debug("appendFolder:key",key);this.debug("appendFolder:name",name);this.debug("appendFolder:node",node);}}},replaceURI:function(text){var reg=/(http|https|ftp):\/\/([^/:]+)(:\d*)?([^# ]*)/ig;return text.replace(reg,function(url){return '<a href="'+url+'" target="_blank">'+url+'</a>';});},readConfig:function(){this.readUserConfig();var config=this.getStorageData(this.configHead+'.system');if(config){this.config=$.extend(true,this.config,JSON.parse(config));}
for(var key in this.storageKeys.dictionary){this.dictionary[key]=this.getStorageData(this.storageKeys.dictionary[key]);}},saveConfig:function(){this.setStorageData(this.configHead+'.system',JSON.stringify(this.config));for(var key in this.storageKeys.dictionary){this.setStorageData(this.storageKeys.dictionary[key],this.dictionary[key]);}
this.saveUserConfig();},saveLabelsConfig:function(hash,labels){if(system.config.nav.labels){if(labels.length==0){delete system.config.labelMaps[hash];}else{system.config.labelMaps[hash]=labels;}}},readUserConfig:function(){var local=window.localStorage[this.configHead];if(local){var localOptions=JSON.parse(local);this.userConfig=$.extend(true,this.userConfig,localOptions);}},saveUserConfig:function(){window.localStorage[this.configHead]=JSON.stringify(this.userConfig);},uploadTorrentFile:function(fileInputId,savePath,paused,callback){if(window.FileReader){var files=$("input[id='"+fileInputId+"']")[0].files;$.each(files,function(index,file){transmission.addTorrentFromFile(file,savePath,paused,callback,files.length);});}else{alert(system.lang["public"]["text-browsers-not-support-features"]);}},checkUpdate:function(){$.ajax({url:this.checkUpdateScript,dataType:"json",success:function(result){if(result&&result.tag_name){var update=result.created_at.substr(0,10).replace(/-/g,"");var version=result.tag_name;if($.inArray(version,system.config.ignoreVersion)!=-1){return;}
if(system.codeupdate<update){$("#area-update-infos").show();$("#msg-updateInfos").html(update+" -> "+result.name);var content=$("<div/>");var html=result.body.replace(/\r\n/g,"<br/>");var toolbar=$("<div style='text-align:right;'/>").appendTo(content);$('<a href="https://github.com/ronggang/transmission-web-control/releases/latest" target="_blank" class="easyui-linkbutton" data-options="iconCls:\'iconfont tr-icon-github\'"/>').html(result.name+" ("+update+")").appendTo(toolbar).linkbutton();$("<span/>").html(" ").appendTo(toolbar);$('<a href="https://github.com/ronggang/transmission-web-control/wiki" target="_blank" class="easyui-linkbutton" data-options="iconCls:\'iconfont tr-icon-help\'"/>').html(system.lang["public"]["text-how-to-update"]).appendTo(toolbar).linkbutton();$("<span/>").html(" ").appendTo(toolbar);$('<button onclick="javascript:system.addIgnoreVersion(\''+version+'\');" class="easyui-linkbutton" data-options="iconCls:\'iconfont tr-icon-cancel-checked\'"/>').html(system.lang["public"]["text-ignore-this-version"]).appendTo(toolbar).linkbutton();$("<hr/>").appendTo(content);$("<div/>").html(html).appendTo(content);$('#button-download-update').webuiPopover({content:content.html(),backdrop:true});}else{$("#area-update-infos").hide();}}}});},addIgnoreVersion:function(version){if($.inArray(version,system.config.ignoreVersion)==-1){this.config.ignoreVersion.push(version);this.saveConfig();}
$('#button-download-update').webuiPopover("hide");$("#area-update-infos").hide();},changeLanguages:function(lang){if(lang==this.lang.name||!lang)return;this.config.defaultLang=lang;this.saveConfig();location.href="?lang="+lang;},getStorageData:function(key,defaultValue){return(window.localStorage[key]==null?defaultValue:window.localStorage[key]);},setStorageData:function(key,value){window.localStorage[key]=value;},openDialogFromTemplate:function(config){var defaultConfig={id:null,options:null,datas:null,type:0};config=$.extend(true,defaultConfig,config);if(config.id==null)return;var dialogId=config.id;var options=config.options;var datas=config.datas;var dialog=$("#"+dialogId);if(dialog.length){if(datas){$.each(datas,function(key,value){dialog.data(key,value);});}
if(config.type==0&&dialog.attr("type")==config.type){dialog.dialog("open");dialog.dialog({content:system.templates[dialogId]});return;}else{if(system.popoverCount!=0){setTimeout(function(){system.openDialogFromTemplate(config);},350);return;}
dialog.remove();}}
var defaultOptions={title:"",width:100,height:100,resizable:false,cache:true,content:system.lang.dialog["system-config"].loading,modal:true};options=$.extend(true,defaultOptions,options);dialog=$("<div/>").attr({"id":dialogId,"type":config.type}).appendTo(document.body);if(config.type==0){dialog.dialog(options);}else{dialog.css({width:options.width,height:options.height}).data("popoverSource",config.source);$(config.source).webuiPopover({url:'#'+dialogId,title:options.title,width:options.width,height:options.height-18,padding:false,onHide:function(e){$(config.source).webuiPopover("destroy");$("#"+dialogId).remove();$(e).remove();system.popoverCount--;if(config.onClose){config.onClose(config.source);}},onShow:function(){system.popoverCount++;}});}
$.get(system.rootPath+"template/"+dialogId+".html?time="+(new Date()),function(data){system.templates[dialogId]=data;if(datas){$.each(datas,function(key,value){$("#"+dialogId).data(key,value);});}
if(config.type==0){$("#"+dialogId).dialog({content:data});}else{dialog.html(data);$.parser.parse("#"+dialogId);$(config.source).webuiPopover("show");}});},debug:function(label,text){if(window.console){if(window.console.log){window.console.log(label,text);}}},initThemes:function(){if(this.themes){$('#select-themes').combobox({groupField:'group',data:this.themes,editable:false,panelHeight:'auto',onChange:function(value){var values=(value+";").split(";");var theme=values[0];var logo=values[1]||"logo.png";$("#styleEasyui").attr('href','tr-web-control/script/easyui/themes/'+theme+'/easyui.css');$("#logo").attr("src","tr-web-control/"+logo);system.config.theme=value;system.saveConfig();},onLoadSuccess:function(){$(this).combobox('setValue',system.config.theme||"default");}});}},getValidTreeKey:function(text){if(!text)return "";var _key=this.B64.encode(text);return _key.replace(/[+|\/|=]/g,"0");}};$(document).ready(function(){$.getJSON(system.rootPath+"i18n/en.json").done(function(result){system.defaultLang=result;});$.getJSON(system.rootPath+"i18n.json").done(function(result){system.languages=result;system.init(location.search.getQueryString("lang"),location.search.getQueryString("local"));});});function fileFilter(dataRows,filterString){var filter=new RegExp(filterString||".*");var rawDataFiltered=new Array;for(var j=0;j<dataRows.length;++j){if(filter.test(dataRows[j].name)){rawDataFiltered.push(dataRows[j]);}}
return rawDataFiltered;}
function restoreFileFilterInputbox(defaultFilter){var langText=system.lang.torrent.attribute["filter-template-text"];var filterTemplate=[{"id":1,"text":langText?langText["1"]:"All","desc":".*"},{"id":2,"text":langText?langText["2"]:"BitComet padding file","desc":"____padding_file"},{"id":3,"text":langText?langText["3"]:"Unnecessary files","desc":"(.*\\.(url|lnk)$)|(RARBG_DO_NOT_MIRROR\\.exe)|(____padding_file)"}];$('<input id="torrent-files-filter-string" style="width:300px;">').insertAfter("#torrent-files-filter").combobox({valueField:'desc',textField:'desc',panelWidth:400,panelHeight:'auto',formatter:function(row){var s='<span style="font-weight:bold; padding:3px;">'+row.text+'</span><br/>'+
'<span style="padding-left:10px;">'+row.desc+'</span>';return s;}}).combobox("loadData",filterTemplate).combobox("setValue",defaultFilter);}
function pagerFilter(data){var isFileData=false;var filterChanged=false;if(typeof data.length=='number'&&typeof data.splice=='function'){data={total:data.length,rows:data}}
isFileData=this.id=="torrent-files-table";if(isFileData){var fileFilterString=$("#torrent-files-filter-string").val();filterChanged=((data.filterString!==fileFilterString)||(data.filterString&&data.originalRows.length==data.unfilteredRows.length));if(filterChanged){data.torrentId=system.currentTorrentId;var rawData=(data.unfilteredRows)||(data.originalRows)||(data.rows);var rawDataFiltered=fileFilter(rawData,fileFilterString);data.originalRows=rawDataFiltered;data.total=rawDataFiltered.length;if(!data.unfilteredRows){data.unfilteredRows=(rawData);}
data.filterString=fileFilterString;}}
var dg=$(this);var opts=dg.datagrid('options');var pager=dg.datagrid('getPager');var buttons=dg.data("buttons");pager.pagination({onSelectPage:function(pageNum,pageSize){opts.pageNumber=pageNum;opts.pageSize=pageSize;pager.pagination('refresh',{pageNumber:pageNum,pageSize:pageSize});dg.datagrid('loadData',data);},buttons:buttons});if(!data.originalRows){data.originalRows=(data.rows);}
var start=filterChanged?0:(opts.pageNumber-1)*parseInt(opts.pageSize);var end=start+parseInt(opts.pageSize);data.rows=(data.originalRows.slice(start,end));if(buttons&&buttons.length){for(var i=0;i<buttons.length;i++){var button=buttons[i];if(button.id&&button.title){$("#"+button.id,pager).attr("title",button.title);}}}
if(isFileData){restoreFileFilterInputbox(fileFilterString);}
return data;}
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e<d;e++){var f=a[e];if(b.call(c,f,e,a))return{i:e,v:f}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};
$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(a,b,c,d){if(b){c=$jscomp.global;a=a.split(".");for(d=0;d<a.length-1;d++){var e=a[d];e in c||(c[e]={});c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};
$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,c){return $jscomp.findInternal(this,a,c).v}},"es6","es3");$jscomp.checkStringArgs=function(a,b,c){if(null==a)throw new TypeError("The 'this' value for String.prototype."+c+" must not be null or undefined");if(b instanceof RegExp)throw new TypeError("First argument to String.prototype."+c+" must not be a regular expression");return a+""};
$jscomp.polyfill("String.prototype.codePointAt",function(a){return a?a:function(a){var b=$jscomp.checkStringArgs(this,null,"codePointAt"),d=b.length;a=Number(a)||0;if(0<=a&&a<d){a|=0;var e=b.charCodeAt(a);if(55296>e||56319<e||a+1===d)return e;a=b.charCodeAt(a+1);return 56320>a||57343<a?e:1024*(e-55296)+a+9216}}},"es6","es3");
var system={version:"1.6.1",rootPath:"tr-web-control/",codeupdate:"20200913",configHead:"transmission-web-control",config:{autoReload:!0,reloadStep:5E3,pageSize:30,pagination:!0,pageList:[10,20,30,40,50,100,150,200,250,300,5E3],defaultSelectNode:null,autoExpandAttribute:!1,defaultLang:"",foldersShow:!1,theme:"default",showBTServers:!1,ipInfoToken:"",ui:{status:{tree:{},layout:{main:{},body:{},left:{}},panel:{},size:{nav:{},attribute:{}}}},hideSubfolders:!1,simpleCheckMode:!1,nav:{servers:!0,folders:!0,
statistics:!0,labels:!1},labels:[],labelMaps:{},ignoreVersion:[]},storageKeys:{dictionary:{folders:"dictionary.folders"}},dictionary:{folders:null},checkUpdateScript:"https://api.github.com/repos/ronggang/transmission-web-control/releases/latest",contextMenus:{},panel:null,lang:null,reloading:!1,autoReloadTimer:null,downloadDir:"",islocal:!1,B64:new Base64,currentTorrentId:0,flags:[],control:{tree:null,torrentlist:null},userConfig:{torrentList:{fields:[],sortName:null,sortOrder:"asc"}},serverConfig:null,
serverSessionStats:null,templates:{},checkedRows:[],uiIsInitialized:!1,popoverCount:0,currentListDir:"",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");a=a.replace("-","_");$.getJSON(system.rootPath+"i18n/"+a+".json",function(c){c&&(system.lang=$.extend(!0,system.defaultLang,c));system.resetLangText();
$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-"+a+".js").done(function(a,c){b&&b()}).fail(function(a,c,f){$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-en.js",function(){b&&b()})})})},init:function(a,b,c){this.readConfig();this.lastUIStatus=JSON.parse(JSON.stringify(this.config.ui.status));this.islocal=1==b?!0:!1;this.panel={main:$("#main"),top:$("#m_top"),toolbar:$("#m_toolbar"),left_layout:$("#m_left_layout"),left:$("#m_left"),body:$("#m_body"),layout_body:$("#layout_body"),
layout_left:$("#layout_left"),list:$("#m_list"),attribute:$("#m_attribute"),bottom:$("#m_bottom"),title:$("#m_title"),status:$("#m_status"),statusbar:$("#m_statusbar"),status_text:$("#status_text"),droparea:$("#dropArea")};null==this.lang?this.setlang(a,function(){system.initdata()}):this.initdata();this.initThemes();this.clipboard=new ClipboardJS("#toolbar_copyPath")},resetLangText:function(a){a||(a=$);var b=a.find("*[system-lang]");$.each(b,function(a,b){a=$(b).attr("system-lang");"["==a.substr(0,
1)?$(b).html(eval("system.lang"+a)):$(b).html(eval("system.lang."+a))});b=a.find("*[system-tip-lang]");$.each(b,function(a,b){a=$(b).attr("system-tip-lang");"["==a.substr(0,1)?$(b).attr("title",eval("system.lang"+a)):$(b).attr("title",eval("system.lang."+a))})},initdata:function(){$(document).attr("title",this.lang.system.title+" "+this.version);$.fn.switchbutton.defaults.onText=this.lang["public"]["text-on"];$.fn.switchbutton.defaults.offText=this.lang["public"]["text-off"];var a=[],b="\x3cspan\x3e"+
this.lang.title.left+"\x3c/span\x3e";if(1<a.length){b+=a.join("");this.panel.left_layout.panel("setTitle",b);for(var c in this.lang.tree.toolbar.nav)switch($("#tree-toolbar-nav-"+c).linkbutton(),c){case "folders":system.config.foldersShow?$("tree-toolbar-nav-"+c).linkbutton({iconCls:"icon-enabled"}).data("status",1):$("tree-toolbar-nav-"+c).linkbutton({iconCls:"icon-disabled"}).data("status",0)}}else this.panel.left_layout.panel("setTitle",b);b="\x3cspan\x3e"+this.lang.title.list+"\x3c/span\x3e";
a.length=0;if(1<a.length)for(c in b+=a.join(""),this.panel.body.panel("setTitle",b),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){$("\x3coption/\x3e").text(b).val(a).attr("selected",a==system.lang.name?!0:!1).appendTo(system.panel.top.find("#lang"))});
this.panel.top.find("#lang").change(function(){location.href="?lang\x3d"+this.value});this.panel.toolbar.attr("class","panel-header");this.initTree();this.initToolbar();this.initStatusBar();this.initTorrentTable();this.connect();this.initEvent();this.checkUpdate()},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"]);$("#button-cancel-checked").on("click",function(){system.control.torrentlist.datagrid("uncheckAll")});this.panel.left.tree({onExpand:function(a){system.config.ui.status.tree[a.id]=a.state;system.saveConfig()},onCollapse:function(a){system.config.ui.status.tree[a.id]=a.state;system.saveConfig()}});this.panel.layout_body.layout({onExpand:function(a){system.config.ui.status.layout.body[a]="open";system.saveConfig()},onCollapse:function(a){system.config.ui.status.layout.body[a]=
"closed";system.saveConfig()}});this.panel.layout_left.layout({onExpand:function(a){system.config.ui.status.layout.left[a]="open";system.saveConfig()},onCollapse:function(a){system.config.ui.status.layout.left[a]="closed";system.saveConfig()}});this.panel.main.layout({onExpand:function(a){system.config.ui.status.layout.main[a]="open";system.saveConfig()},onCollapse:function(a){system.config.ui.status.layout.main[a]="closed";system.saveConfig()}})},layoutResize:function(a,b){system.uiIsInitialized&&
system.config.ui.status.size[a]&&(system.config.ui.status.size[a]=b,system.saveConfig())},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");this.config.foldersShow=1==c?!1:!0;break;case "tree-toolbar-nav-statistics":d=this.panel.left.tree("find","statistics");break;case "torrent-head-buttons-autoExpandAttribute":d={target:null},this.config.autoExpandAttribute=1==c?!1:!0}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=[],c=0;c<a.length;c++){var d=a[c];"torrent"==d.name.split(".").pop().toLowerCase()&&b.push(d)}0<b.length&&system.openDialogFromTemplate({id:"dialog-torrent-addfile",options:{title:system.lang.toolbar["add-torrent"],width:620,height:system.config.nav.labels?500:300,resizable:!0},datas:{files:b}})}},
initTree:function(){var a=[{id:"torrent-all",iconCls:"iconfont tr-icon-home",text:this.lang.tree.all+" ("+this.lang.tree.status.loading+")",children:[{id:"downloading",text:this.lang.tree.downloading,iconCls:"iconfont tr-icon-download"},{id:"paused",text:this.lang.tree.paused,iconCls:"iconfont tr-icon-pause2"},{id:"sending",text:this.lang.tree.sending,iconCls:"iconfont tr-icon-upload"},{id:"check",text:this.lang.tree.check,iconCls:"iconfont tr-icon-data-check"},{id:"actively",text:this.lang.tree.actively,
iconCls:"iconfont tr-icon-actively"},{id:"error",text:this.lang.tree.error,iconCls:"iconfont tr-icon-errors"},{id:"warning",text:this.lang.tree.warning,iconCls:"iconfont tr-icon-warning"}]}],b={servers:{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"iconfont tr-icon-servers",children:[{id:"servers-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},folders:{id:"folders",text:this.lang.tree.folders,iconCls:"iconfont tr-icon-folder",state:"closed",children:[{id:"folders-loading",
text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},statistics:{id:"statistics",text:this.lang.tree.statistics.title,state:"closed",iconCls:"iconfont tr-icon-shuju",children:[{id:"cumulative-stats",text:this.lang.tree.statistics.cumulative,iconCls:"iconfont tr-icon-folder",children:[{id:"uploadedBytes",text:this.lang.tree.statistics.uploadedBytes,iconCls:"iconfont tr-icon-empty"},{id:"downloadedBytes",text:this.lang.tree.statistics.downloadedBytes,iconCls:"iconfont tr-icon-empty"},{id:"filesAdded",
text:this.lang.tree.statistics.filesAdded,iconCls:"iconfont tr-icon-empty"},{id:"sessionCount",text:this.lang.tree.statistics.sessionCount,iconCls:"iconfont tr-icon-empty"},{id:"secondsActive",text:this.lang.tree.statistics.secondsActive,iconCls:"iconfont tr-icon-empty"}]},{id:"current-stats",text:this.lang.tree.statistics.current,iconCls:"iconfont tr-icon-folder",children:[{id:"current-uploadedBytes",text:this.lang.tree.statistics.uploadedBytes,iconCls:"iconfont tr-icon-empty"},{id:"current-downloadedBytes",
text:this.lang.tree.statistics.downloadedBytes,iconCls:"iconfont tr-icon-empty"},{id:"current-filesAdded",text:this.lang.tree.statistics.filesAdded,iconCls:"iconfont tr-icon-empty"},{id:"current-sessionCount",text:this.lang.tree.statistics.sessionCount,iconCls:"iconfont tr-icon-empty"},{id:"current-secondsActive",text:this.lang.tree.statistics.secondsActive,iconCls:"iconfont tr-icon-empty"}]}]},labels:{id:"labels",text:this.lang.tree.labels,iconCls:"iconfont tr-icon-labels"}},c;for(c in this.config.nav){var d=
this.config.nav[c],e=b[c];e&&d&&a.push(e)}this.panel.left.tree({data:a,onSelect:function(a){system.loadTorrentToList({node:a});system.currentListDir=a.downDir},lines:!0})},initUIStatus:function(){if(!this.uiIsInitialized){system.uiIsInitialized=!0;var a=this.lastUIStatus.tree,b;for(b in a){var c=this.panel.left.tree("find",b);c&&c.target&&("open"==a[b]?this.panel.left.tree("expand",c.target):this.panel.left.tree("collapse",c.target))}if(this.config.defaultSelectNode){c=this.panel.left.tree("find",
this.config.defaultSelectNode);if(!c||!this.config.foldersShow&&-1!=this.config.defaultSelectNode.indexOf("folders"))c=this.panel.left.tree("find","torrent-all");this.panel.left.tree("select",c.target)}this.lastUIStatus.size.nav&&this.lastUIStatus.size.nav.width&&(this.panel.main.layout("panel","west").panel("resize",{width:this.lastUIStatus.size.nav.width+5}),this.panel.main.layout("resize"));this.lastUIStatus.size.attribute&&this.lastUIStatus.size.attribute.height&&(this.panel.layout_body.layout("panel",
"south").panel("resize",{height:this.lastUIStatus.size.attribute.height}),this.panel.layout_body.layout("resize"));a=this.lastUIStatus.layout.body;for(b in a)"open"==a[b]?this.panel.layout_body.layout("expand",b):this.panel.layout_body.layout("collapse",b);a=this.lastUIStatus.layout.left;for(b in a)"open"==a[b]?this.panel.layout_left.layout("expand",b):this.panel.layout_left.layout("collapse",b);a=this.lastUIStatus.layout.main;for(b in a)"open"==a[b]?this.panel.main.layout("expand",b):this.panel.main.layout("collapse",
b)}},initTorrentTable:function(){function a(){b&&$(b).remove();b=$("\x3cdiv/\x3e").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<a.length;c++){var f=a[c],g=system.control.torrentlist.datagrid("getColumnOption",f);0!=g.allowCustom&&"false"!=g.allowCustom&&b.menu("appendItem",{text:g.title,name:f,iconCls:g.hidden?"icon-empty":"icon-ok"})}}this.control.torrentlist=$("\x3ctable/\x3e").attr("class","torrent-list").appendTo(this.panel.list);var b=null,c=-1;$.get(system.rootPath+"template/torrent-fields.json?time\x3d"+new Date,function(d){d=d.fields;for(var e=
{},f=0;f<d.length;f++){var g=d[f];e[g.field]=g}0!=system.userConfig.torrentList.fields.length&&(d=$.extend(d,system.userConfig.torrentList.fields));system.userConfig.torrentList.fields=d;for(var h in d)g=d[h],(f=e[g.field])&&f.formatter?g.formatter=f.formatter:g.formatter&&delete g.formatter,f&&f.sortable?g.sortable=f.sortable:g.sortable&&delete g.sortable,g.title=system.lang.torrent.fields[g.field]||g.field,system.setFieldFormat(g);system.control.torrentlist.datagrid({autoRowHeight:!1,pagination:system.config.pagination,
rownumbers:!0,remoteSort:!1,checkOnSelect:!1,pageSize:system.config.pageSize,pageList:system.config.pageList,idField:"id",fit:!0,striped:!0,sortName:system.userConfig.torrentList.sortName,sortOrder:system.userConfig.torrentList.sortOrder,drophead:!0,columns:[d],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&&system.control.torrentlist.datagrid("unselectRow",c);system.getTorrentInfos(b.id);c=a},onUnselect:function(a,b){system.currentTorrentId=0;c=-1},onBeforeLoad:function(a){system.currentTorrentId=0},onSortColumn:function(a,b){var c=system.control.torrentlist.datagrid("getData").originalRows.sort(arrayObjectSort(a,b));system.control.torrentlist.datagrid("loadData",c);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.config.simpleCheckMode&&system.control.torrentlist.datagrid("uncheckAll");0==system.checkedRows.length&&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");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(a,d){b[d.field]=d});this.userConfig.torrentList.fields=[];$.each(a,function(a,d){a=$.extend({},b[d.field]);a.width=d.width;a.hidden=
d.hidden;system.userConfig.torrentList.fields.push(a)})},showContextMenu:function(a,b){var c=this.contextMenus[a];c?c.empty():(c=$("\x3cdiv/\x3e").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".split(" ");this.config.nav.labels&&
(d.push("-"),d.push("setLabels"));a=this.panel.toolbar;for(var e in d){var f=d[e];if("-"==f)$("\x3cdiv class\x3d'menu-sep'\x3e\x3c/div\x3e").appendTo(c);else{var g=a.find("#toolbar_"+f);0<g.length?c.menu("appendItem",{text:g.attr("title"),id:f,iconCls:g.linkbutton("options").iconCls,disabled:g.linkbutton("options").disabled,onclick:function(){system.panel.toolbar.find("#toolbar_"+$(this).attr("id")).click()}}):(g=$("#"+f),0<g.length?c.menu("appendItem",{text:g.attr("title"),id:f,iconCls:g.attr("id").replace("menu-queue-move",
"iconfont tr-icon"),disabled:a.find("#toolbar_queue").linkbutton("options").disabled,onclick:function(){$("#"+$(this).attr("id")).click()}}):(g=this.getContentMenuWithKey(f,c))&&c.menu("appendItem",g));g=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,hideOnUnhover:!1});d=c=null},getContentMenuWithKey:function(a,b){switch(a){case "setLabels":return{id:"setLabels",text:system.lang.menus.setLabels,
iconCls:"iconfont tr-icon-labels",disabled:0==this.checkedRows.length,onclick:function(){var a=system.checkedRows,b=[],e;for(e in a)b.push(a[e].hashString);0!=b.length&&system.openDialogFromTemplate({id:"dialog-torrent-setLabels",options:{title:system.lang.dialog["torrent-setLabels"].title,width:520,height:200},datas:{hashs:b}})}};case "magnetLink":return{id:"magnetLink",text:system.lang.menus.copyMagnetLink,iconCls:"iconfont tr-icon-labels",disabled:0==this.checkedRows.length,onclick:function(){system.getTorrentMagnetLink(function(a){system.copyToClipboard(a);
b.css("display","block")})}}}},formetTorrentLabels:function(a,b){var c=$("\x3cdiv style\x3d'position: relative;'/\x3e");if(a){"string"==typeof a&&(a=a.split(","));for(var d=0;d<a.length;d++){var e=this.config.labels[a[d]];e&&$("\x3cspan class\x3d'user-label'/\x3e").html(e.name).css({"background-color":e.color,color:.5<getGrayLevel(e.color)?"#000":"#fff"}).appendTo(c)}}a=$("\x3cbutton onclick\x3d'javascript:system.setTorrentLabels(this,\""+b+'");\' data-options\x3d"iconCls:\'iconfont tr-icon-labels\',plain:true" class\x3d"easyui-linkbutton user-label-set"/\x3e').appendTo(c);
a.linkbutton();a.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("all"==a)0!=this.control.torrentlist.datagrid("getRows").length&&
($("#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:!0}),this.panel.toolbar.find("#toolbar_queue").menubutton("disable"));else if(0==this.checkedRows.length)$("#toolbar_start, #toolbar_pause, #toolbar_rename, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers,#toolbar_copyPath",
this.panel.toolbar).linkbutton({disabled:!0}),this.panel.toolbar.find("#toolbar_queue").menubutton("disable");else if(1==this.checkedRows.length)switch($("#toolbar_remove, #toolbar_rename, #toolbar_changeDownloadDir,#toolbar_copyPath",this.panel.toolbar).linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_queue").menubutton("enable"),transmission.torrents.all[b.id].status){case transmission._status.stopped:this.panel.toolbar.find("#toolbar_start, #toolbar_recheck").linkbutton({disabled:!1});
this.panel.toolbar.find("#toolbar_pause, #toolbar_morepeers").linkbutton({disabled:!0});break;case transmission._status.check:case transmission._status.checkwait:this.panel.toolbar.find("#toolbar_start, #toolbar_pause, #toolbar_recheck, #toolbar_morepeers").linkbutton({disabled:!0});break;default:this.panel.toolbar.find("#toolbar_start, #toolbar_recheck").linkbutton({disabled:!0}),this.panel.toolbar.find("#toolbar_pause, #toolbar_morepeers").linkbutton({disabled:!1})}else $("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_copyPath",
this.panel.toolbar).linkbutton({disabled:!1}),$("#toolbar_rename, #toolbar_morepeers",this.panel.toolbar).linkbutton({disabled:!0}),this.panel.toolbar.find("#toolbar_queue").menubutton("disable")},showCheckedInStatus:function(){if(0<this.checkedRows.length){this.panel.status_text.empty();this.showStatus(void 0,0);var a=[],b=this.lang.system.status.checked.replace("%n",this.checkedRows.length),c=[];$("\x3cdiv style\x3d'padding: 5px;'/\x3e").html(b).appendTo(this.panel.status_text);for(b=0;b<this.checkedRows.length;b++){var d=
this.checkedRows[b];a.push({value:b,text:b+1+". "+d.name});-1===$.inArray(d.downloadDir,c)&&c.push(d.downloadDir)}$("\x3cdiv/\x3e").appendTo(this.panel.status_text).datalist({data:a});$(".datalist\x3e.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.getElementById("copy_to_clipboard_textarea");
b||(b=document.createElement("textarea"));b.id="copy_to_clipboard_textarea";b.style.display="block";b.value=a;document.body.appendChild(b);b.select();document.execCommand("copy");b.style.display="none"},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:system.config.nav.labels?600: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");0<a.length&&(1==a.length?0<transmission.torrents.all[a[0].id].percentDone?confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this)):system.changeSelectedTorrentStatus("verify",$(this)):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=[],c;for(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:520,height:200,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=[],c;for(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=!1;"iconfont tr-icon-rocket"==a.linkbutton("options").iconCls&&(b=!0);transmission.exec({method:"session-set",arguments:{"alt-speed-enabled":b}},function(c){"success"==c.result&&(system.serverConfig["alt-speed-enabled"]=b,a.linkbutton({iconCls:"iconfont tr-icon-"+
(b?"woniu":"rocket")}),b?$("#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:680,height:500,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"]});this.panel.toolbar.find("#toolbar_copyPath").linkbutton().attr("title",this.lang.toolbar.tip["copy-path-to-clipboard"])},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:"iconfont tr-icon-woniu"}),
$("#status_alt_speed").show()):(system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"iconfont tr-icon-rocket"}),$("#status_alt_speed").hide());system.downloadDir=b["download-dir"];0==transmission.downloadDirs.length&&transmission.downloadDirs.push(system.downloadDir);15<=parseInt(system.serverConfig["rpc-version"])?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){a=-1==a?system.lang["public"]["text-unknown"]:formatSize(a);$("#status_freespace").text(system.lang.dialog["system-config"]["download-dir-free-space"]+" "+a)},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=[],d;for(d in a)b.push(a[d].id);a=transmission.torrents.getErrorIds(b,!0);0<a.length?transmission.torrents.getallids(function(){system.resetTorrentInfos(c)},a):system.resetTorrentInfos(c)},a,b)}},resetTorrentInfos:function(a){this.resetNavTorrentStatus();this.resetNavServers(a);this.resetNavStatistics();this.resetNavFolders(a);this.resetNavLabels();"Firefox"==$.ua.browser.name&&60>$.ua.browser.major&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"})},
resetNavTorrentStatus:function(){var a=this.currentTorrentId;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);if(transmission.torrents.status[transmission._status.seedwait]){var b=system.panel.left.tree("find","sending"),c=system.panel.left.tree("getChildren",b.target),d=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seedwait].length);0<c.length?system.updateTreeNodeText(c[0].id,d):system.appendTreeNode(b,[{id:"seedwait",text:d,iconCls:"iconfont tr-icon-wait"}])}else system.removeTreeNode("seedwait");
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]?(b=system.panel.left.tree("find","check"),c=system.panel.left.tree("getChildren",b.target),d=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.checkwait].length),
0<c.length?system.updateTreeNodeText(c[0].id,d):system.appendTreeNode(b,[{id:"checkwait",text:d,iconCls:"iconfont tr-icon-wait"}])):system.removeTreeNode("checkwait");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]?
(b=system.panel.left.tree("find","downloading"),c=system.panel.left.tree("getChildren",b.target),d=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.downloadwait].length),0<c.length?system.updateTreeNodeText(c[0].id,d):system.appendTreeNode(b,[{id:"downloadwait",text:d,iconCls:"iconfont tr-icon-wait"}])):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));b=system.panel.left.tree("getSelected");null!=b&&(c=system.control.torrentlist.datagrid("options").pageNumber,system.loadTorrentToList({node:b,page:c}));0!=a&&system.control.torrentlist.datagrid("selectRecord",a);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))},resetNavServers:function(a){var b=this.panel.left.tree("find","servers");if(this.config.nav.servers){if(b){var c=b.state;this.removeTreeNode("servers-loading")}else this.appendTreeNode(null,[{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"iconfont tr-icon-servers"}]),
b=this.panel.left.tree("find","servers");var d=this.panel.left.tree("find","btservers"),e=d?d.state:"close";!d&&system.config.showBTServers&&(this.appendTreeNode(b,[{id:"btservers",text:"BT",state:"open",iconCls:"iconfont tr-icon-bt"}]),d=this.panel.left.tree("find","btservers"));for(var f in transmission.trackers){var g=transmission.trackers[f];if(!g.isBT||system.config.showBTServers){var h=system.panel.left.tree("find",g.nodeid),k=g.name+this.showNodeMoreInfos(g.count,g.size);h?system.updateTreeNodeText(g.nodeid,
k,g.connected?"iconfont tr-icon-server":"iconfont tr-icon-server-error"):system.appendTreeNode(g.isBT?d:b,[{id:g.nodeid,text:k,iconCls:g.connected?"iconfont tr-icon-server":"iconfont tr-icon-server-error"}]);a.trackers[g.nodeid]=null}}"closed"==c&&this.panel.left.tree("collapse",b.target);system.config.showBTServers&&d&&"closed"==e&&this.panel.left.tree("collapse",d.target);for(f in a.trackers)(g=a.trackers[f])&&system.removeTreeNode(g.nodeid)}else b&&this.panel.left.tree("remove",b.target)},resetNavStatistics:function(){if(this.config.nav.statistics)$.each(["uploadedBytes",
"downloadedBytes","filesAdded","sessionCount","secondsActive"],function(a,c){switch(c){case "uploadedBytes":case "downloadedBytes":system.updateTreeNodeText(c,system.lang.tree.statistics[c]+" "+formatSize(system.serverSessionStats["cumulative-stats"][c]));system.updateTreeNodeText("current-"+c,system.lang.tree.statistics[c]+" "+formatSize(system.serverSessionStats["current-stats"][c]));break;case "secondsActive":system.updateTreeNodeText(c,system.lang.tree.statistics[c]+" "+getTotalTime(1E3*system.serverSessionStats["cumulative-stats"][c]));
system.updateTreeNodeText("current-"+c,system.lang.tree.statistics[c]+" "+getTotalTime(1E3*system.serverSessionStats["current-stats"][c]));break;default:system.updateTreeNodeText(c,system.lang.tree.statistics[c]+" "+system.serverSessionStats["cumulative-stats"][c]),system.updateTreeNodeText("current-"+c,system.lang.tree.statistics[c]+" "+system.serverSessionStats["current-stats"][c])}});else{var a=this.panel.left.tree("find","statistics");a&&this.panel.left.tree("remove",a.target)}},resetNavFolders:function(a){if(this.config.nav.folders){for(var b in transmission.torrents.folders)a.folders[transmission.torrents.folders[b].nodeid]=
null;this.loadFolderList(a.folders)}else this.initUIStatus(),(a=this.panel.left.tree("find","folders"))&&this.panel.left.tree("remove",a.target)},resetNavLabels:function(a){if(this.config.nav.labels){if(a){var b=this.panel.left.tree("getChildren",this.panel.left.tree("find","labels").target);for(a=0;a<b.length;a++)this.panel.left.tree("remove",b[a].target)}for(a=0;a<this.config.labels.length;a++){b=this.config.labels[a];var c="label-"+this.getValidTreeKey(b.name);d=this.panel.left.tree("find",c);
d||(this.appendTreeNode("labels",[{id:c,text:b.name,labelIndex:a,iconCls:"iconfont tr-icon-label"}]),d=this.panel.left.tree("find",c),$(".tree-icon",d.target).css({color:b.color}),$(".tree-title",d.target).addClass("user-label").css({"background-color":b.color,color:.5<getGrayLevel(b.color)?"#000":"#fff"}))}}else{var d=this.panel.left.tree("find","labels");d&&this.panel.left.tree("remove",d.target)}},showNodeMoreInfos:function(a,b){var c="";0<a&&(c=" \x3cspan class\x3d'nav-torrents-number'\x3e("+
a+")\x3c/span\x3e");0<b&&(c+="\x3cspan class\x3d'nav-total-size'\x3e["+formatSize(b)+"]\x3c/span\x3e");return c},getServerStatus:function(){this.reloading||(clearTimeout(this.autoReloadTimer),this.reloading=!0,transmission.getStatus(function(a){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&&((a=system.panel.left.tree("find","servers"))&&system.panel.left.tree("remove",
a.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();a&&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){if(a=this.panel.left.tree("find",a))b={target:a.target,text:b},void 0!=c&&(b.iconCls=c),this.panel.left.tree("update",
b)},appendTreeNode:function(a,b){(a="string"==typeof a?this.panel.left.tree("find",a):a)?this.panel.left.tree("append",{parent:a.target,data:b}):this.panel.left.tree("append",{data:b})},removeTreeNode:function(a){(a=this.panel.left.tree("find",a))&&this.panel.left.tree("remove",a.target)},loadTorrentToList:function(a){if(transmission.torrents.all&&(jQuery.extend({node:null,page:1},a),a.node)){var b=null,c=this.panel.left.tree("getParent",a.node.target)||{id:""},d=this.panel.left.data("currentNodeId");
d!=a.node.id&&(this.control.torrentlist.datagrid("uncheckAll"),this.control.torrentlist.datagrid({pageNumber:1}),d=a.node.id);this.panel.left.data("currentNodeId",d);switch(c.id){case "servers":case "btservers":b="btservers"==a.node.id?transmission.torrents.btItems:transmission.trackers[a.node.id].torrents;break;default:switch(a.node.id){case "torrent-all":case "servers":b=transmission.torrents.all;break;case "paused":b=transmission.torrents.status[transmission._status.stopped];break;case "sending":b=
transmission.torrents.status[transmission._status.seed];break;case "seedwait":b=transmission.torrents.status[transmission._status.seedwait];break;case "check":b=transmission.torrents.status[transmission._status.check];break;case "checkwait":b=transmission.torrents.status[transmission._status.checkwait];break;case "downloading":b=transmission.torrents.status[transmission._status.download];break;case "downloadwait":b=transmission.torrents.status[transmission._status.downloadwait];break;case "actively":b=
transmission.torrents.actively;break;case "error":b=transmission.torrents.error;break;case "warning":b=transmission.torrents.warning;break;case "search-result":b=transmission.torrents.searchResult;break;case "btservers":b=transmission.torrents.btItems;break;default:if(-1!=a.node.id.indexOf("folders-")){var e=transmission.torrents.folders[a.node.id];if(e)if(this.config.hideSubfolders){b=[];for(var f=0;f<e.torrents.length;f++)c=e.torrents[f],c.downloadDir.replace(/[\\|\/]/g,"")==a.node.path&&b.push(c)}else b=
e.torrents}else if(-1!=a.node.id.indexOf("label-"))for(e in d=parseInt(a.node.labelIndex),b=[],transmission.torrents.all){var g=transmission.torrents.all[e];(c=this.config.labelMaps[g.hashString])&&-1!=$.inArray(d,c)&&b.push(g)}}}this.config.defaultSelectNode!=a.node.id&&(this.control.torrentlist.datagrid("loadData",[]),this.config.defaultSelectNode=a.node.id,this.saveConfig());a=[];for(f in b){if(!b[f])return;c=this.lang.torrent["status-text"][b[f].status];0!=b[f].error?c="\x3cspan class\x3d'text-status-error'\x3e"+
c+"\x3c/span\x3e":b[f].warning&&(c="\x3cspan class\x3d'text-status-warning' title\x3d'"+b[f].warning+"'\x3e"+c+"\x3c/span\x3e");e={};e=$.extend(e,b[f]);e.status=c;e.statusCode=b[f].status;e.completeSize=Math.max(0,b[f].totalSize-b[f].leftUntilDone);e.leecherCount=b[f].leecher;e.seederCount=b[f].seeder;if(c=this.config.labelMaps[e.hashString])e.labels=c;a.push(e)}this.updateTorrentCurrentPageDatas(a);this.initShiftCheck()}},initShiftCheck:function(){var a=$("#m_list div.datagrid-cell-check input:checkbox");
a.off("click.Shift");var b=null,c=this.control.torrentlist;a.on("click.Shift",function(d){if(b&&d.shiftKey){var e=a.index(this),f=a.index(b);d=b.checked;var g=Math.max(e,f)+1;for(e=Math.min(e,f);e<g;e++)d?c.datagrid("checkRow",e):c.datagrid("uncheckRow",e)}b=this})},updateTorrentCurrentPageDatas:function(a){var b=this.control.torrentlist.datagrid("getRows");if(0==a.length&&0<b.length)this.control.torrentlist.datagrid("loadData",[]);else{var c=this.control.torrentlist.datagrid("options"),d=null;c.sortName&&
(d=c.sortName,a=a.sort(arrayObjectSort(d,c.sortOrder)));if(0==b.length||a.length!=this.control.torrentlist.datagrid("getData").total&&a.length>c.pageSize)this.control.torrentlist.datagrid({loadFilter:pagerFilter,pageNumber:c.pageNumber,sortName:d,sortOrder:c.sortOrder}).datagrid("loadData",a);else{this.control.torrentlist.datagrid("getData").originalRows=a;d=(c.pageNumber-1)*parseInt(c.pageSize);c=d+parseInt(c.pageSize);a=a.slice(d,c);c={};d={};for(var e in transmission.torrents.recently){var f=transmission.torrents.recently[e];
c[f.id]=!0}for(e in a)f=a[e],d[f.id]=f;var g={};for(e=b.length-1;0<=e;e--){f=b[e];var h=d[f.id];h?c[f.id]?(this.control.torrentlist.datagrid("updateRow",{index:e,row:h}),g[f.id]=f):transmission.torrents.removed?0<transmission.torrents.removed.length&&-1!=$.inArray(f.id,transmission.torrents.removed)?this.control.torrentlist.datagrid("deleteRow",e):g[f.id]=f:g[f.id]=f:this.control.torrentlist.datagrid("deleteRow",e)}for(e in a)f=a[e],g[f.id]||this.control.torrentlist.datagrid("appendRow",f)}}},getTorrentNameBar:function(a){var b=
"",c=a.name;switch(a.status){case transmission._status.stopped:b="iconlabel icon-pause-small";break;case transmission._status.check:b="iconlabel icon-checking";break;case transmission._status.download:b="iconlabel icon-down";break;case transmission._status.seed:b="iconlabel icon-up";break;case transmission._status.seedwait:case transmission._status.downloadwait:case transmission._status.checkwait:b="iconlabel icon-wait"}c+="\n"+a.downloadDir;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);return'\x3cspan class\x3d"'+b+'" title\x3d"'+c+'"\x3e'+a.name+"\x3c/span\x3e"},getTorrentProgressBar:function(a,b){var c="";var d="object"==typeof b?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"}"object"==typeof b&&(b.warning&&(c="torrent-progress-warning"),0!=b.error&&(c="torrent-progress-error"));if(d==transmission._status.check)return d=parseFloat(100*b.recheckProgress).toFixed(2),b=parseFloat(a*b.recheckProgress).toFixed(2),'\x3cdiv class\x3d"torrent-progress" title\x3d"'+a+'%"\x3e\x3cdiv class\x3d"torrent-progress-text" style\x3d"z-index:2;"\x3e'+d+'%\x3c/div\x3e\x3cdiv class\x3d"torrent-progress-bar torrent-progress-seed" style\x3d"width:'+
b+'%;z-index:1;opacity:0.7;"\x3e\x3c/div\x3e\x3cdiv class\x3d"torrent-progress-bar '+c+'" style\x3d"width:'+a+'%;"\x3e\x3c/div\x3e\x3c/div\x3e';a+="%";return'\x3cdiv class\x3d"torrent-progress" title\x3d"'+a+'"\x3e\x3cdiv class\x3d"torrent-progress-text"\x3e'+a+'\x3c/div\x3e\x3cdiv class\x3d"torrent-progress-bar '+c+'" style\x3d"width:'+a+';"\x3e\x3c/div\x3e\x3c/div\x3e'},addTorrentsToServer:function(a,b,c,d,e){var f=b-a.length,g=a.shift();g?(this.showStatus(this.lang.system.status.queue+(f+1)+"/"+
b+"\x3cbr/\x3e"+g,0),transmission.addTorrentFromUrl(g,d,c,function(f){system.addTorrentsToServer(a,b,c,d,e);null!=e&&null!=f.hashString&&system.saveLabelsConfig(f.hashString,e)})):(this.showStatus(this.lang.system.status.queuefinish),this.getServerStatus(),null!=e&&system.saveConfig())},changeSelectedTorrentStatus:function(a,b,c){var d=this.control.torrentlist.datagrid("getChecked"),e=[];a||(a="start");for(var f in d)e.push(d[f].id);c||(c="torrent-"+a);if(0<e.length){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()})}},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(null==b||0==b.length)this.removeTreeNode("search-result");
else{var c=this.panel.left.tree("find","search-result");a=this.lang.tree["search-result"]+" : "+a+" ("+b.length+")";null==c?(this.appendTreeNode("torrent-all",[{id:"search-result",text:a,iconCls:"iconfont tr-icon-search"}]),c=this.panel.left.tree("find","search-result")):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]&&!(transmission.torrents.all[a].infoIsLoading||0<this.currentTorrentId&&
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,pieces,pieceCount,pieceSize";b.moreInfosTag||(c+=",files,trackers,comment,dateCreated,creator,downloadDir");transmission.torrents.getMoreInfos(c,
a,function(c){b.infoIsLoading=!1;null!=c&&(jQuery.extend(b,c[0]),0==system.currentTorrentId||system.currentTorrentId!=a?system.clearTorrentAttribute():(b.completeSize=b.totalSize-b.leftUntilDone,"files"in b&&0<b.files.length&&(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*\x3d'torrent-attribute-value']").html("")},updateCurrentPageDatas:function(a,b,c){var d=c.datagrid("getRows"),e=c.datagrid("options"),f=null;e.sortName&&(f=e.sortName,b=b.sort(arrayObjectSort(f,e.sortOrder)));var g=-1!=c.selector.indexOf("#torrent-files-table"),h=c.datagrid("getData");(g=g&&!!h.filterString&&
h.torrentId==system.currentTorrentId)&&(b=fileFilter(b,h.filterString));if(0!=g||0!=d.length&&b.length==h.total){c.datagrid("getData").originalRows=b;f=(e.pageNumber-1)*parseInt(e.pageSize);e=f+parseInt(e.pageSize);b=b.slice(f,e);e={};for(var k in b)f=b[k],e[f[a]]=f;for(k=d.length-1;0<=k;k--)f=d[k],(b=e[f[a]])?c.datagrid("updateRow",{index:k,row:b}):c.datagrid("deleteRow",k)}else c.datagrid({loadFilter:pagerFilter,pageNumber:1,sortName:f,sortOrder:e.sortOrder}).datagrid("loadData",b)},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 "remainingTime":b=
31536E8<=b?"\u221e":getTotalTime(b);break;case "comment":b=system.replaceURI(b)}system.panel.attribute.find("#torrent-attribute-value-"+a).html(b)});var b=(new Base64).decode_bytes(a.pieces),c=0,d=a.pieceCount,e=a.pieceSize;for(a=[];c<d;)for(var f=b.codePointAt(c>>3),g=128;0<g&&c<d;g>>=1,++c)a.push(f&g?!1:!0);b=parseInt((499+d)/500);e=formatSize(e*b);d=parseInt((b-1+d)/b);f=0;g="";for(c=f=0;f<d;++f){for(var h=b,k=0;k<b;++k,++c)a[c]&&--h;h=parseInt(100*h/b);k=parseInt(100*(Math.pow(128,h/100)-1)/127)/
100;g+='\x3ci style\x3d"filter:saturate('+k+')" title\x3d"'+e+" x "+h+'%"\x3e\x3c/i\x3e'}system.panel.attribute.find("#torrent-attribute-pieces").html(g)},fillTorrentFileList:function(a){var b=a.files,c=a.fileStats,d=[],e=a.name.length+1,f;for(f in b){var g=b[f],h=c[f],k=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(k,transmission._status.download),length:g.length,
wanted:system.lang.torrent.attribute.status[h.wanted],priority:'\x3cspan class\x3d"iconlabel icon-flag-'+h.priority+'"\x3e'+system.lang.torrent.attribute.priority[h.priority]+"\x3c/span\x3e"})}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 e=b[d],f={},g;for(g in e)switch(g){case "downloadCount":case "leecherCount":case "seederCount":f[g]=-1==e[g]?system.lang["public"]["text-unknown"]:
e[g];break;case "announceState":f[g]=system.lang.torrent.attribute["servers-fields"].announceStateText[e[g]];break;case "lastAnnounceTime":case "nextAnnounceTime":f[g]=formatLongTime(e[g]);break;case "lastAnnounceSucceeded":case "lastAnnounceTimedOut":f[g]=system.lang.torrent.attribute.status[e[g]];break;default:f[g]=e[g]}c.push(f)}transmission.torrents.addTracker(a);this.updateCurrentPageDatas("id",c,system.panel.attribute.find("#torrent-servers-table"))},fillTorrentPeersList:function(a){a=a.peers;
var b=[],c={},d;for(d in a){var e=a[d],f={},g;for(g in e)f[g]=e[g];if(""!==system.config.ipInfoToken){c.flag$0="";var h=f.address;void 0===this.flags[h]?($.ajax({url:"https://ipinfo.io/"+h+"/country?token\x3d"+system.config.ipInfoToken,method:"GET",async:!1}).done(function(a){return function(b){a.flag$0=b.toLowerCase().trim()}}(c)),this.flags[h]=c.flag$0):c.flag$0=this.flags[h];f.address='\x3cimg src\x3d"'+this.rootPath+"/style/flags/"+c.flag$0+'.png" alt\x3d"'+c.flag$0+'" title\x3d"'+c.flag$0+'"\x3e '+
h}f.isUTP=system.lang.torrent.attribute.status[e.isUTP];e=parseFloat(100*e.progress).toFixed(2);f.progress=system.getTorrentProgressBar(e,transmission._status.download);b.push(f);c={flag$0:c.flag$0}}this.updateCurrentPageDatas("address",b,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){null!=a&&(jQuery.extend(transmission.torrents.all[system.currentTorrentId],
a[0]),0!=system.currentTorrentId&&$.each(a[0],function(a,b){var c=!1,d=!1,g=!1;switch(a){case "seedIdleMode":case "seedRatioMode":0==b&&(d=!1,c=!0),g=!0;case "downloadLimited":case "uploadLimited":if(1==b||1==b)d=!0;system.panel.attribute.find("input[enabledof\x3d'"+a+"']").prop("disabled",!d);g&&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,c,d){return formatSize(a)};break;case "speed":a.formatter=function(a,c,d){return formatSize(a,!0,"speed")};break;case "longtime":a.formatter=function(a,c,d){return formatLongTime(a)};break;case "progress":a.formatter=function(a,c,d){a=parseFloat(100*a).toFixed(2);return system.getTorrentProgressBar(a,transmission.torrents.all[c.id])};break;case "_usename_":switch(a.field){case "name":a.formatter=
function(a,c,d){return system.getTorrentNameBar(transmission.torrents.all[c.id])}}break;case "ratio":a.formatter=function(a,c,d){c="";1>parseFloat(a)&&-1!=a&&(c="text-status-warning");return'\x3cspan class\x3d"'+c+'"\x3e'+(-1==a?"\u221e":a)+"\x3c/span\x3e"};break;case "remainingTime":a.formatter=function(a,c,d){return 31536E8<=a?"\u221e":getTotalTime(a)};break;case "labels":a.formatter=function(a,c,d){return system.formetTorrentLabels(a,c.hashString)};break;case "color":a.formatter=function(a,c,d){return $("\x3cspan class\x3d'user-label'/\x3e").html(a).css({"background-color":a,
color:.5<getGrayLevel(a)?"#000":"#fff"}).get(0).outerHTML}}},reloadData:function(){0<this.popoverCount?setTimeout(function(){system.reloadData()},2E3):(this.reloadSession(),this.reloading=!1,this.getServerStatus(),this.reloading=!1,this.reloadTorrentBaseInfos())},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(){"Firefox"==
$.ua.browser.name&&60>$.ua.browser.major&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"});system.initUIStatus()})},appendFolder:function(a){if(a){var b="folders",c=a.replace(/\\/g,"/").split("/"),d="folders-",e="",f;for(f in c){var g=c[f];if(""!=g){e+=g;var h=this.B64.encode(g);d+=h.replace(/[+|\/|=]/g,"0");h=this.panel.left.tree("find",d);var k=transmission.torrents.folders[d];k?(g+=this.showNodeMoreInfos(k.count,k.size),h?this.updateTreeNodeText(d,g):(this.appendTreeNode(b,
[{id:d,path:e,downDir:a,text:g,iconCls:"iconfont tr-icon-file"}]),"folders"!=b&&(h=this.panel.left.tree("find",b),this.panel.left.tree("collapse",h.target))),b=d):(this.debug("appendFolder:key",d),this.debug("appendFolder:name",g),this.debug("appendFolder:node",h))}}}},replaceURI:function(a){return a.replace(/(http|https|ftp):\/\/([^/:]+)(:\d*)?([^# ]*)/ig,function(a){return'\x3ca href\x3d"'+a+'" target\x3d"_blank"\x3e'+a+"\x3c/a\x3e"})},readConfig:function(){this.readUserConfig();var a=this.getStorageData(this.configHead+
".system");a&&(this.config=$.extend(!0,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()},saveLabelsConfig:function(a,b){system.config.nav.labels&&(0==b.length?delete system.config.labelMaps[a]:
system.config.labelMaps[a]=b)},readUserConfig:function(){var a=window.localStorage[this.configHead];a&&(a=JSON.parse(a),this.userConfig=$.extend(!0,this.userConfig,a))},saveUserConfig:function(){window.localStorage[this.configHead]=JSON.stringify(this.userConfig)},uploadTorrentFile:function(a,b,c,d){if(window.FileReader){var e=$("input[id\x3d'"+a+"']")[0].files;$.each(e,function(a,g){transmission.addTorrentFromFile(g,b,c,d,e.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(-1==$.inArray(c,system.config.ignoreVersion))if(system.codeupdate<b){$("#area-update-infos").show();$("#msg-updateInfos").html(b+" -\x3e "+a.name);var d=$("\x3cdiv/\x3e"),e=a.body.replace(/\r\n/g,"\x3cbr/\x3e"),f=$("\x3cdiv style\x3d'text-align:right;'/\x3e").appendTo(d);$('\x3ca href\x3d"https://github.com/ronggang/transmission-web-control/releases/latest" target\x3d"_blank" class\x3d"easyui-linkbutton" data-options\x3d"iconCls:\'iconfont tr-icon-github\'"/\x3e').html(a.name+
" ("+b+")").appendTo(f).linkbutton();$("\x3cspan/\x3e").html(" ").appendTo(f);$('\x3ca href\x3d"https://github.com/ronggang/transmission-web-control/wiki" target\x3d"_blank" class\x3d"easyui-linkbutton" data-options\x3d"iconCls:\'iconfont tr-icon-help\'"/\x3e').html(system.lang["public"]["text-how-to-update"]).appendTo(f).linkbutton();$("\x3cspan/\x3e").html(" ").appendTo(f);$("\x3cbutton onclick\x3d\"javascript:system.addIgnoreVersion('"+c+'\');" class\x3d"easyui-linkbutton" data-options\x3d"iconCls:\'iconfont tr-icon-cancel-checked\'"/\x3e').html(system.lang["public"]["text-ignore-this-version"]).appendTo(f).linkbutton();
$("\x3chr/\x3e").appendTo(d);$("\x3cdiv/\x3e").html(e).appendTo(d);$("#button-download-update").webuiPopover({content:d.html(),backdrop:!0})}else $("#area-update-infos").hide()}}})},addIgnoreVersion:function(a){-1==$.inArray(a,system.config.ignoreVersion)&&(this.config.ignoreVersion.push(a),this.saveConfig());$("#button-download-update").webuiPopover("hide");$("#area-update-infos").hide()},changeLanguages:function(a){a!=this.lang.name&&a&&(this.config.defaultLang=a,this.saveConfig(),location.href=
"?lang\x3d"+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){a=$.extend(!0,{id:null,options:null,datas:null,type:0},a);if(null!=a.id){var b=a.id,c=a.options,d=a.datas,e=$("#"+b);if(e.length){d&&$.each(d,function(a,b){e.data(a,b)});if(0==a.type&&e.attr("type")==a.type){e.dialog("open");e.dialog({content:system.templates[b]});return}if(0!=system.popoverCount){setTimeout(function(){system.openDialogFromTemplate(a)},
350);return}e.remove()}c=$.extend(!0,{title:"",width:100,height:100,resizable:!1,cache:!0,content:system.lang.dialog["system-config"].loading,modal:!0},c);e=$("\x3cdiv/\x3e").attr({id:b,type:a.type}).appendTo(document.body);0==a.type?e.dialog(c):(e.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:!1,onHide:function(c){$(a.source).webuiPopover("destroy");$("#"+b).remove();$(c).remove();system.popoverCount--;
if(a.onClose)a.onClose(a.source)},onShow:function(){system.popoverCount++}}));$.get(system.rootPath+"template/"+b+".html?time\x3d"+new Date,function(c){system.templates[b]=c;d&&$.each(d,function(a,c){$("#"+b).data(a,c)});0==a.type?$("#"+b).dialog({content:c}):(e.html(c),$.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:!1,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){return a?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 fileFilter(a,b){b=new RegExp(b||".*");for(var c=[],d=0;d<a.length;++d)b.test(a[d].name)&&c.push(a[d]);return c}
function restoreFileFilterInputbox(a){var b=system.lang.torrent.attribute["filter-template-text"];b=[{id:1,text:b?b["1"]:"All",desc:".*"},{id:2,text:b?b["2"]:"BitComet padding file",desc:"____padding_file"},{id:3,text:b?b["3"]:"Unnecessary files",desc:"(.*\\.(url|lnk)$)|(RARBG_DO_NOT_MIRROR\\.exe)|(____padding_file)"}];$('\x3cinput id\x3d"torrent-files-filter-string" style\x3d"width:300px;"\x3e').insertAfter("#torrent-files-filter").combobox({valueField:"desc",textField:"desc",panelWidth:400,panelHeight:"auto",
formatter:function(a){return'\x3cspan style\x3d"font-weight:bold; padding:3px;"\x3e'+a.text+'\x3c/span\x3e\x3cbr/\x3e\x3cspan style\x3d"padding-left:10px;"\x3e'+a.desc+"\x3c/span\x3e"}}).combobox("loadData",b).combobox("setValue",a)}
function pagerFilter(a){var b=!1,c=!1;"number"==typeof a.length&&"function"==typeof a.splice&&(a={total:a.length,rows:a});if(b="torrent-files-table"==this.id){var d=$("#torrent-files-filter-string").val();if(c=a.filterString!==d||a.filterString&&a.originalRows.length==a.unfilteredRows.length){a.torrentId=system.currentTorrentId;var e=a.unfilteredRows||a.originalRows||a.rows,f=fileFilter(e,d);a.originalRows=f;a.total=f.length;a.unfilteredRows||(a.unfilteredRows=e);a.filterString=d}}var g=$(this),h=
g.datagrid("options"),k=g.datagrid("getPager");e=g.data("buttons");k.pagination({onSelectPage:function(b,c){h.pageNumber=b;h.pageSize=c;k.pagination("refresh",{pageNumber:b,pageSize:c});g.datagrid("loadData",a)},buttons:e});a.originalRows||(a.originalRows=a.rows);c=c?0:(h.pageNumber-1)*parseInt(h.pageSize);f=c+parseInt(h.pageSize);a.rows=a.originalRows.slice(c,f);if(e&&e.length)for(c=0;c<e.length;c++)f=e[c],f.id&&f.title&&$("#"+f.id,k).attr("title",f.title);b&&restoreFileFilterInputbox(d);return a}
;

View File

@ -2864,14 +2864,21 @@ var system = {
let ip = rowdata['address'];
if (this.flags[ip] === undefined) {
let url = 'https://ipinfo.io/' + ip + '/country?token=' + system.config.ipInfoToken,
$.get("https://ipinfo.io?token=$TOKEN", function(response) {
flag = response.toLowerCase().trim();
}, "jsonp")
let settings = {
'url': 'https://ipinfo.io/' + ip + '/country?token=' + system.config.ipInfoToken,
'method': 'GET',
'async': false
};
$.ajax(settings).done(function (response) {
flag = response.toLowerCase().trim();
});
this.flags[ip] = flag;
} else {
flag = this.flags[ip];
}
rowdata['address'] = '<img src="' + this.rootPath + '/style/flags/' + flag + '.png" alt="' + flag + '" title="' + flag + '"> ' + ip;
}