KTorrent: Movendo dados em um script de shell

KTorrent: Movendo dados em um script de shell

Estou tentando criar um script para minha pasta mágica que moverá arquivos para um diretório de propagação sem que o KTorrent perca o controle de onde os dados estão, semelhante à ação do menu de contexto "Mover Dados" no aplicativo. Eu vasculhei a API dbus e é isso que tenho até agora:

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

O problema é que não consigo encontrar nada emA APIpara fazer isso, ou mesmo para definir o novo local após movê-lo manualmente.

Brinquei com a ideia de fazer isso manipulando diretamente a GUI para ativar a ação do menu de contexto (se conseguisse chegar tão longe, ficaria satisfeito) e descobri o seguinte:

qdbus org.ktorrent.ktorrent /ktorrent/MainWindow_1 org.kde.KMainWindow.activateAction view_move_data

O que faz o que eu quero, mas sempre para o torrent atualmente selecionado, e não consigo nem descobrir o primeiro passo para selecionar o torrent que realmente quero mover.

Alguma ideia?

Responder1

Encontrei uma solução melhor para o meu problema. Em vez de ter meus downloads concluídos movidos para um diretório específico e depois movidos de volta quando terminar, criei um script KTorrent que captura o sinal finalizado e cria umligação simbólicaaos arquivos no diretório em que desejo vê-los. Quando terminar de usá-los, posso simplesmente excluir o link simbólico e nunca precisar mover os dados reais, o que é muito mais eficiente de qualquer maneira.

Disponibilizei o script e a fonte do pacote aqui:

http://schmunsler.no-ip.org/code/shared/file_linker/

mas postarei o conteúdo do script principal aqui, apenas para garantir.

#!/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

informação relacionada