Scripting
KTorrent:在 shell 腳本中移動數據
我正在嘗試為我的魔法文件夾製作一個腳本,它將文件移動到播種目錄,而 KTorrent 不會失去數據的位置,類似於應用程序中的“移動數據”上下文菜單操作。我已經瀏覽了 dbus API,這就是我目前所擁有的:
for x in `qdbus org.ktorrent.ktorrent /core org.ktorrent.core.torrents`; do name=`qdbus org.ktorrent.ktorrent /torrent/$x org.ktorrent.torrent.name` if [ "$name" = "$1" ]; then # Tell KTorrent to move the data to the seeding directory fi done
問題是我在API中找不到任何東西來執行此操作,甚至在手動移動後無法設置新位置。
我想通過直接操作 GUI 來啟動上下文菜單操作(如果我能做到這一點,我會很滿意),並發現了這一點:
qdbus org.ktorrent.ktorrent /ktorrent/MainWindow_1 org.kde.KMainWindow.activateAction view_move_data
哪個可以滿足我的要求,但始終適用於目前選擇的種子,我什至無法弄清楚選擇我真正想要移動的種子的第一步。
有任何想法嗎?
我找到了一個更好的解決我的問題的方法。我沒有將完成的下載移動到特定目錄,然後在完成後移回,而是製作了一個 KTorrent 腳本,它擷取完成的信號並創建指向我想要查看的目錄中的文件的符號連結。 . 當我完成它們後,我可以刪除符號連結,而不必移動實際數據,這無論如何都會更有效率。
我在這裡提供了打包的腳本和原始碼:
http://schmunsler.no-ip.org/code/shared/file_linker/
但我會在這裡發布主腳本的內容以防萬一。
#!/usr/bin/env kross # -*- coding: utf-8 -*- import KTorrent import KTScriptingPlugin import Kross import os import socket class FileLinker: def __init__(self): self.link_dir = KTScriptingPlugin.readConfigEntry("downloads","completedDir",os.path.expanduser("~/"))+"/" if self.link_dir.startswith("file://"): self.link_dir = self.link_dir[7:] KTorrent.log("linkDir is "+self.link_dir) KTorrent.connect("torrentAdded(const QString &)",self.torrentAdded) tors = KTorrent.torrents() # bind to signals for each torrent for t in tors: self.torrentAdded(t) def torrentFinished(self,tor): KTorrent.log("Symlinking "+tor.pathOnDisk()+" to "+self.link_dir+tor.name()) os.symlink(""+tor.pathOnDisk(),""+self.link_dir+tor.name()) def connectSignals(self,tor): KTorrent.log("connectSignals " + tor.name()) tor.connect("finished(QObject* )",self.torrentFinished) def torrentAdded(self,ih): tor = KTorrent.torrent(ih) self.connectSignals(tor) # load settings linker = FileLinker() def unload(): global linker del linker