앱의 "데이터 이동" 컨텍스트 메뉴 작업과 유사하게 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