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