KTorrent: Mover datos en un script de shell

KTorrent: Mover datos en un script de shell

Estoy intentando crear un script para mi carpeta mágica que mueva archivos a un directorio de inicialización sin que KTorrent pierda la pista de dónde están los datos, similar a la acción del menú contextual "Mover datos" en la aplicación. He husmeado en la API de dbus y esto es lo que tengo hasta ahora:

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

El problema es que no encuentro nada enLa APIpara hacerlo, o incluso para establecer la nueva ubicación después de moverla manualmente.

Jugué con la idea de hacerlo manipulando directamente la GUI para activar la acción del menú contextual (si pudiera llegar tan lejos estaría satisfecho) y encontré esto:

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

Lo cual hace lo que quiero, pero siempre para el torrent seleccionado actualmente, y ni siquiera puedo descifrar el primer paso para seleccionar el torrent que realmente quiero mover.

¿Algunas ideas?

Respuesta1

Encontré una mejor solución a mi problema. En lugar de mover mis descargas completas a un directorio específico y luego regresarlas cuando terminé con ellas, creé un script KTorrent que capta la señal terminada y crea unenlace simbólicoa los archivos en el directorio en el que quiero verlos. Cuando termine con ellos, puedo simplemente eliminar el enlace simbólico y nunca tener que mover los datos reales, lo cual es mucho más eficiente de todos modos.

He hecho que el script empaquetado y la fuente estén disponibles aquí:

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

pero publicaré el contenido del script principal aquí por si acaso.

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

información relacionada