DjLegolas ec0bcc11f5
Upgrade codebase with pyupgrade (>=py3.6)
Added pyupgrade utility with manual stage to pre-commit and run on all
files.

Ref: https://github.com/asottile/pyupgrade
Closes: deluge-torrent/deluge#326
2021-12-29 21:51:07 +00:00

163 lines
5.3 KiB
Python

#
# Copyright (C) 2009 Damien Churchill <damoxc@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 gi # isort:skip (Required before Gtk import).
gi.require_version('Gtk', '3.0') # NOQA: E402
# isort:imports-thirdparty
from gi.repository import Gtk
# isort:imports-firstparty
import deluge.component as component
from deluge.plugins.pluginbase import Gtk3PluginBase
from deluge.ui.client import client
# isort:imports-localfolder
from . import common
log = logging.getLogger(__name__)
EXECUTE_ID = 0
EXECUTE_EVENT = 1
EXECUTE_COMMAND = 2
EVENT_MAP = {
'complete': _('Torrent Complete'),
'added': _('Torrent Added'),
'removed': _('Torrent Removed'),
}
EVENTS = ['complete', 'added', 'removed']
class ExecutePreferences:
def __init__(self, plugin):
self.plugin = plugin
def load(self):
log.debug('Adding Execute Preferences page')
self.builder = Gtk.Builder()
self.builder.add_from_file(common.get_resource('execute_prefs.ui'))
self.builder.connect_signals(self)
events = self.builder.get_object('event_combobox')
store = Gtk.ListStore(str, str)
for event in EVENTS:
event_label = EVENT_MAP[event]
store.append((event_label, event))
events.set_model(store)
events.set_active(0)
self.plugin.add_preferences_page(
_('Execute'), self.builder.get_object('execute_box')
)
self.plugin.register_hook('on_show_prefs', self.load_commands)
self.plugin.register_hook('on_apply_prefs', self.on_apply_prefs)
self.load_commands()
client.register_event_handler(
'ExecuteCommandAddedEvent', self.on_command_added_event
)
client.register_event_handler(
'ExecuteCommandRemovedEvent', self.on_command_removed_event
)
def unload(self):
self.plugin.remove_preferences_page(_('Execute'))
self.plugin.deregister_hook('on_apply_prefs', self.on_apply_prefs)
self.plugin.deregister_hook('on_show_prefs', self.load_commands)
def add_command(self, command_id, event, command):
log.debug('Adding command `%s`', command_id)
vbox = self.builder.get_object('commands_vbox')
hbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, spacing=5)
hbox.set_name(command_id + '_' + event)
label = Gtk.Label(EVENT_MAP[event])
entry = Gtk.Entry()
entry.set_text(command)
button = Gtk.Button()
button.set_name('remove_%s' % command_id)
button.connect('clicked', self.on_remove_button_clicked)
img = Gtk.Image()
img.set_from_stock(Gtk.STOCK_REMOVE, Gtk.IconSize.BUTTON)
button.set_image(img)
hbox.pack_start(label, False, False, 0)
hbox.pack_start(entry, False, False, 0)
hbox.pack_start(button, True, True, 0)
hbox.show_all()
vbox.pack_start(hbox, True, True, 0)
def remove_command(self, command_id):
vbox = self.builder.get_object('commands_vbox')
children = vbox.get_children()
for child in children:
if child.get_name().split('_')[0] == command_id:
vbox.remove(child)
break
def clear_commands(self):
vbox = self.builder.get_object('commands_vbox')
children = vbox.get_children()
for child in children:
vbox.remove(child)
def load_commands(self):
def on_get_commands(commands):
self.clear_commands()
log.debug('on_get_commands: %s', commands)
for command in commands:
command_id, event, command = command
self.add_command(command_id, event, command)
client.execute.get_commands().addCallback(on_get_commands)
def on_add_button_clicked(self, *args):
command = self.builder.get_object('command_entry').get_text()
events = self.builder.get_object('event_combobox')
event = events.get_model()[events.get_active()][1]
client.execute.add_command(event, command)
def on_remove_button_clicked(self, widget, *args):
command_id = widget.get_name().replace('remove_', '')
client.execute.remove_command(command_id)
def on_apply_prefs(self):
vbox = self.builder.get_object('commands_vbox')
children = vbox.get_children()
for child in children:
command_id, event = child.get_name().split('_')
for widget in child.get_children():
if isinstance(widget, Gtk.Entry):
command = widget.get_text()
client.execute.save_command(command_id, event, command)
def on_command_added_event(self, command_id, event, command):
log.debug('Adding command %s: %s', event, command)
self.add_command(command_id, event, command)
def on_command_removed_event(self, command_id):
log.debug('Removing command %s', command_id)
self.remove_command(command_id)
class GtkUI(Gtk3PluginBase):
def enable(self):
self.plugin = component.get('PluginManager')
self.preferences = ExecutePreferences(self.plugin)
self.preferences.load()
def disable(self):
self.preferences.unload()