2007-08-19 23:16:10 +00:00
# Copyright (C) 2007 - Marcos Pinto <markybob@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
### Initialization ###
2007-11-22 00:02:06 +00:00
plugin_name = " Move Torrent "
2007-08-19 23:16:10 +00:00
plugin_author = " Marcos Pinto "
2007-09-30 18:32:19 +00:00
plugin_version = " 0.2 "
2007-08-19 23:16:10 +00:00
plugin_description = _ ( " This plugin allows users to move the torrent to a \
2007-08-27 06:03:16 +00:00
different directory without having to remove and re - add the torrent . This \
feature can be found by right - clicking on a torrent . \nFurthermore , it \
allows the user to automatically have finished torrents moved to a different \
2008-06-06 07:27:35 +00:00
folder . " )
2007-08-19 23:16:10 +00:00
def deluge_init ( deluge_path ) :
global path
path = deluge_path
def enable ( core , interface ) :
global path
return movetorrentMenu ( path , core , interface )
import deluge
from deluge import dialogs
import gtk
2007-12-14 01:19:39 +00:00
import os . path
2007-08-19 23:16:10 +00:00
2007-08-20 02:28:51 +00:00
DEFAULT_PREFS = {
2007-12-14 01:19:39 +00:00
" default_finished_path " : os . path . expanduser ( " ~ " ) ,
2007-08-20 02:28:51 +00:00
" enable_move_completed " : False
}
2007-08-19 23:16:10 +00:00
class movetorrentMenu :
def __init__ ( self , path , core , interface ) :
2008-01-06 19:53:47 +00:00
print " Found MoveTorrent plugin... "
2007-08-19 23:16:10 +00:00
self . path = path
self . core = core
self . interface = interface
2007-08-20 02:28:51 +00:00
self . window = self . interface . window
2007-08-19 23:16:10 +00:00
self . dialogs = deluge . dialogs
2007-08-20 02:28:51 +00:00
self . core . connect_event ( self . core . constants [ ' EVENT_STORAGE_MOVED ' ] , self . handle_event )
self . core . connect_event ( self . core . constants [ ' EVENT_FINISHED ' ] , self . handle_event )
2007-12-14 01:19:39 +00:00
self . glade = gtk . glade . XML ( os . path . join ( path , " movetorrent.glade " ) )
2007-08-20 02:28:51 +00:00
self . glade . signal_autoconnect ( {
' dialog_ok ' : self . dialog_ok ,
' dialog_cancel ' : self . dialog_cancel
} )
self . dialog = self . glade . get_widget ( " dialog " )
self . dialog . set_position ( gtk . WIN_POS_CENTER )
2007-12-14 01:19:39 +00:00
self . config_file = os . path . join ( deluge . common . CONFIG_DIR , " move_torrent.conf " )
2007-08-20 02:28:51 +00:00
self . config = deluge . pref . Preferences ( self . config_file , global_defaults = False , defaults = DEFAULT_PREFS )
try :
self . config . load ( )
except IOError :
pass
2007-08-19 23:16:10 +00:00
2008-02-12 20:57:46 +00:00
self . moveitem_image = gtk . Image ( )
self . moveitem_image . set_from_stock ( gtk . STOCK_SAVE_AS , gtk . ICON_SIZE_MENU )
self . moveitem = gtk . ImageMenuItem ( _ ( " _Move Torrent " ) )
self . moveitem . set_image ( self . moveitem_image )
self . moveitem . connect ( " activate " , self . movetorrent_clicked )
self . interface . torrent_menu . append ( self . moveitem )
self . moveitem . show_all ( )
self . switchitem_image = gtk . Image ( )
self . switchitem_image . set_from_stock ( gtk . STOCK_CONVERT , gtk . ICON_SIZE_MENU )
self . switchitem = gtk . ImageMenuItem ( _ ( " _Switch Torrent Source " ) )
self . switchitem . set_image ( self . switchitem_image )
self . switchitem . connect ( " activate " , self . switchtorrent_clicked )
self . interface . torrent_menu . append ( self . switchitem )
self . switchitem . show_all ( )
2007-08-19 23:16:10 +00:00
def update ( self ) :
pass
def unload ( self ) :
2008-02-12 20:57:46 +00:00
self . interface . torrent_menu . remove ( self . moveitem )
self . interface . torrent_menu . remove ( self . switchitem )
2007-08-20 02:28:51 +00:00
self . core . disconnect_event ( self . core . constants [ ' EVENT_STORAGE_MOVED ' ] , self . handle_event )
self . core . disconnect_event ( self . core . constants [ ' EVENT_FINISHED ' ] , self . handle_event )
self . config . save ( self . config_file )
2007-08-19 23:16:10 +00:00
def movetorrent_clicked ( self , widget ) :
unique_ids = self . interface . get_selected_torrent_rows ( )
path = self . dialogs . show_directory_chooser_dialog ( None , \
_ ( " Choose a directory to move files to " ) )
if path :
2007-09-17 09:55:48 +00:00
self . paused_or_not = { }
for unique_id in unique_ids :
self . core . move_storage ( unique_id , path )
2007-08-20 02:28:51 +00:00
2008-02-12 20:57:46 +00:00
def switchtorrent_clicked ( self , widget ) :
self . interface . torrent_switch_recheck ( switch = True )
2007-08-20 02:28:51 +00:00
def configure ( self , window ) :
try :
self . glade . get_widget ( " chk_move_completed " ) . set_active ( self . config . get ( " enable_move_completed " ) )
self . glade . get_widget ( " finished_path_button " ) . set_filename ( self . config . get ( " default_finished_path " ) )
except :
self . glade . get_widget ( " chk_move_completed " ) . set_active ( False )
self . glade . get_widget ( " default_finished_path " ) . set_active ( False )
self . dialog . set_transient_for ( window )
self . dialog . show ( )
def dialog_ok ( self , source ) :
self . dialog . hide ( )
self . config . set ( " enable_move_completed " , self . glade . get_widget ( " chk_move_completed " ) . get_active ( ) )
self . config . set ( " default_finished_path " , self . glade . get_widget ( " finished_path_button " ) . get_filename ( ) )
def dialog_cancel ( self , source ) :
self . dialog . hide ( )
def handle_event ( self , event ) :
if event [ ' event_type ' ] is self . core . constants [ ' EVENT_STORAGE_MOVED ' ] :
if event [ ' message ' ] == self . core . unique_IDs [ event [ ' unique_ID ' ] ] . save_dir :
2008-06-06 19:48:13 +00:00
self . dialogs . show_popup_warning ( self . window , " An error occured while trying to move the torrent. Please check your permissions and note that you cannot move a torrent ' s files to the same directory that they are already stored or move a torrent ' s files before any of its files have actually been created. " )
2007-08-20 02:28:51 +00:00
self . core . unique_IDs [ event [ ' unique_ID ' ] ] . save_dir = event [ ' message ' ]
self . core . pickle_state ( )
elif event [ ' event_type ' ] is self . core . constants [ ' EVENT_FINISHED ' ] :
if event [ ' message ' ] == " torrent has finished downloading " :
if self . config . get ( ' enable_move_completed ' ) and \
self . config . get ( ' default_finished_path ' ) != \
self . core . get_pref ( ' default_download_path ' ) and \
self . core . unique_IDs [ event [ ' unique_ID ' ] ] . save_dir != \
self . config . get ( ' default_finished_path ' ) :
self . core . move_storage ( event [ ' unique_ID ' ] ,
self . config . get ( ' default_finished_path ' ) )