KTorrent: 쉘 스크립트에서 데이터 이동

KTorrent: 쉘 스크립트에서 데이터 이동

앱의 "데이터 이동" 컨텍스트 메뉴 작업과 유사하게 KTorrent가 데이터 위치를 잃지 않고 파일을 토렌트 디렉터리로 이동하는 매직 폴더용 스크립트를 만들려고 합니다. 나는 dbus API를 조사했고 이것이 지금까지 내가 가진 것입니다:

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

문제는 아무것도 못찾는다는거응용 프로그래밍 인터페이스이를 위해 수동으로 이동한 후 새 위치를 설정하는 것도 가능합니다.

나는 GUI를 직접 조작하여 상황에 맞는 메뉴 작업을 활성화함으로써 이를 달성하고 싶었고(이 작업을 수행할 수 있다면 기쁠 것입니다) 다음을 발견했습니다.

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

내 필요에 맞게 작동하지만 항상 현재 선택된 토렌트에 대해서만 작동하며 실제로 이동하려는 토렌트를 선택하는 첫 번째 단계조차 모릅니다.

어떤 아이디어가 있나요?

답변1

내 문제에 대한 더 나은 해결책을 찾았습니다. 완료된 다운로드를 특정 디렉터리로 이동한 다음 완료되면 다시 이동하는 대신, 완료된 신호를 포착하고심볼릭 링크내가 보려는 디렉토리의 파일로 이동합니다. 작업이 끝나면 실제 데이터를 이동할 필요 없이 심볼릭 링크를 삭제할 수 있는데, 이는 어쨌든 더 효율적입니다.

여기에 패키지된 스크립트와 소스 코드를 제공했습니다.

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

관련 정보