diff --git a/glade/preferences_dialog.glade b/glade/preferences_dialog.glade
index b7cc5dabd..5c4e4b86e 100644
--- a/glade/preferences_dialog.glade
+++ b/glade/preferences_dialog.glade
@@ -308,6 +308,7 @@
True
0
True
+
False
@@ -333,6 +334,19 @@
1
+
+
+ True
+ True
+ Automatically clear torrents that reach the max share ratio
+ True
+ 0
+ True
+
+
+ 2
+
+
diff --git a/src/dialogs.py b/src/dialogs.py
index 104230c2d..188e86218 100644
--- a/src/dialogs.py
+++ b/src/dialogs.py
@@ -46,6 +46,7 @@ class PreferencesDlg:
'on_chk_use_tray_toggled': self.tray_toggle,
'on_save_all_to' : self.toggle_move_chk,
'on_ask_save' : self.toggle_move_chk,
+ 'on_chk_autoseed' : self.toggle_clear_max_ratio_torrents_chk,
'on_btn_testport_clicked': self.TestPort,
})
@@ -98,6 +99,8 @@ class PreferencesDlg:
self.glade.get_widget("spin_torrents").set_value(float(self.preferences.get("max_active_torrents")))
self.glade.get_widget("chk_seedbottom").set_active(self.preferences.get("queue_seeds_to_bottom"))
self.glade.get_widget("chk_autoseed").set_active(self.preferences.get("auto_end_seeding"))
+ self.glade.get_widget("chk_clear_max_ratio_torrents").set_sensitive(self.preferences.get("auto_end_seeding"))
+ self.glade.get_widget("chk_clear_max_ratio_torrents").set_active(self.preferences.get("clear_max_ratio_torrents"))
self.glade.get_widget("ratio_spinner").set_value(self.preferences.get("auto_seed_ratio"))
self.glade.get_widget("chk_dht").set_active(self.preferences.get("enable_dht"))
self.glade.get_widget("spin_gui").set_value(self.preferences.get("gui_update_interval"))
@@ -146,6 +149,7 @@ class PreferencesDlg:
self.preferences.set("queue_seeds_to_bottom", self.glade.get_widget("chk_seedbottom").get_active())
self.preferences.set("enable_dht", self.glade.get_widget("chk_dht").get_active())
self.preferences.set("gui_update_interval", self.glade.get_widget("spin_gui").get_value())
+ self.preferences.set("clear_max_ratio_torrents", self.glade.get_widget("chk_clear_max_ratio_torrents").get_active())
return r
@@ -160,6 +164,13 @@ class PreferencesDlg:
self.glade.get_widget("chk_lock_tray").set_sensitive(is_active)
self.glade.get_widget("txt_tray_passwd").set_sensitive(is_active)
+ def toggle_clear_max_ratio_torrents_chk(self, widget):
+ if(self.glade.get_widget("chk_autoseed").get_active()):
+ self.glade.get_widget("chk_clear_max_ratio_torrents").set_sensitive(True)
+ else:
+ self.glade.get_widget("chk_clear_max_ratio_torrents").set_active(False)
+ self.glade.get_widget("chk_clear_max_ratio_torrents").set_sensitive(False)
+
def toggle_move_chk(self, widget):
if(self.glade.get_widget("radio_ask_save").get_active()):
self.glade.get_widget("chk_move_completed").set_active(False)
diff --git a/src/interface.py b/src/interface.py
index 1ff12433a..c0fc3928f 100644
--- a/src/interface.py
+++ b/src/interface.py
@@ -847,14 +847,28 @@ class DelugeGTK:
while itr is not None:
uid = self.torrent_model.get_value(itr, 0)
- state = self.manager.get_torrent_state(uid)
- tlist = self.get_list_from_unique_id(uid)
- for i in range(len(tlist)):
- try:
- self.torrent_model.set_value(itr, i, tlist[i])
- except:
- print "ERR", i, type(tlist[i]), tlist[i]
- itr = self.torrent_model.iter_next(itr)
+ if self.manager.removed_unique_ids.count(uid) > 0:
+ selected_unique_id = self.get_selected_torrent()
+ # If currently selected torrent was complete and so removed clear
+ # details pane
+ if selected_unique_id == uid:
+ self.clear_details_pane()
+ next = self.torrent_model.iter_next(itr)
+ self.torrent_model.remove(itr)
+ itr = self.torrent_model.get_iter_first()
+ if itr is None:
+ return True
+ itr = next
+ self.manager.removed_unique_ids.pop(self.manager.removed_unique_ids.index(uid))
+ else:
+ state = self.manager.get_torrent_state(uid)
+ tlist = self.get_list_from_unique_id(uid)
+ for i in range(len(tlist)):
+ try:
+ self.torrent_model.set_value(itr, i, tlist[i])
+ except:
+ print "ERR", i, type(tlist[i]), tlist[i]
+ itr = self.torrent_model.iter_next(itr)
# Disable moving top torrents up or bottom torrents down
top_torrents_selected = True
@@ -1194,16 +1208,7 @@ class DelugeGTK:
def clear_finished(self, obj=None):
print "Clearing completed torrents"
- unique_ids_remove = self.manager.clear_completed()
- for unique_id in unique_ids_remove:
- self.torrent_model_remove(unique_id)
-
- selected_unique_id = self.get_selected_torrent()
- # If currently selected torrent was complete and so removed clear
- # details pane
- if selected_unique_id in unique_ids_remove:
- self.clear_details_pane()
-
+ self.manager.clear_completed()
self.update()
def q_torrent_up(self, obj=None):
diff --git a/src/pref.py b/src/pref.py
index eace2c707..f13bba35e 100644
--- a/src/pref.py
+++ b/src/pref.py
@@ -42,6 +42,7 @@ DEFAULT_PREFS = {
"auto_seed_ratio" : 0,
"close_to_tray" : False,
"enable_files_dialog" : False,
+ "clear_max_ratio_torrents" : False,
"default_download_path" : os.path.expanduser("~/"),
"default_load_path" : os.path.expanduser("~/"),
"default_finished_path" : os.path.expanduser("~/"),