我正在尝试为我的神奇文件夹创建一个脚本,它将文件移动到种子目录,而 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
问题是我找不到任何东西应用程序编程接口为此,甚至可以在手动移动后设置新位置。
我想通过直接操作 GUI 来激活上下文菜单操作来实现这一点(如果我能做到这一点,我会很满意),并发现了这一点:
qdbus org.ktorrent.ktorrent /ktorrent/MainWindow_1 org.kde.KMainWindow.activateAction view_move_data
它可以满足我的需求,但总是针对当前选择的 torrent,而且我什至不知道选择我真正想要移动的 torrent 的第一步。
有任何想法吗?
答案1
我找到了更好的解决方案来解决我的问题。我没有将已完成的下载移至特定目录,然后在完成后移回,而是制作了一个 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