Я пытаюсь создать скрипт для моей волшебной папки, который будет перемещать файлы в каталог раздачи, не теряя при этом KTorrent, где находятся данные, аналогично действию контекстного меню «Переместить данные» в приложении. Я покопался в API dbus, и вот что у меня получилось:
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-интерфейссделать это или даже установить новое местоположение после перемещения вручную.
Я поигрался с идеей сделать это, напрямую манипулируя графическим интерфейсом пользователя, чтобы активировать действие контекстного меню (если бы я смог зайти так далеко, я был бы удовлетворён) и нашёл вот это:
qdbus org.ktorrent.ktorrent /ktorrent/MainWindow_1 org.kde.KMainWindow.activateAction view_move_data
Что делает то, что мне нужно, но всегда для текущего выбранного торрента, и я даже не могу понять первый шаг к выбору торрента, который я на самом деле хочу переместить.
Есть идеи?
решение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