diff --git a/plugins/TorrentNotification/__init__.py b/plugins/TorrentNotification/__init__.py new file mode 100644 index 000000000..9266cf1fc --- /dev/null +++ b/plugins/TorrentNotification/__init__.py @@ -0,0 +1,100 @@ +# Copyright (C) 2007 - Micah Bucy +# +# 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 ### + +plugin_name = _("Torrent Notification") +plugin_author = "Micah Bucy" +plugin_version = "0.1" +plugin_description = _("Make tray icon blink when torrent finishes downloading and/or popup a notification") + +def deluge_init(deluge_path): + global path + path = deluge_path + +def enable(core, interface): + global path + return TorrentNotification(path, core, interface) + +### The Plugin ### +import deluge +import gtk + +class TorrentNotification: + + def __init__(self, path, core, interface): + print "Loading TorrentNotification plugin..." + self.path = path + self.core = core + self.interface = interface + self.window = self.interface.window + self.window.connect("focus_in_event", self.set_tray_flashing_off) + self.core.connect_event(self.core.constants['EVENT_FINISHED'], self) + + # Create an options file and try to load existing Values + self.config_file = deluge.common.CONFIG_DIR + "/notification.conf" + self.config = deluge.pref.Preferences() + try: + self.config.load(self.config_file) + except IOError: + # File does not exist + pass + + self.glade = gtk.glade.XML(path + "/notification_preferences.glade") + self.dialog = self.glade.get_widget("dialog") + + def handle_event(self, event): + if self.config.get("enable_tray_blink"): + self.set_tray_flashing_on() + if self.config.get("enable_notification"): + self.show_notification(event) + + def unload(self): + self.config.save(self.config_file) + + def set_tray_flashing_off(self, focusdata1, focusdata2): + self.interface.tray_icon.set_blinking(False) + + def set_tray_flashing_on(self): + if self.window.has_toplevel_focus() is not True: + self.interface.tray_icon.set_blinking(True) + + + def show_notification(self, event): + import pynotify + file_info = self.interface.manager.get_torrent_file_info(event['unique_ID']) + self.filelist = "" + for file in file_info: + self.filelist += file['path']+"\n" + if pynotify.init("My Application Name"): + n = pynotify.Notification("Torrent complete", "Files:\n"+self.filelist) + n.show() + else: + print "there was a problem initializing the pynotify module" + + def configure(self): + try: + self.glade.get_widget("chk_tray_blink").set_active(self.config.get("enable_tray_blink")) + self.glade.get_widget("chk_notification").set_active(self.config.get("enable_notification")) + except: + self.glade.get_widget("chk_tray_blink").set_active(False) + self.glade.get_widget("chk_notification").set_active(False) + self.dialog.show() + response = self.dialog.run() + self.dialog.hide() + if response: + self.config.set("enable_tray_blink", self.glade.get_widget("chk_tray_blink").get_active()) + self.config.set("enable_notification", self.glade.get_widget("chk_notification").get_active()) diff --git a/plugins/TorrentNotification/notification_preferences.glade b/plugins/TorrentNotification/notification_preferences.glade new file mode 100644 index 000000000..65520dc6e --- /dev/null +++ b/plugins/TorrentNotification/notification_preferences.glade @@ -0,0 +1,94 @@ + + + + + + 5 + Torrent Notification Preferences + 313 + 167 + False + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK + 2 + + + True + 2 + 1 + + + True + True + Enable blinking tray icon + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 1 + 2 + + + + + True + True + Enable popup notification + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 1 + 2 + 1 + 2 + + + + + 1 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK + GTK_BUTTONBOX_END + + + True + gtk-cancel + True + + + + + True + gtk-ok + True + 1 + + + 1 + + + + + False + GTK_PACK_END + + + + + + diff --git a/plugins/TrayBlink/__init__.py b/plugins/TrayBlink/__init__.py deleted file mode 100644 index 123c272e7..000000000 --- a/plugins/TrayBlink/__init__.py +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright (C) 2007 - Micah Bucy -# -# 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 ### - -plugin_name = _("Tray Blink") -plugin_author = "Micah Bucy" -plugin_version = "0.1" -plugin_description = _("Make tray icon blink when torrent finishes downloading") - -def deluge_init(deluge_path): - global path - path = deluge_path - -def enable(core, interface): - global path - return TrayBlink(path, core, interface) - -### The Plugin ### - -import deluge -import gtk - -class TrayBlink: - - def __init__(self, path, core, interface): - print "Loading TrayBlink plugin..." - self.path = path - self.core = core - self.interface = interface - self.window = self.interface.window - self.window.connect("focus_in_event", self.set_tray_flashing_off) - self.core.connect_event(self.core.constants['EVENT_FINISHED'], self) - - def handle_event(self, event): - self.set_tray_flashing_on() - - def set_tray_flashing_off(self, focusdata1, focusdata2): - self.interface.tray_icon.set_blinking(False) - - def set_tray_flashing_on(self): - if self.window.has_toplevel_focus() is not True: - self.interface.tray_icon.set_blinking(True) -