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("~/"),