アプリの「データ移動」コンテキストメニュー操作と同様に、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