應用程式版的qbittorrent有內建可以記錄,最後下載路徑的功能,不用每次都重新輸入路徑,但是WebUI的版本卻沒有(也可能是我沒發現?)

沒有這個小功能確實挺麻煩的,因此自行寫個小腳本來解決這個問題。


首先,我們要先裝一個chrome擴充功能,叫做「油猴/篡改猴」(Tampermonkey),是一個可以在想要的網頁上添加自定義js的工具。

下載連結: chrome擴充功能 - Tampermonkey

裝好以後,打開我們的qbittorrent WebUI

image.png

點開Tampermonkey 擴充功能 > 新增腳本

image.png

會新增一個讓你輸入js腳本的頁面

image.png

把以下程式碼貼入 (@match 的IP要換成你自己的)

// ==UserScript==
// @name         qBittorrent WebUI 自動保存最後路徑
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  自動保存最後路徑
// @author       Aidec
// @match        http://192.168.1.156:8080/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=1.156
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    // 設定cookie
    function setCookie(cname, cvalue, exdays) {
        const d = new Date();
        d.setTime(d.getTime() + (exdays*24*60*60*1000));
        let expires = "expires="+ d.toUTCString();
        document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
    }

    // 獲取cookie
    function getCookie(cname) {
        let name = cname + "=";
        let decodedCookie = decodeURIComponent(document.cookie);
        let ca = decodedCookie.split(';');
        for(let i = 0; i <ca.length; i++) {
            let c = ca[i];
            while (c.charAt(0) === ' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name) === 0) {
                return c.substring(name.length, c.length);
            }
        }
        return "";
    }

    // 
    function setupEventListeners() {

        document.querySelector('#downloadLink').addEventListener('click', function() {
            var checkExist = setInterval(function() {
                var iframe = document.getElementById('downloadPage_iframe');
                console.log(iframe);
                if (iframe) {
                    
                    clearInterval(checkExist);
                    var innerDoc = iframe.contentDocument || iframe.contentWindow.document;


                    
                    let autoSavePath = getCookie('autoSavePath');
                    
                    if(autoSavePath) {
                       
                        var savePathInput = innerDoc.querySelector('#savepath');
                        if(savePathInput) { 
                            savePathInput.value = autoSavePath;
                        }
                    }

                    //iframe.onload = function() {

                    var submitButton = innerDoc.querySelector('#submitButton');
                    console.log(submitButton);
                    if (submitButton) {
                        submitButton.addEventListener('click', function() {
                           
                            var savePath = innerDoc.querySelector('#savepath').value;
                            setCookie('autoSavePath', savePath, 7);
                        });
                    }
                    //};
                }
            }, 100); 



        });

    }


    
    setupEventListeners();

    
})();

貼上代碼後,記得儲存

image.png




整個程式的邏輯很簡單,就是按下WebUI 當中的 檔案 > 新增 torrent 連結時,從cookie中讀取自動保存的路徑,自動填入[儲存檔案到] 這個欄位,每次按[下載]時,會自動將目前的保存路徑,更新到cookie內

image.png

這樣就可以實現,記憶最後一次儲存檔案的路徑了。


這邊只是簡單實現一下,有興趣的也能自行再進一步優化,例如改成產生一個下拉選單可以記錄最近十筆的路徑之類的...



[2023/10/31更新] 這個版本是會紀錄最近的10筆路徑,並產生一個下拉選單呈現,變更下拉選單時會自動帶值到保存路徑

// ==UserScript==
// @name         qBittorrent WebUI 自動保存最後路徑
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  https://blog.aidec.tw
// @author       You
// @match        http://192.168.1.156:8080/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=1.156
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
   
    function setCookie(cname, cvalue, exdays) {
        const d = new Date();
        d.setTime(d.getTime() + (exdays*24*60*60*1000));
        let expires = "expires="+ d.toUTCString();
        document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
    }

    function getCookie(cname) {
        let name = cname + "=";
        let decodedCookie = decodeURIComponent(document.cookie);
        let ca = decodedCookie.split(';');
        for(let i = 0; i <ca.length; i++) {
            let c = ca[i];
            while (c.charAt(0) === ' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name) === 0) {
                return c.substring(name.length, c.length);
            }
        }
        return "";
    }
    function updatePathsList(newPath) {
        let paths = getCookie('autoSavePathList');

        
        if (!paths) {
            paths = [];
        } else {
            
            paths = JSON.parse(paths);
        }
        let index = paths.indexOf(newPath);
        if (index > -1) {
            paths.splice(index, 1);
        }

        
        paths.unshift(newPath);

        
        if (paths.length > 10) {
            paths.pop();
        }

        
        setCookie('autoSavePathList', JSON.stringify(paths), 365);
    }
    
    function populateDropdown(paths,innerDoc) {
        let dropdown = document.createElement('select');
        dropdown.id = 'pathDropdown';
        paths.forEach(path => {
            let option = document.createElement('option');
            option.value = path;
            option.textContent = path;
            dropdown.appendChild(option);
        });

        
        let savepathElem = innerDoc.querySelector('#savepath');
        if (savepathElem.nextSibling) {
            savepathElem.parentNode.insertBefore(dropdown, savepathElem.nextSibling);
        } else {
            savepathElem.parentNode.appendChild(dropdown);
        }
        //savepathElem.parentNode.insertBefore(dropdown, savepathElem);

        
        dropdown.addEventListener('change', function() {
            savepathElem.value = dropdown.value;
        });
    }

    
    function setupEventListeners() {



        document.querySelector('#downloadLink').addEventListener('click', function() {
            var checkExist = setInterval(function() {
                var iframe = document.getElementById('downloadPage_iframe');
                console.log(iframe);
                if (iframe) {
                    clearInterval(checkExist);
                    var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
                    
                    let autoSavePath = getCookie('autoSavePath');
                    let pathsString = getCookie('autoSavePathList');
                    let paths = pathsString ? JSON.parse(pathsString) : [autoSavePath];
                    if (paths.length > 0) {
                        populateDropdown(paths,innerDoc);
                    }
                    if(autoSavePath) {
                        var savePathInput = innerDoc.querySelector('#savepath');
                        if(savePathInput) { 
                            savePathInput.value = autoSavePath;
                        }
                    }

                    //iframe.onload = function() {

                    var submitButton = innerDoc.querySelector('#submitButton');
                    console.log(submitButton);
                    if (submitButton) {
                        submitButton.addEventListener('click', function() {
                            var savePath = innerDoc.querySelector('#savepath').value;
                            setCookie('autoSavePath', savePath, 365);
                            updatePathsList(savePath);
                        });
                    }
                    //};
                }
            }, 100); 



        });

    }
    setupEventListeners();
})();



文章轉載或引用,請先告知並保留原文出處與連結!!(單純分享或非營利的只需保留原文出處,不用告知)

原文連結:
https://blog.aidec.tw/post/qbittorrent-web-ui-savepath