From 3a482b2f19c0e5005459cd10c76a95aa7fe8c39f Mon Sep 17 00:00:00 2001 From: Andrew Resch Date: Mon, 12 May 2008 06:31:52 +0000 Subject: [PATCH] Implement 'Always show add torrent dialog' and 'Bring to focus' when adding a torrent from an external source. --- deluge/ui/gtkui/addtorrentdialog.py | 74 +++++++++++++++++++---------- deluge/ui/gtkui/dbusinterface.py | 14 +++++- deluge/ui/gtkui/gtkui.py | 2 + deluge/ui/gtkui/menubar.py | 4 +- 4 files changed, 63 insertions(+), 31 deletions(-) diff --git a/deluge/ui/gtkui/addtorrentdialog.py b/deluge/ui/gtkui/addtorrentdialog.py index 9fda59892..bafc7406e 100644 --- a/deluge/ui/gtkui/addtorrentdialog.py +++ b/deluge/ui/gtkui/addtorrentdialog.py @@ -46,16 +46,15 @@ from deluge.configmanager import ConfigManager from deluge.log import LOG as log import deluge.common -class AddTorrentDialog: - def __init__(self, parent=None): +class AddTorrentDialog(component.Component): + def __init__(self): + component.Component.__init__(self, "AddTorrentDialog") self.glade = gtk.glade.XML( pkg_resources.resource_filename( "deluge.ui.gtkui", "glade/add_torrent_dialog.glade")) self.dialog = self.glade.get_widget("dialog_add_torrent") - self.dialog.set_transient_for(component.get("MainWindow").window) - self.glade.signal_autoconnect({ "on_button_file_clicked": self._on_button_file_clicked, "on_button_url_clicked": self._on_button_url_clicked, @@ -128,7 +127,39 @@ class AddTorrentDialog: "default_private" ] self.core_config = {} + + def start(self): + self.update_core_config() + def show(self, focus=False): + self.update_core_config() + + if client.is_localhost(): + self.glade.get_widget("button_location").show() + self.glade.get_widget("entry_download_path").hide() + else: + self.glade.get_widget("button_location").hide() + self.glade.get_widget("entry_download_path").show() + + self.dialog.set_transient_for(component.get("MainWindow").window) + self.dialog.present() + if focus: + self.dialog.window.focus() + + return None + + def hide(self): + self.dialog.hide() + self.files = {} + self.infos = {} + self.options = {} + self.previous_selected_torrent = None + self.torrent_liststore.clear() + self.files_treestore.clear() + self.dialog.set_transient_for(component.get("MainWindow").window) + return None + + def update_core_config(self): # Send requests to the core for these config values for key in self.core_keys: client.get_config_value(self._on_config_value, key) @@ -136,29 +167,14 @@ class AddTorrentDialog: # Force a call to the core because we need this data now client.force_call() self.set_default_options() - - def show(self): - self.dialog.show_all() - if client.is_localhost(): - self.glade.get_widget("button_location").show() - self.glade.get_widget("entry_download_path").hide() - else: - self.glade.get_widget("button_location").hide() - self.glade.get_widget("entry_download_path").show() - - return None - - def hide(self): - self.dialog.destroy() - return None - + def _on_config_value(self, value): for key in self.core_keys: if not self.core_config.has_key(key): self.core_config[key] = value break - def add_to_torrent_list(self, filenames): + def add_from_files(self, filenames): import deluge.libtorrent as lt import os.path @@ -210,6 +226,9 @@ class AddTorrentDialog: self.prepare_file_store(files_list) + if self.core_config == {}: + self.update_core_config() + # Save the previous torrents options self.save_torrent_options() # Update the options frame @@ -454,7 +473,7 @@ class AddTorrentDialog: return chooser.destroy() - self.add_to_torrent_list(result) + self.add_from_files(result) def _on_button_url_clicked(self, widget): log.debug("_on_button_url_clicked") @@ -491,15 +510,18 @@ class AddTorrentDialog: # add it to the list. log.debug("url: %s", url) if url != None: - gobject.idle_add(self.download_from_url, url) + self.add_from_url(url) entry.set_text("") dialog.hide() - def download_from_url(self, url): + def add_from_url(self, url): + gobject.idle_add(self._download_from_url, url) + + def _download_from_url(self, url): import urllib filename, headers = urllib.urlretrieve(url) - self.add_to_torrent_list([filename]) + self.add_from_files([filename]) def _on_button_hash_clicked(self, widget): log.debug("_on_button_hash_clicked") @@ -553,7 +575,7 @@ class AddTorrentDialog: client.add_torrent_file(torrent_filenames, torrent_options) client.force_call() - self.dialog.destroy() + self.hide() def _on_button_apply_clicked(self, widget): log.debug("_on_button_apply_clicked") diff --git a/deluge/ui/gtkui/dbusinterface.py b/deluge/ui/gtkui/dbusinterface.py index 08aa1a33e..e5e68f907 100644 --- a/deluge/ui/gtkui/dbusinterface.py +++ b/deluge/ui/gtkui/dbusinterface.py @@ -48,11 +48,13 @@ elif dbus.version >= (0,80,0): import deluge.component as component from deluge.ui.client import aclient as client import deluge.common +from deluge.configmanager import ConfigManager from deluge.log import LOG as log class DbusInterface(dbus.service.Object, component.Component): def __init__(self, args, path="/org/deluge_torrent/Deluge"): component.Component.__init__(self, "DbusInterface") + self.config = ConfigManager("gtkui.conf") # Check to see if the daemon is already running and if not, start it bus = dbus.SessionBus() obj = bus.get_object("org.freedesktop.DBus", "/org/freedesktop/DBus") @@ -106,10 +108,18 @@ class DbusInterface(dbus.service.Object, component.Component): if deluge.common.is_url(arg): log.debug("Attempting to add %s from external source..", arg) - client.add_torrent_url(arg) + if self.config["interactive_add"]: + component.get("AddTorrentDialog").add_from_url(arg) + component.get("AddTorrentDialog").show(self.config["focus_add_dialog"]) + else: + client.add_torrent_url(arg) else: # Just a file log.debug("Attempting to add %s from external source..", os.path.abspath(arg)) - client.add_torrent_file([os.path.abspath(arg)]) + if self.config["interactive_add"]: + component.get("AddTorrentDialog").add_from_files([os.path.abspath(arg)]) + component.get("AddTorrentDialog").show(self.config["focus_add_dialog"]) + else: + client.add_torrent_file([os.path.abspath(arg)]) diff --git a/deluge/ui/gtkui/gtkui.py b/deluge/ui/gtkui/gtkui.py index 6ca4f0446..a3cfa083a 100644 --- a/deluge/ui/gtkui/gtkui.py +++ b/deluge/ui/gtkui/gtkui.py @@ -59,6 +59,7 @@ from signals import Signals from pluginmanager import PluginManager from dbusinterface import DbusInterface from queuedtorrents import QueuedTorrents +from addtorrentdialog import AddTorrentDialog from coreconfig import CoreConfig import deluge.configmanager import deluge.common @@ -146,6 +147,7 @@ class GtkUI: self.preferences = Preferences() self.systemtray = SystemTray() self.statusbar = StatusBar() + self.addtorrentdialog = AddTorrentDialog() # Start the signal receiver self.signal_receiver = Signals() diff --git a/deluge/ui/gtkui/menubar.py b/deluge/ui/gtkui/menubar.py index 7b736644a..964d9fd4f 100644 --- a/deluge/ui/gtkui/menubar.py +++ b/deluge/ui/gtkui/menubar.py @@ -201,9 +201,7 @@ class MenuBar(component.Component): ## File Menu ## def on_menuitem_addtorrent_activate(self, data=None): log.debug("on_menuitem_addtorrent_activate") - from addtorrentdialog import AddTorrentDialog - #client.add_torrent_file(AddTorrentDialog().run()) - AddTorrentDialog().show() + component.get("AddTorrentDialog").show() def on_menuitem_quitdaemon_activate(self, data=None): log.debug("on_menuitem_quitdaemon_activate")