📄 btg.js
字号:
<!--/* * btg Copyright (C) 2005 Michael Wojciechowski. * Web client written by Johan Str枚m. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *//* * $Id: btg.js,v 1.1.4.17 2007/09/17 15:34:50 wojci Exp $ *//************************************************** * Global variables **************************************************//* This list contains all Status() objects presented in the context * table. Is used from updateContextTable */var contextList = new Array();/* Indicates if we should autoupdate contexts */var doAutoRefresh = 0;/* If window is focused or blurred */var isBlurred = 0;/* Defines if there are no "custom" statusmessages show */var isStatusIdle = 0;/* Context data age, how many seconds since we last got an update of the contexts */var contextsAge = 0;/* Refresh timer */var refreshTimeout = 20;var timerHandle = null;// Constant.var noLimit = -1;// Constant.var bytesPerKiB = 1024;/************************************************** * Functions called from user interface in some * way or another (either via user action or other * events). **************************************************//* sessionList, list existing sessions */function sessionList(){ setStatus("Listing available sessions..."); btg_sessionList(cb_sessionList, cb_sessionList_err);}/* auth, authorize */function auth(){ // !!! var username = encodeURIComponent(document.frm_auth.username.value); var password = encodeURIComponent(document.frm_auth.password.value); document.frm_auth.username.value = ""; document.frm_auth.password.value = ""; setStatus("Logging in " + username + "..."); btg_auth(cb_auth, cb_auth_err, username, password);}/* deauth, deauthorize (logout) */function deauth(){ setStatus("Logging out..."); btg_deauth(cb_deauth, cb_deauth);}/* sessionAttach, attach to a existing session */function sessionAttach(){ var id = document.frm_sessionlist.sessionlist.options[document.frm_sessionlist.sessionlist.selectedIndex].value; setStatus("Attaching to session " + id + "..."); btg_sessionAttach(cb_sessionAttach, cb_sessionAttach_err, id);}/* sessionSetup, setup a new session */function sessionSetup(){ var seedLimit = document.frm_sessionsetup.seedLimit.value; var seedTimeout = document.frm_sessionsetup.seedTimeout.value; if(seedLimit.length == 0) seedLimit = noLimit; if(seedTimeout.length == 0) seedTimeout = noLimit; else // User enters minutes... seedTimeout=seedTimeout*60; setStatus("Setting up new session..."); btg_sessionSetup(cb_sessionSetup, cb_sessionSetup_err, seedLimit, seedTimeout);}/* sessionDetach, detach from the current session */function sessionDetach(){ setStatus("Detaching from session..."); btg_sessionDetach(cb_sessionDetach, cb_sessionDetach_err);}/* sessionQuit, quit the currently attached session */function sessionQuit(){ if(!confirm("Are you realy sure you want to terminate this session and all torrents downloading in it?")) return; setStatus("Terminating session..."); btg_sessionQuit(cb_sessionQuit, cb_sessionQuit_err);}function cleanAllContexts(){ setStatus("Cleaning session..."); btg_cleanAll(cb_cleanAll, cb_cleanAll_err);}function showGlobalLimits(){ setUIState(4); setStatus("Setting global limits."); btg_globallimitstatus(cb_globallimitstatus, cb_globallimitstatus_err);}function cancelGlobalLimits(){ setStatus("Not setting global limits."); setUIState(3);}function setGlobalLimits(){ var eUl = document.getElementById('gupload'); var eDl = document.getElementById('gdownload'); var eMu = document.getElementById('gmaxuploads'); var eMc = document.getElementById('gmaxconn'); var ul, dl, mu, mc; if (eUl.value != "" && parseInt(eUl.value) > 0) { ul = parseInt(eUl.value)*bytesPerKiB; } else { ul = noLimit; } if(eDl.value != "" && parseInt(eDl.value) > 0) { dl = parseInt(eDl.value)*bytesPerKiB; } else { dl = noLimit; } if(eMu.value != "" && parseInt(eMu.value) > 0) { mu = parseInt(eMu.value); } else { mu = noLimit; } if(eMc.value != "" && parseInt(eMc.value) > 0) { mc = parseInt(eMc.value); } else { mc = noLimit; } // Set the limits: btg_globallimit(cb_globallimit, cb_globallimit_err, ul, dl, mu, mc);}/* contextStart, start a specific torrent */function contextStop(id){ setStatus("Stopping torrent..."); btg_contextStop(cb_contextStop, cb_contextStop_err, id);}/* contextStop, stop a specific torrent */function contextStart(id){ setStatus("Starting torrent..."); btg_contextStart(cb_contextStart, cb_contextStart_err, id);}/* contextAbort, remove a specific torrent */function contextAbort(id){ if(!confirm("Are you sure?")) return; var eraseData = 0; if(confirm("Do you want to remove the downloaded data from disk?")) eraseData = 1; setStatus("Deleting torrent..."); btg_contextAbort(cb_contextAbort, cb_contextAbort_err, id, eraseData);}/* contextClean, clean/remove a specific torrent */function contextClean(id){ if(!confirm("Are you sure?")) return; setStatus("Moving torrent..."); btg_contextClean(cb_contextClean, cb_contextClean_err, id);}/* contextPeers, get peer list for a torrent */function contextPeers(id){ setStatus("Getting peers list..."); btg_contextPeers(cb_contextPeers, cb_contextPeers_err, id);}/* contextLimitStatus, get limits for a specific torrent (or a list of torrents, comma delimited) */function contextLimitStatus(id){ setStatus("Getting limit status..."); btg_contextLimitStatus(cb_contextLimitStatus, cb_contextLimitStatus_err, id);}/* toogleContextDetails, toogles the details info for a specific torrent on/off */function toogleContextDetails(id){ var detailsRow= document.getElementById('context_'+id+'_details_row') var controlRow= document.getElementById('context_'+id+'_control_row') if(detailsRow.style.display == '') { detailsRow.style.display='none'; controlRow.style.display='none'; } else { detailsRow.style.display=''; controlRow.style.display=''; }}/* hideAllContextDetails, hides details info for all torrents */function hideAllContextDetails(){ var table = document.getElementById('torrent_table'); for(var x = 0; x < table.rows.length; x++) { var row = table.rows[x]; if(row.id.match(/context_(\d+)_details_row/) || row.id.match(/context_(\d+)_control_row/)) row.style.display='none'; }}/* saveContextLimit, save limits for a specific context */function saveContextLimit(id){ var eUl = document.getElementById('txtUploadLimit_'+id); var eDl = document.getElementById('txtDownloadLimit_'+id); var eSl = document.getElementById('txtSeedLimit_'+id); var eSt = document.getElementById('txtSeedTimeout_'+id); var ul, dl, sl, st; if(eUl.value != "" && parseInt(eUl.value) > 0) ul = parseInt(eUl.value)*bytesPerKiB; else ul = noLimit; if(eDl.value != "" && parseInt(eDl.value) > 0) dl = parseInt(eDl.value)*bytesPerKiB; else dl = noLimit; if(eSl.value != "" && parseInt(eSl.value) > 0) sl = parseInt(eSl.value); else sl = noLimit; if(eSt.value != "" && parseInt(eSt.value) > 0) st = parseInt(eSt.value)*60; else st = noLimit; btg_contextLimit(cb_contextLimit, cb_contextLimit_err, id, ul, dl, sl, st, 0);}/* uploadCheck, called from upload form's onSubmit */function uploadCheck(){ var file = document.getElementById('upload_input'); if(file.value == '') { alert('Please select a file.'); return false; } /* Make sure file ends with .torrent */ if(!file.value.match(/\.torrent$/)) { alert('Only .torrent files allowed.'); return false; } /* Valid file */ setStatus('Uploading torrent...'); return true;}/* Init, called from BODYs onLoad */function init(is_authed, session){ /* Call our timer function (direct now but later once a second) */ timerHandle = setTimeout(timer, 1); if(is_authed == 0) { setUIState(1); setStatus("Waiting for login."); } else if(session == -1) { /* Authed, but no session attached, display session list */ sessionList(); setUIState(2); }else { /* Authed and attached */ setStatus("Loading context list..."); doAutoRefresh = 1; refreshContextList(); setUIState(3); } /* Everything should be loaded now, show main container */ document.getElementById('container').style.display='block'; /* Setup handlers so we dont run when we're not focused */ window.onblur = function(){ isBlurred = true; }; window.onfocus = function(){ isBlurred = false; timer(); };}/** * Updates the UI state. * @param state Value 0 indicates state not known/daemon dead, dont show any controls. * Value 1 indicates not authed, show auth controls. * Value 2 indicates authed but not attached to any session, show attach and create. * Value 3 indicates attached, show context list etc. */function setUIState(state){ if(state == 0) // State unknown/daemon unrechable { document.getElementById('layer_sessions').style.display='none'; document.getElementById('layer_auth').style.display='none'; document.getElementById('attach_button').style.display='none'; document.getElementById('setup_button').style.display='none'; document.getElementById('quit_button').style.display='none'; document.getElementById('refresh_button').style.display='none'; document.getElementById('collapse_button').style.display='none'; document.getElementById('cleanall_button').style.display='none'; document.getElementById('layer_glimit').style.display='none'; document.getElementById('glimit_button').style.display='none'; document.getElementById('glimit_cancel_button').style.display='none'; document.getElementById('glimit_set_button').style.display='none'; document.getElementById('detach_button').style.display='none'; document.getElementById('logout_button').style.display='none'; document.getElementById('upload').style.display='none'; document.getElementById('layer_contexts').style.display='none'; document.getElementById('status_download').style.display='none'; document.getElementById('status_upload').style.display='none'; doAutoRefresh = 0; } else if(state == 1) // Not authorized, show authorize controls. { document.getElementById('layer_auth').style.display='block'; document.getElementById('layer_sessions').style.display='none'; document.getElementById('attach_button').style.display='none'; document.getElementById('setup_button').style.display='none'; document.getElementById('quit_button').style.display='none'; document.getElementById('refresh_button').style.display='none'; document.getElementById('collapse_button').style.display='none'; document.getElementById('cleanall_button').style.display='none'; document.getElementById('layer_glimit').style.display='none'; document.getElementById('glimit_button').style.display='none'; document.getElementById('glimit_cancel_button').style.display='none'; document.getElementById('glimit_set_button').style.display='none'; document.getElementById('detach_button').style.display='none'; document.getElementById('logout_button').style.display='none'; document.getElementById('upload').style.display='none'; document.getElementById('layer_contexts').style.display='none'; document.getElementById('status_download').style.display='none'; document.getElementById('status_upload').style.display='none'; doAutoRefresh = 0; } else if(state == 2) // Authorized, not attached to any session. Show attach and setup controls. { document.getElementById('layer_auth').style.display='none'; document.getElementById('quit_button').style.display='none'; document.getElementById('refresh_button').style.display='none'; document.getElementById('collapse_button').style.display='none'; document.getElementById('cleanall_button').style.display='none'; document.getElementById('layer_glimit').style.display='none'; document.getElementById('glimit_button').style.display='none'; document.getElementById('glimit_cancel_button').style.display='none'; document.getElementById('glimit_set_button').style.display='none'; document.getElementById('detach_button').style.display='none'; document.getElementById('upload').style.display='none'; document.getElementById('layer_contexts').style.display='none'; document.getElementById('status_download').style.display='none'; document.getElementById('status_upload').style.display='none'; document.getElementById('layer_sessions').style.display='block'; document.getElementById('attach_button').style.display='inline'; document.getElementById('setup_button').style.display='inline'; document.getElementById('logout_button').style.display='inline'; doAutoRefresh = 0; } else if(state == 3) // Authorized, attached to a session. Show context list and controls. { document.getElementById('layer_sessions').style.display='none'; document.getElementById('attach_button').style.display='none'; document.getElementById('setup_button').style.display='none'; document.getElementById('refresh_button').style.display='block'; document.getElementById('quit_button').style.display='inline'; document.getElementById('collapse_button').style.display='inline'; document.getElementById('cleanall_button').style.display='inline'; document.getElementById('layer_glimit').style.display='none'; document.getElementById('glimit_button').style.display='inline'; document.getElementById('glimit_cancel_button').style.display='none'; document.getElementById('glimit_set_button').style.display='none'; document.getElementById('detach_button').style.display='inline'; document.getElementById('logout_button').style.display='inline'; document.getElementById('upload').style.display='block'; document.getElementById('layer_contexts').style.display='block'; document.getElementById('status_download').style.display='inline'; document.getElementById('status_upload').style.display='inline'; doAutoRefresh = 1; } else if(state == 4) // Authorized, Set global limits. { // !!! document.getElementById('layer_sessions').style.display='none'; document.getElementById('attach_button').style.display='none'; document.getElementById('setup_button').style.display='none'; document.getElementById('refresh_button').style.display='none'; document.getElementById('quit_button').style.display='inline'; document.getElementById('collapse_button').style.display='none'; document.getElementById('cleanall_button').style.display='none'; document.getElementById('layer_glimit').style.display='block'; document.getElementById('glimit_button').style.display='none'; document.getElementById('glimit_cancel_button').style.display='inline'; document.getElementById('glimit_set_button').style.display='inline'; document.getElementById('detach_button').style.display='inline'; document.getElementById('logout_button').style.display='inline'; document.getElementById('upload').style.display='none'; document.getElementById('layer_contexts').style.display='none'; document.getElementById('status_download').style.display='none'; document.getElementById('status_upload').style.display='none'; doAutoRefresh = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -