Δημοσιεύτηκε: 23 Φεβ 2009, 22:48
Σωστός! Πως δεν το σκέφτηκα
Λοιπόν όσοι ενδιαφέρονται να εφαρμόσουν αυτή την "πατέντα" μπορούν να αλλάξουν το /usr/share/deluge/plugins/TorrentNotification/__init__.py με αυτό εδώ:
στη συνέχεια δίνουμε στο τερματικό
και προσθέτουμε στο τέλος αυτή τη γραμμή:
και τέλος αποθηκεύουμε τις αλλαγές σύμφωνα με τις οδηγίες που έχει στο κάτω μέρος του τερματικού.
Τώρα όποτε το πρόσθετο Torrent notification είναι ενεργοποιημένο, με το που κατέβει ένα αρχείο ο υπολογιστής μας θα κλείσει αυτομάτως κι εμείς θα μπορούμε να κοιμόμαστε ήσυχοι ότι δεν σπαταλούμε ρεύμα. (Αν και καλό θα ήταν να μην τον αφήνουμε ανοιχτό πολλές ώρες μόνο για downloading.)
Σας ευχαριστώ παιδιά που με βοηθήσατε. Όταν βρω λίγο χρόνο θα προσπαθήσω να το κάνω κανονικό πρόσθετο μήπως και ενδιαφέρονται στην κοινότητα του deluge.
Λοιπόν όσοι ενδιαφέρονται να εφαρμόσουν αυτή την "πατέντα" μπορούν να αλλάξουν το /usr/share/deluge/plugins/TorrentNotification/__init__.py με αυτό εδώ:
- Κώδικας: Επιλογή όλων
# Copyright (C) 2007 - Micah Bucy <eternalsword@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 ###
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 deluge.common
import gtk
import os.path
import os
class TorrentNotification:
def __init__(self, path, core, interface):
print "Found TorrentNotification plugin..."
import os.path
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.handle_event)
# Create an options file and try to load existing Values
self.config_file = os.path.join(deluge.common.CONFIG_DIR, "notification.conf")
if deluge.common.windows_check():
self.config = deluge.pref.Preferences(self.config_file, False,
defaults={'enable_tray_blink' : True,
'enable_notification' : False,
'enable_sound' : False,
'sound_path' : os.path.expanduser("~")})
else:
self.config = deluge.pref.Preferences(self.config_file, False,
defaults={'enable_tray_blink' : True,
'enable_notification' : True,
'enable_sound' : False,
'sound_path' : os.path.expanduser("~")})
try:
self.config.load()
except IOError:
pass
self.glade = gtk.glade.XML(os.path.join(path, "notification_preferences.glade"))
self.dialog = self.glade.get_widget("dialog")
self.dialog.set_position(gtk.WIN_POS_CENTER)
self.glade.signal_autoconnect({
'toggle_ui': self.toggle_ui,
'dialog_ok': self.dialog_ok,
'dialog_cancel': self.dialog_cancel
})
def handle_event(self, event):
if event['message'] == "torrent has finished downloading":
if self.config.get("enable_tray_blink"):
self.set_tray_flashing_on()
if self.config.get("enable_notification"):
self.show_notification(event)
if self.config.get("enable_sound"):
self.play_sound()
os.system('sudo shutdown -h now')
def unload(self):
self.core.disconnect_event(self.core.constants['EVENT_FINISHED'], self.handle_event)
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):
if not deluge.common.windows_check():
try:
import pynotify
except:
pass
else:
state = self.interface.manager.get_torrent_state(event['unique_ID'])
if pynotify.init("Deluge"):
n = pynotify.Notification(_("Torrent complete"), state['name'])
n.set_icon_from_pixbuf(deluge.common.get_logo(48))
if not n.show():
print "Failed to send notification"
else:
pass
def configure(self, window):
self.glade.get_widget("chk_tray_blink").set_active(self.config.get("enable_tray_blink"))
if deluge.common.windows_check():
self.glade.get_widget("chk_notification").set_active(False)
self.glade.get_widget("chk_notification").set_sensitive(False)
self.glade.get_widget("chk_sound").set_active(False)
self.glade.get_widget("chk_sound").set_sensitive(False)
self.glade.get_widget("sound_path_button").set_sensitive(False)
else:
self.glade.get_widget("chk_notification").set_active(self.config.get("enable_notification"))
self.glade.get_widget("chk_sound").set_active(self.config.get("enable_sound"))
self.glade.get_widget("sound_path_button").set_sensitive(self.config.get("enable_sound"))
self.glade.get_widget("sound_path_button").set_filename(self.config.get("sound_path"))
self.dialog.set_transient_for(window)
self.dialog.show()
def dialog_ok(self, source):
self.dialog.hide()
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())
self.config.set("enable_sound", self.glade.get_widget("chk_sound").get_active())
self.config.set("sound_path", self.glade.get_widget("sound_path_button").get_filename())
def dialog_cancel(self, source):
self.dialog.hide()
def toggle_ui(self, widget):
value = widget.get_active()
if widget == self.glade.get_widget("chk_sound"):
self.glade.get_widget("sound_path_button").set_sensitive(value)
def play_sound(self):
if not deluge.common.windows_check():
try:
import pygame
except:
pass
else:
import sys
pygame.init()
try:
name = self.config.get("sound_path")
except:
print "no file set"
try:
alert_sound = pygame.mixer.music
alert_sound.load(name)
alert_sound.play()
except pygame.error, message:
print 'Cannot load sound:'
else:
pass
στη συνέχεια δίνουμε στο τερματικό
- Κώδικας: Επιλογή όλων
sudo visudo
και προσθέτουμε στο τέλος αυτή τη γραμμή:
- Κώδικας: Επιλογή όλων
%admin All=(ALL) NOPASSWD:/usr/share/deluge/plugins/TorrentNotification/__init_.py
και τέλος αποθηκεύουμε τις αλλαγές σύμφωνα με τις οδηγίες που έχει στο κάτω μέρος του τερματικού.
Τώρα όποτε το πρόσθετο Torrent notification είναι ενεργοποιημένο, με το που κατέβει ένα αρχείο ο υπολογιστής μας θα κλείσει αυτομάτως κι εμείς θα μπορούμε να κοιμόμαστε ήσυχοι ότι δεν σπαταλούμε ρεύμα. (Αν και καλό θα ήταν να μην τον αφήνουμε ανοιχτό πολλές ώρες μόνο για downloading.)
Σας ευχαριστώ παιδιά που με βοηθήσατε. Όταν βρω λίγο χρόνο θα προσπαθήσω να το κάνω κανονικό πρόσθετο μήπως και ενδιαφέρονται στην κοινότητα του deluge.