mirror of
https://git.deluge-torrent.org/deluge
synced 2025-08-03 06:58:42 +00:00
[GTKUI] Remove old and unneeded code
* Notifications now handled by plugin so remove gtkui code. * path_join is better done by os.path.join and replace.
This commit is contained in:
parent
caf35bcdf4
commit
dd764a09a8
4 changed files with 2 additions and 186 deletions
|
@ -640,61 +640,6 @@ def is_ip(ip):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def path_join(*parts):
|
|
||||||
"""
|
|
||||||
An implementation of os.path.join that always uses / for the separator
|
|
||||||
to ensure that the correct paths are produced when working with internal
|
|
||||||
paths on Windows.
|
|
||||||
"""
|
|
||||||
path = ''
|
|
||||||
for part in parts:
|
|
||||||
if not part:
|
|
||||||
continue
|
|
||||||
elif part[0] == '/':
|
|
||||||
path = part
|
|
||||||
elif not path:
|
|
||||||
path = part
|
|
||||||
else:
|
|
||||||
path += '/' + part
|
|
||||||
return path
|
|
||||||
|
|
||||||
XML_ESCAPES = (
|
|
||||||
('&', '&'),
|
|
||||||
('<', '<'),
|
|
||||||
('>', '>'),
|
|
||||||
('"', '"'),
|
|
||||||
("'", ''')
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def xml_decode(string):
|
|
||||||
"""
|
|
||||||
Unescape a string that was previously encoded for use within xml.
|
|
||||||
|
|
||||||
:param string: The string to escape
|
|
||||||
:type string: string
|
|
||||||
:returns: The unescaped version of the string.
|
|
||||||
:rtype: string
|
|
||||||
"""
|
|
||||||
for char, escape in XML_ESCAPES:
|
|
||||||
string = string.replace(escape, char)
|
|
||||||
return string
|
|
||||||
|
|
||||||
|
|
||||||
def xml_encode(string):
|
|
||||||
"""
|
|
||||||
Escape a string for use within an xml element or attribute.
|
|
||||||
|
|
||||||
:param string: The string to escape
|
|
||||||
:type string: string
|
|
||||||
:returns: An escaped version of the string.
|
|
||||||
:rtype: string
|
|
||||||
"""
|
|
||||||
for char, escape in XML_ESCAPES:
|
|
||||||
string = string.replace(char, escape)
|
|
||||||
return string
|
|
||||||
|
|
||||||
|
|
||||||
def decode_string(s, encoding="utf8"):
|
def decode_string(s, encoding="utf8"):
|
||||||
"""
|
"""
|
||||||
Decodes a string and return unicode. If it cannot decode using
|
Decodes a string and return unicode. If it cannot decode using
|
||||||
|
|
|
@ -18,7 +18,7 @@ from hashlib import sha1 as sha
|
||||||
|
|
||||||
import deluge.configmanager
|
import deluge.configmanager
|
||||||
from deluge import bencode
|
from deluge import bencode
|
||||||
from deluge.common import path_join, utf8_encoded
|
from deluge.common import utf8_encoded
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -304,7 +304,7 @@ class FileTree2(object):
|
||||||
"""
|
"""
|
||||||
def walk(directory, parent_path):
|
def walk(directory, parent_path):
|
||||||
for path in directory["contents"].keys():
|
for path in directory["contents"].keys():
|
||||||
full_path = path_join(parent_path, path)
|
full_path = os.path.join(parent_path, path).replace("\\", "/")
|
||||||
if directory["contents"][path]["type"] == "dir":
|
if directory["contents"][path]["type"] == "dir":
|
||||||
directory["contents"][path] = callback(full_path, directory["contents"][path]
|
directory["contents"][path] = callback(full_path, directory["contents"][path]
|
||||||
) or directory["contents"][path]
|
) or directory["contents"][path]
|
||||||
|
|
|
@ -126,7 +126,6 @@ class MainWindow(component.Component):
|
||||||
self.config.register_set_function("show_rate_in_title", self._on_set_show_rate_in_title, apply_now=False)
|
self.config.register_set_function("show_rate_in_title", self._on_set_show_rate_in_title, apply_now=False)
|
||||||
|
|
||||||
client.register_event_handler("NewVersionAvailableEvent", self.on_newversionavailable_event)
|
client.register_event_handler("NewVersionAvailableEvent", self.on_newversionavailable_event)
|
||||||
client.register_event_handler("TorrentFinishedEvent", self.on_torrentfinished_event)
|
|
||||||
|
|
||||||
def connect_signals(self, mapping_or_class):
|
def connect_signals(self, mapping_or_class):
|
||||||
self.gtk_builder_signals_holder.connect_signals(mapping_or_class)
|
self.gtk_builder_signals_holder.connect_signals(mapping_or_class)
|
||||||
|
@ -324,10 +323,6 @@ class MainWindow(component.Component):
|
||||||
from deluge.ui.gtkui.new_release_dialog import NewReleaseDialog
|
from deluge.ui.gtkui.new_release_dialog import NewReleaseDialog
|
||||||
reactor.callLater(5.0, NewReleaseDialog().show, new_version)
|
reactor.callLater(5.0, NewReleaseDialog().show, new_version)
|
||||||
|
|
||||||
def on_torrentfinished_event(self, torrent_id):
|
|
||||||
from deluge.ui.gtkui.notification import Notification
|
|
||||||
Notification().notify(torrent_id)
|
|
||||||
|
|
||||||
def is_on_active_workspace(self):
|
def is_on_active_workspace(self):
|
||||||
"""Determines if MainWindow is on the active workspace.
|
"""Determines if MainWindow is on the active workspace.
|
||||||
|
|
||||||
|
|
|
@ -1,124 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# Copyright (C) 2008 Marcos Mobley ('markybob') <markybob@gmail.com>
|
|
||||||
#
|
|
||||||
# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with
|
|
||||||
# the additional special exception to link portions of this program with the OpenSSL library.
|
|
||||||
# See LICENSE for more details.
|
|
||||||
#
|
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
import deluge.common
|
|
||||||
import deluge.component as component
|
|
||||||
from deluge.configmanager import ConfigManager
|
|
||||||
from deluge.ui.gtkui.common import get_logo
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class Notification:
|
|
||||||
def __init__(self):
|
|
||||||
self.config = ConfigManager("gtkui.conf")
|
|
||||||
self.tray = component.get("SystemTray")
|
|
||||||
|
|
||||||
def notify(self, torrent_id):
|
|
||||||
if self.config["ntf_tray_blink"]:
|
|
||||||
self.tray.blink(True)
|
|
||||||
if self.config["ntf_popup"] or self.config["ntf_email"]:
|
|
||||||
self.get_torrent_status(torrent_id)
|
|
||||||
|
|
||||||
def get_torrent_status(self, torrent_id):
|
|
||||||
component.get("SessionProxy").get_torrent_status(torrent_id, [
|
|
||||||
"name", "num_files", "total_payload_download"
|
|
||||||
]).addCallback(self._on_get_torrent_status)
|
|
||||||
|
|
||||||
def _on_get_torrent_status(self, status):
|
|
||||||
if status is None:
|
|
||||||
return
|
|
||||||
if status["total_payload_download"]:
|
|
||||||
if self.config["ntf_popup"]:
|
|
||||||
self.popup(status)
|
|
||||||
if self.config["ntf_email"]:
|
|
||||||
self.email(status)
|
|
||||||
if self.config["ntf_sound"]:
|
|
||||||
self.sound()
|
|
||||||
|
|
||||||
def popup(self, status):
|
|
||||||
"""popups up notification of finished torrent"""
|
|
||||||
if not deluge.common.windows_check():
|
|
||||||
try:
|
|
||||||
import pynotify
|
|
||||||
except:
|
|
||||||
log.warning("pynotify is not installed")
|
|
||||||
else:
|
|
||||||
if not pynotify.init("Deluge"):
|
|
||||||
return
|
|
||||||
title = deluge.common.xml_encode(_("Torrent complete"))
|
|
||||||
message = deluge.common.xml_encode("%s\n%s %i %s" % (status["name"],
|
|
||||||
_("Including"), status["num_files"], _("files")))
|
|
||||||
self.note = pynotify.Notification(title, message)
|
|
||||||
self.note.set_icon_from_pixbuf(get_logo(48))
|
|
||||||
if not self.note.show():
|
|
||||||
log.warning("pynotify failed to show notification")
|
|
||||||
|
|
||||||
def sound(self):
|
|
||||||
"""plays a sound when a torrent finishes"""
|
|
||||||
try:
|
|
||||||
import pygame
|
|
||||||
except:
|
|
||||||
log.warning("pygame is not installed")
|
|
||||||
else:
|
|
||||||
pygame.init()
|
|
||||||
try:
|
|
||||||
alert_sound = pygame.mixer.music
|
|
||||||
alert_sound.load(self.config["ntf_sound_path"])
|
|
||||||
alert_sound.play()
|
|
||||||
except pygame.error as ex:
|
|
||||||
log.warning("pygame failed to play because %s", ex)
|
|
||||||
else:
|
|
||||||
log.info("sound notification played successfully")
|
|
||||||
|
|
||||||
def email(self, status):
|
|
||||||
"""sends email notification of finished torrent"""
|
|
||||||
import smtplib
|
|
||||||
headers = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (
|
|
||||||
self.config["ntf_email_add"], self.config["ntf_email_add"],
|
|
||||||
"Finished torrent %s" % (status["name"]))
|
|
||||||
text = _("This email is to inform you that Deluge has finished "
|
|
||||||
"downloading %(name)s , which includes %(num_files)i files.\n"
|
|
||||||
"To stop receiving these alerts, simply turn off email "
|
|
||||||
"notification in Deluge's preferences.\n\n"
|
|
||||||
"Thank you,\nDeluge") % {"name": status["name"],
|
|
||||||
"num_files": status["num_files"]}
|
|
||||||
message = headers + text
|
|
||||||
if self.config["ntf_security"] == 'SSL':
|
|
||||||
port = 465
|
|
||||||
elif self.config["ntf_security"] == 'TLS':
|
|
||||||
port = 587
|
|
||||||
elif self.config["ntf_security"] is None:
|
|
||||||
port = 25
|
|
||||||
try:
|
|
||||||
mail_server = smtplib.SMTP(self.config["ntf_server"], port)
|
|
||||||
except Exception as ex:
|
|
||||||
log.error("There was an error sending the notification email: %s", ex)
|
|
||||||
return
|
|
||||||
|
|
||||||
if self.config["ntf_username"] and self.config["ntf_pass"]:
|
|
||||||
if self.config["ntf_security"] == 'SSL' or 'TLS':
|
|
||||||
mail_server.ehlo('x')
|
|
||||||
mail_server.starttls()
|
|
||||||
mail_server.ehlo('x')
|
|
||||||
try:
|
|
||||||
mail_server.login(self.config["ntf_username"], self.config["ntf_pass"])
|
|
||||||
except smtplib.SMTPHeloError:
|
|
||||||
log.warning("The server didn't reply properly to the helo greeting")
|
|
||||||
except smtplib.SMTPAuthenticationError:
|
|
||||||
log.warning("The server didn't accept the username/password combination")
|
|
||||||
try:
|
|
||||||
mail_server.sendmail(self.config["ntf_email_add"], self.config["ntf_email_add"], message)
|
|
||||||
mail_server.quit()
|
|
||||||
except:
|
|
||||||
log.warning("sending email notification of finished torrent failed")
|
|
||||||
else:
|
|
||||||
log.info("sending email notification of finished torrent was successful")
|
|
Loading…
Add table
Add a link
Reference in a new issue