KTorrent: Перемещение данных в скрипте оболочки

KTorrent: Перемещение данных в скрипте оболочки

Я пытаюсь создать скрипт для моей волшебной папки, который будет перемещать файлы в каталог раздачи, не теряя при этом 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

Связанный контент