diff --git a/src/tr-web-control/i18n/es.json b/src/tr-web-control/i18n/es.json index da165df..5ff43ff 100644 --- a/src/tr-web-control/i18n/es.json +++ b/src/tr-web-control/i18n/es.json @@ -136,6 +136,7 @@ "dialog": { "torrent-add": { "download-dir": "Carpeta descarga:", + "used-download-dir": "Carpeta de descarga usada:", "torrent-url": "URL(s):", "tip-torrent-url": "Consejo:Puedes introducir más de un archivo usando varias líneas", "autostart": "Iniciar descarga:", @@ -152,8 +153,8 @@ "limit": "Límites", "alt-speed": "Vel. alternativa", "dictionary-folders": "Diccionario de carpetas", - "more": "More", - "labels": "Labels" + "more": "Más", + "labels": "Etiquetas" }, "config-dir": "Carpeta de configuración de Transmission:", "download-dir": "Carpeta de descarga por defecto:", @@ -206,20 +207,25 @@ "minutes": "Minutos", "nochange": "Sin cambio", "saving": "Guardando...", - "show-bt-servers": "Show 'BT servers' on Trackers:", - "restore-default-settings": "Restore UI Default Settings", - "language": "Language:", - "loading": "Loading...", - "hide-subfolders": "When clicking on the data directory, hide subfolders content in the list:", - "simple-check-mode": "Checked only one torrent when you right-click on the torrent list:", - "nav-contents": "Navigation bar Display content:", + "show-bt-servers": "Mostrar 'servidores BT' en Trackers:", + "restore-default-settings": "Restaurar configuración UI", + "language": "Idioma:", + "loading": "Cargando...", + "hide-subfolders": "Al hace click en el directorio de datos, ocultará la subcarpetas de la lista:", + "simple-check-mode": "Se marca un solo torrent cuando se hace click derecho en la lista:", + "nav-contents": "Mostrar barra de navegación de contenido:", "labels-manage": { - "name": "Label Name", - "description": "Description", + "name": "Nombre de etiqueta", + "description": "Descripción", "color": "Color", - "actions": "Actions", - "import-confirm": "Do you want to import labels? This overrides the current configuration." - } + "actions": "Acciones", + "import-confirm": "¿Quieres importar las etiquetas? Esto cambiará la configuración actual." + }, + "import-config": "Importar fichero de configuración", + "export-config": "Exportar configuración actual", + "import-config-confirm": "¿Quieres importar estas configuraciones? Esto cambiará la configuración actual.", + "script-torrent-done-enabled": "Ejecutar el siguiente script al completar una descarga:", + "ipinfo": "ipinfo.io Token" }, "public": { "button-ok": "Aceptar", @@ -229,11 +235,11 @@ "button-close": "Cerrar", "button-update": "Actualizar", "button-config": "Configurar", - "button-addnew": "Add", - "button-edit": "Edit", - "button-delete": "Delete", - "button-export": "Export", - "button-import": "Import" + "button-addnew": "Añadir", + "button-edit": "Editar", + "button-delete": "Borrar", + "button-export": "Exportar", + "button-import": "Importar" }, "about": { "infos": "Autor:culturistDeclaración:Most of the icons used in this program from the network, if any violation of your rights, please contact me delete.", @@ -287,14 +293,26 @@ "newname": "Nueva" }, "torrent-attribute-add-tracker": { - "title": "Add Trackers", - "tip": "One Line, One Tracker" + "title": "Añadir Trackers", + "tip": "Una lina, Un Tracker" }, "torrent-setLabels": { - "title": "Set User Labels", - "available": "Available:", - "selected": "Selected:" + "title": "Etiquetas de Usuario", + "available": "Disponible:", + "selected": "Seleccionada:" + }, + "export-config": { + "title": "Selecciona los datos a exportar", + "option-all": "Toda la configuración", + "option-system": "Configuración de Web Control", + "option-dictionary": "Diccionario de carpetas definidas", + "option-server": "Configuración de Transmission (Directorio de descarga, cache, limites de velocidad, etc.)" + }, + "import-config": { + "title": "Selecciona los datos a importar", + "invalid-file": "Perfil no válido" } + }, "torrent": { "fields": { @@ -315,9 +333,10 @@ "uploadedEver": "Subido", "uploadRatio": "Proporción", "queuePosition": "Cola", - "activityDate": "Activity Date", + "activityDate": "Fecha de Actividad", "trackers": "Trackers", - "labels": "User Labels" + "labels": "User Labels", + "doneDate": "Completed Date" }, "status-text": { "0": "Pausado", @@ -352,10 +371,20 @@ "lastAnnounceTime": "Hora", "lastAnnounceTimedOut": "T. agotado", "downloadCount": "Descargas", - "nextAnnounceTime": "Próximo anuncio" + "nextAnnounceTime": "Próximo anuncio", + "leecherCount": "Recuento Leecher", + "seederCount": "Recuento Seeder", + "announceStateText": { + "0": "Inactivo", + "1": "Esperando", + "2": "En cola", + "3": "Activo" + } }, "peers-fields": { "address": "Dirección IP", + "port": "Puerto", + "isUTP": "UTP activado", "clientName": "Cliente", "flagStr": "Bandera", "progress": "Progreso", @@ -371,6 +400,11 @@ "1": "Alta", "-1": "Baja" }, + "filter-template-text": { + "1": "Todo", + "2": "fichero de relleno BitComet", + "3": "Archivo innecesario" + }, "label": { "name": "Nombre:", "addedDate": "Añadido:", @@ -402,9 +436,10 @@ "button-allow": "Descargar archivos(s) marcados", "button-deny": "Omitir archivo(s) marcados", "button-priority": "Establecer prioridad", - "button-tracker-add": "Add New Tracker", - "button-tracker-edit": "Edit Tracker", - "button-tracker-remove": "Remove Tracker" + "button-filter": "Buscar archivos con una expresion regular", + "button-tracker-add": "Añadir nuevo Tracker", + "button-tracker-edit": "Editar Tracker", + "button-tracker-remove": "Eliminar Tracker" }, "other": { "tracker-remove-confim": "¿Está seguro de que desea eliminar este tracker?" @@ -429,6 +464,7 @@ "text-on": "ON", "text-off": "OFF", "text-how-to-update": "How to update?", - "text-ignore-this-version": "Ignore this version" + "text-ignore-this-version": "Ignore this version", + "text-json-file-parsing-failed": "JSON file parsing failed!" } -} \ No newline at end of file +} diff --git a/src/tr-web-control/script/min/system.min.js b/src/tr-web-control/script/min/system.min.js index 61172e1..194ecdb 100644 --- a/src/tr-web-control/script/min/system.min.js +++ b/src/tr-web-control/script/min/system.min.js @@ -1 +1,205 @@ -var system={version:"1.6.0",rootPath:"tr-web-control/",codeupdate:"20190724",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,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(t,e){t||(t=this.config.defaultLang?this.config.defaultLang:navigator.language||navigator.browserLanguage),t||(t="zh-CN"),-1!=t.indexOf("-")&&(t=t.split("-")[0].toLocaleLowerCase()+"-"+t.split("-")[1].toLocaleUpperCase()),this.languages[t]||(t="en"),t=t.replace("-","_"),$.getJSON(system.rootPath+"i18n/"+t+".json",function(s){s&&(system.lang=$.extend(!0,system.defaultLang,s)),system.resetLangText(),$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-"+t+".js").done(function(t,s){e&&e()}).fail(function(t,s,n){$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-en.js",function(){e&&e()})})})},init:function(t,e,s){this.readConfig(),this.lastUIStatus=JSON.parse(JSON.stringify(this.config.ui.status)),this.islocal=1==e,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(t,function(){system.initdata()}):this.initdata(),this.initThemes(),this.clipboard=new ClipboardJS("#toolbar_copyPath")},resetLangText:function(parent){parent||(parent=$);var items=parent.find("*[system-lang]");$.each(items,function(key,item){var name=$(item).attr("system-lang");"["==name.substr(0,1)?$(item).html(eval("system.lang"+name)):$(item).html(eval("system.lang."+name))}),items=parent.find("*[system-tip-lang]"),$.each(items,function(key,item){var name=$(item).attr("system-tip-lang");"["==name.substr(0,1)?$(item).attr("title",eval("system.lang"+name)):$(item).attr("title",eval("system.lang."+name))})},initdata:function(){$(document).attr("title",this.lang.system.title+" "+this.version),$.fn.switchbutton.defaults.onText=this.lang.public["text-on"],$.fn.switchbutton.defaults.offText=this.lang.public["text-off"];var t=new Array,e=""+this.lang.title.left+"";if(t.length>1)for(var s in e+=t.join(""),this.panel.left_layout.panel("setTitle",e),this.lang.tree.toolbar.nav)switch($("#tree-toolbar-nav-"+s).linkbutton(),s){case"folders":system.config.foldersShow?$("tree-toolbar-nav-"+s).linkbutton({iconCls:"icon-enabled"}).data("status",1):$("tree-toolbar-nav-"+s).linkbutton({iconCls:"icon-disabled"}).data("status",0)}else this.panel.left_layout.panel("setTitle",e);if(e=""+this.lang.title.list+"",t.length=0,t.length>1)for(var s in e+=t.join(""),this.panel.body.panel("setTitle",e),this.lang["torrent-head"].buttons)switch($("#torrent-head-buttons-"+s).linkbutton(),s){case"autoExpandAttribute":system.config.autoExpandAttribute?$("#torrent-head-buttons-"+s).linkbutton({iconCls:"icon-enabled"}).data("status",1):$("#torrent-head-buttons-"+s).linkbutton({iconCls:"icon-disabled"}).data("status",0)}else this.panel.body.panel("setTitle",e);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(t,e){$("").text(e).val(t).attr("selected",t==system.lang.name).appendTo(system.panel.top.find("#lang"))}),this.panel.top.find("#lang").change(function(){location.href="?lang="+this.value}),this.panel.toolbar.attr("class","panel-header"),this.initTree(),this.initToolbar(),this.initStatusBar(),this.initTorrentTable(),this.connect(),this.initEvent(),this.checkUpdate()},initEvent:function(){$(window).resize(function(){$("#main").layout("resize")}),this.panel.droparea[0].addEventListener("dragover",function(t){t.stopPropagation(),t.preventDefault(),system.debug("#dropArea.dragover")},!1),this.panel.list[0].addEventListener("dragover",function(t){t.stopPropagation(),t.preventDefault(),system.panel.droparea.show(),system.debug("dragover")},!1),this.panel.droparea[0].addEventListener("drop",function(t){t.stopPropagation(),t.preventDefault(),system.panel.droparea.hide(),system.debug("drop.e.dataTransfer:",t.dataTransfer),system.checkDropFiles(t.dataTransfer.files)},!1),this.panel.droparea[0].addEventListener("dragleave",function(t){t.stopPropagation(),t.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(t){system.config.ui.status.tree[t.id]=t.state,system.saveConfig()},onCollapse:function(t){system.config.ui.status.tree[t.id]=t.state,system.saveConfig()}}),this.panel.layout_body.layout({onExpand:function(t){system.config.ui.status.layout.body[t]="open",system.saveConfig()},onCollapse:function(t){system.config.ui.status.layout.body[t]="closed",system.saveConfig()}}),this.panel.layout_left.layout({onExpand:function(t){system.config.ui.status.layout.left[t]="open",system.saveConfig()},onCollapse:function(t){system.config.ui.status.layout.left[t]="closed",system.saveConfig()}}),this.panel.main.layout({onExpand:function(t){system.config.ui.status.layout.main[t]="open",system.saveConfig()},onCollapse:function(t){system.config.ui.status.layout.main[t]="closed",system.saveConfig()}})},layoutResize:function(t,e){system.uiIsInitialized&&system.config.ui.status.size[t]&&(system.config.ui.status.size[t]=e,system.saveConfig())},navToolbarClick:function(t){var e=t.id,s=$(t).data("status"),n=null;switch(e){case"tree-toolbar-nav-folders":n=this.panel.left.tree("find","folders"),this.config.foldersShow=1!=s;break;case"tree-toolbar-nav-statistics":n=this.panel.left.tree("find","statistics");break;case"torrent-head-buttons-autoExpandAttribute":(n={}).target=null,this.config.autoExpandAttribute=1!=s}n&&(1==s?($(t).linkbutton({iconCls:"icon-disabled"}),$(n.target).parent().hide(),s=0):($(t).linkbutton({iconCls:"icon-enabled"}),$(n.target).parent().show(),s=1),$(t).data("status",s),this.saveConfig())},checkDropFiles:function(t){if(t&&t.length){for(var e=new Array,s=0;s0&&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:e}})}},initTree:function(){var t=[{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"}]}],e={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 s in this.config.nav){var n=this.config.nav[s],o=e[s];o&&n&&t.push(o)}this.panel.left.tree({data:t,onSelect:function(t){system.loadTorrentToList({node:t}),system.currentListDir=t.downDir},lines:!0})},initUIStatus:function(){if(!this.uiIsInitialized){system.uiIsInitialized=!0;var t=this.lastUIStatus.tree;for(var e in t){var s;(s=this.panel.left.tree("find",e))&&s.target&&("open"==t[e]?this.panel.left.tree("expand",s.target):this.panel.left.tree("collapse",s.target))}if(this.config.defaultSelectNode)(s=this.panel.left.tree("find",this.config.defaultSelectNode))&&(this.config.foldersShow||-1==this.config.defaultSelectNode.indexOf("folders"))?this.panel.left.tree("select",s.target):(s=this.panel.left.tree("find","torrent-all"),this.panel.left.tree("select",s.target));for(var e in 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")),t=this.lastUIStatus.layout.body)"open"==t[e]?this.panel.layout_body.layout("expand",e):this.panel.layout_body.layout("collapse",e);for(var e in t=this.lastUIStatus.layout.left)"open"==t[e]?this.panel.layout_left.layout("expand",e):this.panel.layout_left.layout("collapse",e);for(var e in t=this.lastUIStatus.layout.main)"open"==t[e]?this.panel.main.layout("expand",e):this.panel.main.layout("collapse",e)}},initTorrentTable:function(){this.control.torrentlist=$("").attr("class","torrent-list").appendTo(this.panel.list);var t=null,e=-1;$.get(system.rootPath+"template/torrent-fields.json?time="+new Date,function(s){for(var n=s.fields,o={},a=0;a").appendTo("body")).menu({onClick:function(e){"icon-ok"==e.iconCls?(system.control.torrentlist.datagrid("hideColumn",e.name),t.menu("setIcon",{target:e.target,iconCls:"icon-empty"})):(system.control.torrentlist.datagrid("showColumn",e.name),t.menu("setIcon",{target:e.target,iconCls:"icon-ok"})),system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.saveUserConfig()}});for(var e=system.control.torrentlist.datagrid("getColumnFields"),s=0;s").attr("class","easyui-menu").css({"min-width":"180px"}).appendTo(this.panel.main),this.contextMenus[t]=s,s.menu());var n=null;switch(t){case"torrent-list":n=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"),this.config.nav.labels&&(n.push("-"),n.push("setLabels"));var o=this.panel.toolbar;for(var a in n){var r=n[a];if("-"==r)$("").appendTo(s);else{var i=o.find("#toolbar_"+r);i.length>0?s.menu("appendItem",{text:i.attr("title"),id:r,iconCls:i.linkbutton("options").iconCls,disabled:i.linkbutton("options").disabled,onclick:function(){system.panel.toolbar.find("#toolbar_"+$(this).attr("id")).click()}}):(i=$("#"+r)).length>0?s.menu("appendItem",{text:i.attr("title"),id:r,iconCls:i.attr("id").replace("menu-queue-move","iconfont tr-icon"),disabled:o.find("#toolbar_queue").linkbutton("options").disabled,onclick:function(){$("#"+$(this).attr("id")).click()}}):(i=this.getContentMenuWithKey(r,s))&&s.menu("appendItem",i),i=null}}var l=$("#copyPath",s);l.attr({"data-clipboard-action":"copy","data-clipboard-target":"#clipboard-source"});new ClipboardJS(l.get(0))}s.menu("show",{left:e.pageX,top:e.pageY,hideOnUnhover:!1}),s=null,n=null},getContentMenuWithKey:function(t,e){switch(t){case"setLabels":return{id:"setLabels",text:system.lang.menus.setLabels,iconCls:"iconfont tr-icon-labels",disabled:0==this.checkedRows.length,onclick:function(){var t=system.checkedRows,e=new Array;for(var s in t)e.push(t[s].hashString);0!=e.length&&system.openDialogFromTemplate({id:"dialog-torrent-setLabels",options:{title:system.lang.dialog["torrent-setLabels"].title,width:520,height:200},datas:{hashs:e}})}};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(t){system.copyToClipboard(t),e.css("display","block")})}}}},formetTorrentLabels:function(t,e){var s=$("");if(t){"string"==typeof t&&(t=t.split(","));for(var n=0;n").html(a.name).css({"background-color":a.color,color:getGrayLevel(a.color)>.5?"#000":"#fff"}).appendTo(s)}}var r=$("').appendTo(s);return r.linkbutton(),r.find("span").first().attr({title:system.lang.dialog["torrent-setLabels"].title}),s.get(0).outerHTML},setTorrentLabels:function(t,e){system.openDialogFromTemplate({id:"dialog-torrent-setLabels",options:{title:system.lang.dialog["torrent-setLabels"].title,width:520,height:200},datas:{hashs:[e]},type:1,source:$(t)})},checkTorrentRow:function(t,e){if(this.checkedRows=this.control.torrentlist.datagrid("getChecked"),this.showCheckedInStatus(),"all"==t){if(0==this.control.torrentlist.datagrid("getRows").length)return;return $("#toolbar_start, #toolbar_pause, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers,#toolbar_copyPath",this.panel.toolbar).linkbutton({disabled:e}),$("#toolbar_rename, #toolbar_morepeers",this.panel.toolbar).linkbutton({disabled:!0}),void this.panel.toolbar.find("#toolbar_queue").menubutton("disable")}if(0==this.checkedRows.length)return $("#toolbar_start, #toolbar_pause, #toolbar_rename, #toolbar_remove, #toolbar_recheck, #toolbar_changeDownloadDir,#toolbar_morepeers,#toolbar_copyPath",this.panel.toolbar).linkbutton({disabled:!0}),void this.panel.toolbar.find("#toolbar_queue").menubutton("disable");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[e.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(this.checkedRows.length>0){this.panel.status_text.empty(),this.showStatus(void 0,0);var t=[],e=this.lang.system.status.checked.replace("%n",this.checkedRows.length),s=[];$("").html(e).appendTo(this.panel.status_text);for(var n=0;n").appendTo(this.panel.status_text).datalist({data:t}),$(".datalist>.panel-body",this.panel.status_text).css({border:0}),$("#button-cancel-checked").show(),$("#clipboard-source").val(s.join("\n"))}else $("#button-cancel-checked").hide(),this.panel.status_text.empty(),$("#clipboard-source").val("")},copyToClipboard:function(t){var e="copy_to_clipboard_textarea",s=document.getElementById(e);s||(s=document.createElement("textarea")),s.id=e,s.style.display="block",s.value=t,document.body.appendChild(s),s.select(),document.execCommand("copy"),s.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 t=this.value;$.isNumeric(t)&&(system.config.reloadStep=1e3*t,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 t=$(this),e=t.linkbutton("options").iconCls;t.linkbutton({disabled:!0,iconCls:"icon-loading"}),transmission.exec({method:"torrent-start"},function(s){t.linkbutton({iconCls:e,disabled:!1}),t=null})}),this.panel.toolbar.find("#toolbar_pause_all").linkbutton({disabled:!1}).attr("title",this.lang.toolbar.tip["pause-all"]).click(function(){var t=$(this),e=t.linkbutton("options").iconCls;t.linkbutton({disabled:!0,iconCls:"icon-loading"}),transmission.exec({method:"torrent-stop"},function(s){t.linkbutton({iconCls:e,disabled:!1}),t=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 t=system.control.torrentlist.datagrid("getChecked");t.length>0&&(1==t.length?transmission.torrents.all[t[0].id].percentDone>0?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 t=system.control.torrentlist.datagrid("getChecked"),e=new Array;for(var s in t)e.push(t[s].id);0!=e.length&&system.openDialogFromTemplate({id:"dialog-torrent-remove-confirm",options:{title:system.lang.dialog["torrent-remove"].title,width:350,height:150},datas:{ids:e}})}),this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:!0}).click(function(){var t=system.control.torrentlist.datagrid("getChecked");0!=t.length&&system.openDialogFromTemplate({id:"dialog-torrent-rename",options:{title:system.lang.dialog["torrent-rename"].title,width:520,height:200,resizable:!0},datas:{id:t[0].id}})}),this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip["change-download-dir"]).click(function(){var t=system.control.torrentlist.datagrid("getChecked"),e=new Array;for(var s in t)e.push(t[s].id);0!=e.length&&system.openDialogFromTemplate({id:"dialog-torrent-changeDownloadDir",options:{title:system.lang.dialog["torrent-changeDownloadDir"].title,width:520,height:200},datas:{ids:e}})}),this.panel.toolbar.find("#toolbar_alt_speed").linkbutton().attr("title",this.lang.toolbar.tip["alt-speed"]).click(function(){var t=$(this),e=t.linkbutton("options"),s=!1;"iconfont tr-icon-rocket"==e.iconCls&&(s=!0),transmission.exec({method:"session-set",arguments:{"alt-speed-enabled":s}},function(e){"success"==e.result&&(system.serverConfig["alt-speed-enabled"]=s,t.linkbutton({iconCls:"iconfont tr-icon-"+(s?"woniu":"rocket")}),s?$("#status_alt_speed").show():$("#status_alt_speed").hide())}),t.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(t){system.searchTorrents(t)},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(t){transmission.getSession(function(e){system.serverConfig=e,$("#status_version").html("Transmission "+system.lang.statusbar.version+e.version+", RPC: "+e["rpc-version"]+", WEB Control: "+system.version+"("+system.codeupdate+")"),1==e["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=e["download-dir"],0==transmission.downloadDirs.length&&transmission.downloadDirs.push(system.downloadDir),parseInt(system.serverConfig["rpc-version"])>=15?transmission.getFreeSpace(system.downloadDir,function(t){system.serverConfig["download-dir-free-space"]=t.arguments["size-bytes"],system.showFreeSpace(t.arguments["size-bytes"])}):system.showFreeSpace(system.serverConfig["download-dir-free-space"]),t&&system.showStatus(system.lang.system.status.connected)})},showFreeSpace:function(t){var e=t;e=-1==e?system.lang.public["text-unknown"]:formatSize(e),$("#status_freespace").text(system.lang.dialog["system-config"]["download-dir-free-space"]+" "+e)},reloadTorrentBaseInfos:function(t,e){if(!this.reloading){clearTimeout(this.autoReloadTimer),this.reloading=!0;var s={trackers:transmission.trackers,folders:transmission.torrents.folders};transmission.torrents.getallids(function(t){var e=new Array;for(var n in t){var o=t[n];e.push(o.id)}var a=transmission.torrents.getErrorIds(e,!0);a.length>0?transmission.torrents.getallids(function(){system.resetTorrentInfos(s)},a):system.resetTorrentInfos(s)},t,e)}},resetTorrentInfos:function(t){this.resetNavTorrentStatus(),this.resetNavServers(t),this.resetNavStatistics(),this.resetNavFolders(t),this.resetNavLabels(),"Firefox"==$.ua.browser.name&&$.ua.browser.major<60&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"})},resetNavTorrentStatus:function(){var t=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)):system.updateTreeNodeText("paused",system.lang.tree.paused),transmission.torrents.status[transmission._status.seed]?system.updateTreeNodeText("sending",system.lang.tree.sending+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seed].length)):system.updateTreeNodeText("sending",system.lang.tree.sending),transmission.torrents.status[transmission._status.seedwait]){var e=system.panel.left.tree("find","sending"),s=system.panel.left.tree("getChildren",e.target),n=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seedwait].length);s.length>0?system.updateTreeNodeText(s[0].id,n):system.appendTreeNode(e,[{id:"seedwait",text:n,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)):system.updateTreeNodeText("check",system.lang.tree.check),transmission.torrents.status[transmission._status.checkwait]){var e=system.panel.left.tree("find","check");s=system.panel.left.tree("getChildren",e.target),n=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.checkwait].length);s.length>0?system.updateTreeNodeText(s[0].id,n):system.appendTreeNode(e,[{id:"checkwait",text:n,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)):system.updateTreeNodeText("downloading",system.lang.tree.downloading),transmission.torrents.status[transmission._status.downloadwait]){e=system.panel.left.tree("find","downloading"),s=system.panel.left.tree("getChildren",e.target),n=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.downloadwait].length);s.length>0?system.updateTreeNodeText(s[0].id,n):system.appendTreeNode(e,[{id:"downloadwait",text:n,iconCls:"iconfont tr-icon-wait"}])}else system.removeTreeNode("downloadwait");if(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)),null!=(e=system.panel.left.tree("getSelected"))){var o=system.control.torrentlist.datagrid("options").pageNumber;system.loadTorrentToList({node:e,page:o})}0!=t&&system.control.torrentlist.datagrid("selectRecord",t),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(t){var e=this.panel.left.tree("find","servers");if(this.config.nav.servers){if(e){var s=e.state;this.removeTreeNode("servers-loading")}else this.appendTreeNode(null,[{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"iconfont tr-icon-servers"}]),e=this.panel.left.tree("find","servers");new Array;var n=this.panel.left.tree("find","btservers"),o=n?n.state:"close";for(var a in!n&&system.config.showBTServers&&(this.appendTreeNode(e,[{id:"btservers",text:"BT",state:"open",iconCls:"iconfont tr-icon-bt"}]),n=this.panel.left.tree("find","btservers")),transmission.trackers){if(!(l=transmission.trackers[a]).isBT||system.config.showBTServers){var r=system.panel.left.tree("find",l.nodeid),i=l.name+this.showNodeMoreInfos(l.count,l.size);r?system.updateTreeNodeText(l.nodeid,i,l.connected?"iconfont tr-icon-server":"iconfont tr-icon-server-error"):system.appendTreeNode(l.isBT?n:e,[{id:l.nodeid,text:i,iconCls:l.connected?"iconfont tr-icon-server":"iconfont tr-icon-server-error"}]),t.trackers[l.nodeid]=null}}for(var a in"closed"==s&&this.panel.left.tree("collapse",e.target),system.config.showBTServers&&n&&"closed"==o&&this.panel.left.tree("collapse",n.target),t.trackers){var l;(l=t.trackers[a])&&system.removeTreeNode(l.nodeid)}}else e&&this.panel.left.tree("remove",e.target)},resetNavStatistics:function(){if(this.config.nav.statistics){var t="uploadedBytes,downloadedBytes,filesAdded,sessionCount,secondsActive".split(",");$.each(t,function(t,e){switch(e){case"uploadedBytes":case"downloadedBytes":system.updateTreeNodeText(e,system.lang.tree.statistics[e]+" "+formatSize(system.serverSessionStats["cumulative-stats"][e])),system.updateTreeNodeText("current-"+e,system.lang.tree.statistics[e]+" "+formatSize(system.serverSessionStats["current-stats"][e]));break;case"secondsActive":system.updateTreeNodeText(e,system.lang.tree.statistics[e]+" "+getTotalTime(1e3*system.serverSessionStats["cumulative-stats"][e])),system.updateTreeNodeText("current-"+e,system.lang.tree.statistics[e]+" "+getTotalTime(1e3*system.serverSessionStats["current-stats"][e]));break;default:system.updateTreeNodeText(e,system.lang.tree.statistics[e]+" "+system.serverSessionStats["cumulative-stats"][e]),system.updateTreeNodeText("current-"+e,system.lang.tree.statistics[e]+" "+system.serverSessionStats["current-stats"][e])}})}else{var e=this.panel.left.tree("find","statistics");e&&this.panel.left.tree("remove",e.target)}},resetNavFolders:function(t){if(this.config.nav.folders){for(var e in transmission.torrents.folders){var s=transmission.torrents.folders[e];t.folders[s.nodeid]=null}this.loadFolderList(t.folders)}else{this.initUIStatus();var n=this.panel.left.tree("find","folders");n&&this.panel.left.tree("remove",n.target)}},resetNavLabels:function(t){if(this.config.nav.labels){if(t)for(var e=this.panel.left.tree("getChildren",this.panel.left.tree("find","labels").target),s=0;s.5?"#000":"#fff"}))}}else{var a;(a=this.panel.left.tree("find","labels"))&&this.panel.left.tree("remove",a.target)}},showNodeMoreInfos:function(t,e){var s="";return t>0&&(s=" ("+t+")"),e>0&&(s+="["+formatSize(e)+"]"),s},getServerStatus:function(){this.reloading||(clearTimeout(this.autoReloadTimer),this.reloading=!0,transmission.getStatus(function(t){if(system.reloading=!1,$("#status_downloadspeed").html(formatSize(t.downloadSpeed,!1,"speed")),$("#status_uploadspeed").html(formatSize(t.uploadSpeed,!1,"speed")),system.serverSessionStats=t,0==t.torrentCount){var e=system.panel.left.tree("find","servers");e&&system.panel.left.tree("remove",e.target),system.updateTreeNodeText("torrent-all",system.lang.tree.all)}}))},showStatus:function(t,e){$("#m_status").panel("options").collapsed&&$("#layout_left").layout("expand","south"),this.panel.status_text.show(),t&&this.panel.status_text.html(t),0!=e&&(null==e&&(e=3e3),this.panel.status_text.fadeOut(e,function(){$("#layout_left").layout("collapse","south")}))},updateTreeNodeText:function(t,e,s){var n=this.panel.left.tree("find",t);if(n){var o={target:n.target,text:e};null!=s&&(o.iconCls=s),this.panel.left.tree("update",o)}n=null},appendTreeNode:function(t,e){var s=null;(s="string"==typeof t?this.panel.left.tree("find",t):t)?this.panel.left.tree("append",{parent:s.target,data:e}):this.panel.left.tree("append",{data:e}),s=null},removeTreeNode:function(t){var e=this.panel.left.tree("find",t);e&&this.panel.left.tree("remove",e.target),e=null},loadTorrentToList:function(t){if(transmission.torrents.all){if(jQuery.extend({node:null,page:1},t),t.node){var e=null,s=this.panel.left.tree("getParent",t.node.target)||{id:""},n=this.panel.left.data("currentNodeId");switch(n!=t.node.id&&(this.control.torrentlist.datagrid("uncheckAll"),this.control.torrentlist.datagrid({pageNumber:1}),n=t.node.id),this.panel.left.data("currentNodeId",n),s.id){case"servers":case"btservers":e="btservers"==t.node.id?transmission.torrents.btItems:transmission.trackers[t.node.id].torrents;break;default:switch(t.node.id){case"torrent-all":case"servers":e=transmission.torrents.all;break;case"paused":e=transmission.torrents.status[transmission._status.stopped];break;case"sending":e=transmission.torrents.status[transmission._status.seed];break;case"seedwait":e=transmission.torrents.status[transmission._status.seedwait];break;case"check":e=transmission.torrents.status[transmission._status.check];break;case"checkwait":e=transmission.torrents.status[transmission._status.checkwait];break;case"downloading":e=transmission.torrents.status[transmission._status.download];break;case"downloadwait":e=transmission.torrents.status[transmission._status.downloadwait];break;case"actively":e=transmission.torrents.actively;break;case"error":e=transmission.torrents.error;break;case"warning":e=transmission.torrents.warning;break;case"search-result":e=transmission.torrents.searchResult;break;case"btservers":e=transmission.torrents.btItems;break;default:if(-1!=t.node.id.indexOf("folders-")){var o=transmission.torrents.folders[t.node.id];if(o)if(this.config.hideSubfolders){e=[];for(var a=0;a"+u+"":e[a].warning&&(u=""+u+"");var f,h={};(h=$.extend(h,e[a])).status=u,h.statusCode=e[a].status,h.completeSize=Math.max(0,e[a].totalSize-e[a].leftUntilDone),h.leecherCount=e[a].leecher,h.seederCount=e[a].seeder,(f=this.config.labelMaps[h.hashString])&&(h.labels=f),c.push(h)}this.updateTorrentCurrentPageDatas(c),this.initShiftCheck()}}},initShiftCheck:function(){var t=$("#m_list div.datagrid-cell-check input:checkbox");t.off("click.Shift");var e=null,s=this.control.torrentlist;t.on("click.Shift",function(n){if(e){if(n.shiftKey)for(var o=t.index(this),a=t.index(e),r=e.checked,i=Math.min(o,a),l=Math.max(o,a)+1,d=i;d0)this.control.torrentlist.datagrid("loadData",[]);else{var s=this.control.torrentlist.datagrid("options"),n=null;if(s.sortName){var o=n=s.sortName;t=t.sort(arrayObjectSort(o,s.sortOrder))}if(0==e.length||t.length!=this.control.torrentlist.datagrid("getData").total&&t.length>s.pageSize)this.control.torrentlist.datagrid({loadFilter:pagerFilter,pageNumber:s.pageNumber,sortName:n,sortOrder:s.sortOrder}).datagrid("loadData",t);else{this.control.torrentlist.datagrid("getData").originalRows=t;var a=(s.pageNumber-1)*parseInt(s.pageSize),r=a+parseInt(s.pageSize);t=t.slice(a,r);var i={},l={};for(var d in transmission.torrents.recently){i[(f=transmission.torrents.recently[d]).id]=!0,f=null}for(var d in t){l[(f=t[d]).id]=f,f=null}var c={};for(d=e.length-1;d>=0;d--){var u=l[(f=e[d]).id];u?i[f.id]?(this.control.torrentlist.datagrid("updateRow",{index:d,row:u}),c[f.id]=f):transmission.torrents.removed&&transmission.torrents.removed.length>0&&-1!=$.inArray(f.id,transmission.torrents.removed)?this.control.torrentlist.datagrid("deleteRow",d):c[f.id]=f:this.control.torrentlist.datagrid("deleteRow",d),f=null,u=null}for(var d in t){var f;c[(f=t[d]).id]||this.control.torrentlist.datagrid("appendRow",f)}e=null,i=null,l=null}}},getTorrentNameBar:function(t){var e="",s=t.name;switch(t.status){case transmission._status.stopped:e="iconlabel icon-pause-small";break;case transmission._status.check:e="iconlabel icon-checking";break;case transmission._status.download:e="iconlabel icon-down";break;case transmission._status.seed:e="iconlabel icon-up";break;case transmission._status.seedwait:case transmission._status.downloadwait:case transmission._status.checkwait:e="iconlabel icon-wait"}return s+="\n"+t.downloadDir,t.warning&&(e="iconlabel icon-warning-type1",s+="\n\n"+this.lang.public["text-info"]+": "+t.warning),0!=t.error&&(e="iconlabel icon-exclamation",s+="\n\n"+this.lang.public["text-info"]+": "+t.errorString),''+t.name+""},getTorrentProgressBar:function(t,e){var s="",n=0;switch(n="object"==typeof e?e.status:e){case transmission._status.stopped:s="torrent-progress-stop";break;case transmission._status.checkwait:case transmission._status.check:s="torrent-progress-check";break;case transmission._status.downloadwait:case transmission._status.download:s="torrent-progress-download";break;case transmission._status.seedwait:case transmission._status.seed:s="torrent-progress-seed"}return"object"==typeof e&&(e.warning&&(s="torrent-progress-warning"),0!=e.error&&(s="torrent-progress-error")),n==transmission._status.check?''+parseFloat(100*e.recheckProgress).toFixed(2)+'%':''+t+''},addTorrentsToServer:function(t,e,s,n,o){var a=e-t.length,r=t.shift();if(!r)return this.showStatus(this.lang.system.status.queuefinish),this.getServerStatus(),void(null!=o&&system.saveConfig());this.showStatus(this.lang.system.status.queue+(a+1)+"/"+e+""+r,0),transmission.addTorrentFromUrl(r,n,s,function(a){system.addTorrentsToServer(t,e,s,n,o),null!=o&&null!=a.hashString&&system.saveLabelsConfig(a.hashString,o)})},changeSelectedTorrentStatus:function(t,e,s){var n=this.control.torrentlist.datagrid("getChecked"),o=new Array;for(var a in t||(t="start"),n)o.push(n[a].id);if(s||(s="torrent-"+t),o.length>0){if(e){var r=e.linkbutton("options").iconCls;e.linkbutton({disabled:!0,iconCls:"icon-loading"})}transmission.exec({method:s,arguments:{ids:o}},function(t){e&&e.linkbutton({iconCls:r}),system.control.torrentlist.datagrid("uncheckAll"),system.reloadTorrentBaseInfos()})}},getTorrentMagnetLink:function(t){var e=this.control.torrentlist.datagrid("getChecked"),s=new Array;for(var n in e)s.push(e[n].id);transmission.torrents.getMagnetLink(s,t)},searchTorrents:function(t){if(""!=t){var e=transmission.torrents.search(t);if(null!=e&&0!=e.length){var s=this.panel.left.tree("find","search-result"),n=this.lang.tree["search-result"]+" : "+t+" ("+e.length+")";null==s?(this.appendTreeNode("torrent-all",[{id:"search-result",text:n,iconCls:"iconfont tr-icon-search"}]),s=this.panel.left.tree("find","search-result")):this.panel.left.tree("update",{target:s.target,text:n}),this.panel.left.tree("select",s.target)}else this.removeTreeNode("search-result")}},getTorrentInfos:function(t){if(transmission.torrents.all[t]&&!transmission.torrents.all[t].infoIsLoading&&!(this.currentTorrentId>0&&transmission.torrents.all[this.currentTorrentId]&&transmission.torrents.all[this.currentTorrentId].infoIsLoading||(this.currentTorrentId=t,this.panel.attribute.panel("options").collapsed))){var e=transmission.torrents.all[t];e.infoIsLoading=!0;var s="fileStats,trackerStats,peers,leftUntilDone,status,rateDownload,rateUpload,uploadedEver,uploadRatio,error,errorString,pieces,pieceCount,pieceSize";e.moreInfosTag||(s+=",files,trackers,comment,dateCreated,creator,downloadDir"),transmission.torrents.getMoreInfos(s,t,function(s){e.infoIsLoading=!1,null!=s&&(jQuery.extend(e,s[0]),0!=system.currentTorrentId&&system.currentTorrentId==t?(e.completeSize=e.totalSize-e.leftUntilDone,"files"in e&&e.files.length>0&&(e.moreInfosTag=!0),system.fillTorrentBaseInfos(e),system.fillTorrentFileList(e),system.fillTorrentServerList(e),system.fillTorrentPeersList(e),system.fillTorrentConfig(e),transmission.torrents.all[t]=e,transmission.torrents.datas[t]=e):system.clearTorrentAttribute())})}},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(t,e,s){var n=s.datagrid("getRows"),o=s.datagrid("options"),a=null;o.sortName&&(a=o.sortName,e=e.sort(arrayObjectSort(a,o.sortOrder)));var r=-1!=s.selector.indexOf("#torrent-files-table"),i=s.datagrid("getData"),l=r&&!!i.filterString&&i.torrentId==system.currentTorrentId;if(l&&(e=fileFilter(e,i.filterString)),0!=l||0!=n.length&&e.length==i.total){s.datagrid("getData").originalRows=e;var d=(o.pageNumber-1)*parseInt(o.pageSize),c=d+parseInt(o.pageSize);e=e.slice(d,c);var u={};for(var f in e){u[(h=e[f])[t]]=h,h=null}for(f=n.length-1;f>=0;f--){var h,m=u[(h=n[f])[t]];m?s.datagrid("updateRow",{index:f,row:m}):s.datagrid("deleteRow",f),m=null,h=null}}else s.datagrid({loadFilter:pagerFilter,pageNumber:1,sortName:a,sortOrder:o.sortOrder}).datagrid("loadData",e)},fillTorrentBaseInfos:function(t){$.each(t,function(t,e){switch(t){case"rateDownload":case"rateUpload":e=formatSize(e,!0,"speed");break;case"totalSize":case"uploadedEver":case"leftUntilDone":case"completeSize":e=formatSize(e);break;case"addedDate":case"dateCreated":case"doneDate":e=formatLongTime(e);break;case"status":e=system.lang.torrent["status-text"][e];break;case"error":0==e?system.panel.attribute.find("#torrent-attribute-tr-error").hide():system.panel.attribute.find("#torrent-attribute-tr-error").show();break;case"remainingTime":e=e>=31536e8?"∞":getTotalTime(e);break;case"comment":e=system.replaceURI(e)}system.panel.attribute.find("#torrent-attribute-value-"+t).html(e)});for(var e=(new Base64).decode_bytes(t.pieces),s=0,n=t.pieceCount,o=t.pieceSize,a=[];s>3),i=128;i>0&&s>=1,++s)a.push(!(r&i));var l=parseInt((499+n)/500),d=formatSize(o*l),c=parseInt((l-1+n)/l),u=0,f="";for(u=0,s=0;u'}system.panel.attribute.find("#torrent-attribute-pieces").html(f)},fillTorrentFileList:function(t){var e=t.files,s=t.fileStats,n=new Array,o=t.name.length+1;for(var a in e){var r=e[a],i=s[a],l=parseFloat(i.bytesCompleted/r.length*100).toFixed(2);n.push({name:r.name==t.name?r.name:r.name.substr(o),index:a,bytesCompleted:i.bytesCompleted,percentDone:system.getTorrentProgressBar(l,transmission._status.download),length:r.length,wanted:system.lang.torrent.attribute.status[i.wanted],priority:''+system.lang.torrent.attribute.priority[i.priority]+""})}this.updateCurrentPageDatas("index",n,system.panel.attribute.find("#torrent-files-table"))},fillTorrentServerList:function(t){var e=t.trackerStats,s=new Array;for(var n in e){var o=e[n],a={};for(var r in o)switch(r){case"downloadCount":case"leecherCount":case"seederCount":a[r]=-1==o[r]?system.lang.public["text-unknown"]:o[r];break;case"announceState":a[r]=system.lang.torrent.attribute["servers-fields"].announceStateText[o[r]];break;case"lastAnnounceTime":case"nextAnnounceTime":a[r]=formatLongTime(o[r]);break;case"lastAnnounceSucceeded":case"lastAnnounceTimedOut":a[r]=system.lang.torrent.attribute.status[o[r]];break;default:a[r]=o[r]}s.push(a)}transmission.torrents.addTracker(t),this.updateCurrentPageDatas("id",s,system.panel.attribute.find("#torrent-servers-table"))},fillTorrentPeersList:function(t){var e=t.peers,s=new Array;for(var n in e){var o=e[n],a={};for(var r in o)a[r]=o[r];if(""!==system.config.ipInfoToken){let t="",e=a.address;if(void 0===this.flags[e]){let s={url:"https://ipinfo.io/"+e+"/country?token="+system.config.ipInfoToken,method:"GET",async:!1};$.ajax(s).done(function(e){t=e.toLowerCase().trim()}),this.flags[e]=t}else t=this.flags[e];a.address+=' '}a.isUTP=system.lang.torrent.attribute.status[o.isUTP];var i=parseFloat(100*o.progress).toFixed(2);a.progress=system.getTorrentProgressBar(i,transmission._status.download),s.push(a)}this.updateCurrentPageDatas("address",s,system.panel.attribute.find("#torrent-peers-table"))},fillTorrentConfig:function(t){4==system.panel.attribute.find("#torrent-attribute-tabs").data("selectedIndex")&&transmission.torrents.getConfig(t.id,function(t){if(null!=t){var e=transmission.torrents.all[system.currentTorrentId];jQuery.extend(e,t[0]),0!=system.currentTorrentId&&$.each(t[0],function(t,e){var s=!1,n=!1,o=!1;switch(t){case"seedIdleMode":case"seedRatioMode":0==e&&(n=!1,s=!0),o=!0;case"downloadLimited":case"uploadLimited":1!=e&&1!=e||(n=!0),system.panel.attribute.find("input[enabledof='"+t+"']").prop("disabled",!n),o&&system.panel.attribute.find("#"+t).prop("indeterminate",s).data("_tag",e),system.panel.attribute.find("#"+t).prop("checked",n);break;default:system.panel.attribute.find("#"+t).val(e),system.panel.attribute.find("#"+t).numberspinner("setValue",e)}})}})},setFieldFormat:function(t){if(t.formatter)switch(t.formatter){case"size":t.formatter=function(t,e,s){return formatSize(t)};break;case"speed":t.formatter=function(t,e,s){return formatSize(t,!0,"speed")};break;case"longtime":t.formatter=function(t,e,s){return formatLongTime(t)};break;case"progress":t.formatter=function(t,e,s){var n=parseFloat(100*t).toFixed(2);return system.getTorrentProgressBar(n,transmission.torrents.all[e.id])};break;case"_usename_":switch(t.field){case"name":t.formatter=function(t,e,s){return system.getTorrentNameBar(transmission.torrents.all[e.id])}}break;case"ratio":t.formatter=function(t,e,s){var n="";return parseFloat(t)<1&&-1!=t&&(n="text-status-warning"),''+(-1==t?"∞":t)+""};break;case"remainingTime":t.formatter=function(t,e,s){return t>=31536e8?"∞":getTotalTime(t)};break;case"labels":t.formatter=function(t,e,s){return system.formetTorrentLabels(t,e.hashString)};break;case"color":t.formatter=function(t,e,s){return $("").html(t).css({"background-color":t,color:getGrayLevel(t)>.5?"#000":"#fff"}).get(0).outerHTML}}},reloadData:function(){this.popoverCount>0?setTimeout(function(){system.reloadData()},2e3):(this.reloadSession(),this.reloading=!1,this.getServerStatus(),this.reloading=!1,this.reloadTorrentBaseInfos())},loadFolderList:function(t){for(var e in this.removeTreeNode("folders-loading"),t){var s=t[e];s&&system.removeTreeNode(s.nodeid)}0!=transmission.downloadDirs.length&&timedChunk(transmission.downloadDirs,this.appendFolder,this,10,function(){"Firefox"==$.ua.browser.name&&$.ua.browser.major<60&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"}),system.initUIStatus()})},appendFolder:function(t){if(t){var e="folders",s=t.replace(/\\/g,"/").split("/"),n="folders-",o="";for(var a in s){var r=s[a];if(""!=r){o+=r,n+=this.B64.encode(r).replace(/[+|\/|=]/g,"0");var i=this.panel.left.tree("find",n),l=transmission.torrents.folders[n];if(l){var d=r+this.showNodeMoreInfos(l.count,l.size);i?this.updateTreeNodeText(n,d):(this.appendTreeNode(e,[{id:n,path:o,downDir:t,text:d,iconCls:"iconfont tr-icon-file"}]),"folders"!=e&&(i=this.panel.left.tree("find",e),this.panel.left.tree("collapse",i.target))),e=n}else this.debug("appendFolder:key",n),this.debug("appendFolder:name",r),this.debug("appendFolder:node",i)}}}},replaceURI:function(t){return t.replace(/(http|https|ftp):\/\/([^/:]+)(:\d*)?([^# ]*)/gi,function(t){return''+t+""})},readConfig:function(){this.readUserConfig();var t=this.getStorageData(this.configHead+".system");for(var e in t&&(this.config=$.extend(!0,this.config,JSON.parse(t))),this.storageKeys.dictionary)this.dictionary[e]=this.getStorageData(this.storageKeys.dictionary[e])},saveConfig:function(){for(var t in this.setStorageData(this.configHead+".system",JSON.stringify(this.config)),this.storageKeys.dictionary)this.setStorageData(this.storageKeys.dictionary[t],this.dictionary[t]);this.saveUserConfig()},saveLabelsConfig:function(t,e){system.config.nav.labels&&(0==e.length?delete system.config.labelMaps[t]:system.config.labelMaps[t]=e)},readUserConfig:function(){var t=window.localStorage[this.configHead];if(t){var e=JSON.parse(t);this.userConfig=$.extend(!0,this.userConfig,e)}},saveUserConfig:function(){window.localStorage[this.configHead]=JSON.stringify(this.userConfig)},uploadTorrentFile:function(t,e,s,n){if(window.FileReader){var o=$("input[id='"+t+"']")[0].files;$.each(o,function(t,a){transmission.addTorrentFromFile(a,e,s,n,o.length)})}else alert(system.lang.public["text-browsers-not-support-features"])},checkUpdate:function(){$.ajax({url:this.checkUpdateScript,dataType:"json",success:function(t){if(t&&t.tag_name){var e=t.created_at.substr(0,10).replace(/-/g,""),s=t.tag_name;if(-1!=$.inArray(s,system.config.ignoreVersion))return;if(system.codeupdate "+t.name);var n=$(""),o=t.body.replace(/\r\n/g,""),a=$("").appendTo(n);$('').html(t.name+" ("+e+")").appendTo(a).linkbutton(),$("").html(" ").appendTo(a),$('').html(system.lang.public["text-how-to-update"]).appendTo(a).linkbutton(),$("").html(" ").appendTo(a),$("').html(system.lang.public["text-ignore-this-version"]).appendTo(a).linkbutton(),$("").appendTo(n),$("").html(o).appendTo(n),$("#button-download-update").webuiPopover({content:n.html(),backdrop:!0})}else $("#area-update-infos").hide()}}})},addIgnoreVersion:function(t){-1==$.inArray(t,system.config.ignoreVersion)&&(this.config.ignoreVersion.push(t),this.saveConfig()),$("#button-download-update").webuiPopover("hide"),$("#area-update-infos").hide()},changeLanguages:function(t){t!=this.lang.name&&t&&(this.config.defaultLang=t,this.saveConfig(),location.href="?lang="+t)},getStorageData:function(t,e){return null==window.localStorage[t]?e:window.localStorage[t]},setStorageData:function(t,e){window.localStorage[t]=e},openDialogFromTemplate:function(t){if(null!=(t=$.extend(!0,{id:null,options:null,datas:null,type:0},t)).id){var e=t.id,s=t.options,n=t.datas,o=$("#"+e);if(o.length){if(n&&$.each(n,function(t,e){o.data(t,e)}),0==t.type&&o.attr("type")==t.type)return o.dialog("open"),void o.dialog({content:system.templates[e]});if(0!=system.popoverCount)return void setTimeout(function(){system.openDialogFromTemplate(t)},350);o.remove()}var a={title:"",width:100,height:100,resizable:!1,cache:!0,content:system.lang.dialog["system-config"].loading,modal:!0};s=$.extend(!0,a,s),o=$("").attr({id:e,type:t.type}).appendTo(document.body),0==t.type?o.dialog(s):(o.css({width:s.width,height:s.height}).data("popoverSource",t.source),$(t.source).webuiPopover({url:"#"+e,title:s.title,width:s.width,height:s.height-18,padding:!1,onHide:function(s){$(t.source).webuiPopover("destroy"),$("#"+e).remove(),$(s).remove(),system.popoverCount--,t.onClose&&t.onClose(t.source)},onShow:function(){system.popoverCount++}})),$.get(system.rootPath+"template/"+e+".html?time="+new Date,function(s){system.templates[e]=s,n&&$.each(n,function(t,s){$("#"+e).data(t,s)}),0==t.type?$("#"+e).dialog({content:s}):(o.html(s),$.parser.parse("#"+e),$(t.source).webuiPopover("show"))})}},debug:function(t,e){window.console&&window.console.log&&window.console.log(t,e)},initThemes:function(){this.themes&&$("#select-themes").combobox({groupField:"group",data:this.themes,editable:!1,panelHeight:"auto",onChange:function(t){var e=(t+";").split(";"),s=e[0],n=e[1]||"logo.png";$("#styleEasyui").attr("href","tr-web-control/script/easyui/themes/"+s+"/easyui.css"),$("#logo").attr("src","tr-web-control/"+n),system.config.theme=t,system.saveConfig()},onLoadSuccess:function(){$(this).combobox("setValue",system.config.theme||"default")}})},getValidTreeKey:function(t){return t?this.B64.encode(t).replace(/[+|\/|=]/g,"0"):""}};function fileFilter(t,e){for(var s=new RegExp(e||".*"),n=new Array,o=0;o').insertAfter("#torrent-files-filter").combobox({valueField:"desc",textField:"desc",panelWidth:400,panelHeight:"auto",formatter:function(t){return''+t.text+''+t.desc+""}}).combobox("loadData",s).combobox("setValue",t)}function pagerFilter(t){var e,s=!1;if("number"==typeof t.length&&"function"==typeof t.splice&&(t={total:t.length,rows:t}),e="torrent-files-table"==this.id){var n=$("#torrent-files-filter-string").val();if(s=t.filterString!==n||t.filterString&&t.originalRows.length==t.unfilteredRows.length){t.torrentId=system.currentTorrentId;var o=t.unfilteredRows||t.originalRows||t.rows,a=fileFilter(o,n);t.originalRows=a,t.total=a.length,t.unfilteredRows||(t.unfilteredRows=o),t.filterString=n}}var r=$(this),i=r.datagrid("options"),l=r.datagrid("getPager"),d=r.data("buttons");l.pagination({onSelectPage:function(e,s){i.pageNumber=e,i.pageSize=s,l.pagination("refresh",{pageNumber:e,pageSize:s}),r.datagrid("loadData",t)},buttons:d}),t.originalRows||(t.originalRows=t.rows);var c=s?0:(i.pageNumber-1)*parseInt(i.pageSize),u=c+parseInt(i.pageSize);if(t.rows=t.originalRows.slice(c,u),d&&d.length)for(var f=0;f";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=""+this.lang.title.list+"";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){$("").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;i0){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=$("").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').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").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=="-"){$("").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=$("");if(ids){if(typeof(ids)=="string"){ids=ids.split(",");} +for(var i=0;i").html(item.name).css({"background-color":item.color,"color":(getGrayLevel(item.color)>0.5?"#000":"#fff")}).appendTo(box);}}} +var button=$("").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=[];$("").html(text).appendTo(this.panel.status_text);for(var index=0;index").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;index0.5?"#000":"#fff")});}}},showNodeMoreInfos:function(count,size){var result="";if(count>0){result=" ("+count+")";} +if(size>0){result+="["+formatSize(size)+"]";} +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"+status+"";}else if(torrents[index].warning){status=""+status+"";} +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;index0){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)&¤tTypeDatas.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 ''+torrent.name+'';},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 ''+ +''+percentCheckText+'%'+ +''+ +''+ +'';} +progress=progress+"%";return ''+progress+'';},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)+""+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>3);for(var test=0x80;test>0&&piece>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');} +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:''+system.lang.torrent.attribute["priority"][stats.priority]+''});} +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 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']=' '+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 ''+(value==-1?"∞":value)+'';};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=$("").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 ''+url+'';});},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 "+result.name);var content=$("");var html=result.body.replace(/\r\n/g,"");var toolbar=$("").appendTo(content);$('').html(result.name+" ("+update+")").appendTo(toolbar).linkbutton();$("").html(" ").appendTo(toolbar);$('').html(system.lang["public"]["text-how-to-update"]).appendTo(toolbar).linkbutton();$("").html(" ").appendTo(toolbar);$('').html(system.lang["public"]["text-ignore-this-version"]).appendTo(toolbar).linkbutton();$("").appendTo(content);$("").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=$("").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').insertAfter("#torrent-files-filter").combobox({valueField:'desc',textField:'desc',panelWidth:400,panelHeight:'auto',formatter:function(row){var s=''+row.text+''+ +''+row.desc+'';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'; + rowdata['address'] = ' ' + ip; } // 使用同类已有的翻译文本 diff --git a/src/tr-web-control/template/dialog-system-config.html b/src/tr-web-control/template/dialog-system-config.html index d700a8b..1b55a91 100644 --- a/src/tr-web-control/template/dialog-system-config.html +++ b/src/tr-web-control/template/dialog-system-config.html @@ -406,6 +406,9 @@ +