mirror of
https://git.deluge-torrent.org/deluge
synced 2025-08-03 15:08:40 +00:00
[GTK3] Migrate plugins to GTK3
Add a new Gtk3PluginBase to prevent problems with Gtk2 plugins.
This commit is contained in:
parent
4df5bd05ec
commit
c51e01ac46
37 changed files with 209 additions and 197 deletions
|
@ -25,12 +25,12 @@ class CorePlugin(PluginInitBase):
|
||||||
super(CorePlugin, self).__init__(plugin_name)
|
super(CorePlugin, self).__init__(plugin_name)
|
||||||
|
|
||||||
|
|
||||||
class GtkUIPlugin(PluginInitBase):
|
class Gtk3UIPlugin(PluginInitBase):
|
||||||
def __init__(self, plugin_name):
|
def __init__(self, plugin_name):
|
||||||
from .gtkui import GtkUI as _pluginCls
|
from .gtkui import GtkUI as _pluginCls
|
||||||
|
|
||||||
self._plugin_cls = _pluginCls
|
self._plugin_cls = _pluginCls
|
||||||
super(GtkUIPlugin, self).__init__(plugin_name)
|
super(Gtk3UIPlugin, self).__init__(plugin_name)
|
||||||
|
|
||||||
|
|
||||||
class WebUIPlugin(PluginInitBase):
|
class WebUIPlugin(PluginInitBase):
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.24"/>
|
<requires lib="gtk+" version="3.0"/>
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
<!-- interface-naming-policy toplevel-contextual -->
|
||||||
<object class="GtkAdjustment" id="adjustment1">
|
<object class="GtkAdjustment" id="adjustment1">
|
||||||
<property name="lower">-1</property>
|
<property name="lower">-1</property>
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.22.1 -->
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.24"/>
|
<requires lib="gtk+" version="3.0"/>
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
|
||||||
<object class="GtkWindow" id="prefs_window">
|
<object class="GtkWindow" id="prefs_window">
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox9">
|
<object class="GtkHBox" id="hbox9">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
|
|
@ -17,14 +17,21 @@ from __future__ import unicode_literals
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import gtk
|
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.common
|
import deluge.common
|
||||||
import deluge.component as component
|
import deluge.component as component
|
||||||
from deluge.plugins.pluginbase import GtkPluginBase
|
from deluge.plugins.pluginbase import Gtk3PluginBase
|
||||||
from deluge.ui.client import client
|
from deluge.ui.client import client
|
||||||
from deluge.ui.gtkui import dialogs
|
from deluge.ui.gtk3 import dialogs
|
||||||
|
|
||||||
|
# isort:imports-localfolder
|
||||||
from .common import get_resource
|
from .common import get_resource
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
@ -47,14 +54,15 @@ class OptionsDialog(object):
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.accounts = gtk.ListStore(str)
|
log.critical('I')
|
||||||
self.labels = gtk.ListStore(str)
|
self.accounts = Gtk.ListStore(str)
|
||||||
|
self.labels = Gtk.ListStore(str)
|
||||||
self.core_config = {}
|
self.core_config = {}
|
||||||
|
|
||||||
def show(self, options=None, watchdir_id=None):
|
def show(self, options=None, watchdir_id=None):
|
||||||
if options is None:
|
if options is None:
|
||||||
options = {}
|
options = {}
|
||||||
self.builder = gtk.Builder()
|
self.builder = Gtk.Builder()
|
||||||
self.builder.add_from_file(get_resource('autoadd_options.ui'))
|
self.builder.add_from_file(get_resource('autoadd_options.ui'))
|
||||||
self.builder.connect_signals(
|
self.builder.connect_signals(
|
||||||
{
|
{
|
||||||
|
@ -103,7 +111,7 @@ class OptionsDialog(object):
|
||||||
self.accounts.clear()
|
self.accounts.clear()
|
||||||
self.labels.clear()
|
self.labels.clear()
|
||||||
combobox = self.builder.get_object('OwnerCombobox')
|
combobox = self.builder.get_object('OwnerCombobox')
|
||||||
combobox_render = gtk.CellRendererText()
|
combobox_render = Gtk.CellRendererText()
|
||||||
combobox.pack_start(combobox_render, True)
|
combobox.pack_start(combobox_render, True)
|
||||||
combobox.add_attribute(combobox_render, 'text', 0)
|
combobox.add_attribute(combobox_render, 'text', 0)
|
||||||
combobox.set_model(self.accounts)
|
combobox.set_model(self.accounts)
|
||||||
|
@ -413,10 +421,11 @@ class OptionsDialog(object):
|
||||||
return options
|
return options
|
||||||
|
|
||||||
|
|
||||||
class GtkUI(GtkPluginBase):
|
class GtkUI(Gtk3PluginBase):
|
||||||
def enable(self):
|
def enable(self):
|
||||||
|
log.critical('A')
|
||||||
|
|
||||||
self.builder = gtk.Builder()
|
self.builder = Gtk.Builder()
|
||||||
self.builder.add_from_file(get_resource('config.ui'))
|
self.builder.add_from_file(get_resource('config.ui'))
|
||||||
self.builder.connect_signals(self)
|
self.builder.connect_signals(self)
|
||||||
self.opts_dialog = OptionsDialog()
|
self.opts_dialog = OptionsDialog()
|
||||||
|
@ -434,15 +443,15 @@ class GtkUI(GtkPluginBase):
|
||||||
self.watchdirs = {}
|
self.watchdirs = {}
|
||||||
|
|
||||||
vbox = self.builder.get_object('watchdirs_vbox')
|
vbox = self.builder.get_object('watchdirs_vbox')
|
||||||
sw = gtk.ScrolledWindow()
|
sw = Gtk.ScrolledWindow()
|
||||||
sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
|
sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
|
||||||
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
|
sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
|
||||||
|
|
||||||
vbox.pack_start(sw, True, True, 0)
|
vbox.pack_start(sw, True, True, 0)
|
||||||
|
|
||||||
self.store = self.create_model()
|
self.store = self.create_model()
|
||||||
|
|
||||||
self.treeView = gtk.TreeView(self.store)
|
self.treeView = Gtk.TreeView(self.store)
|
||||||
self.treeView.connect('cursor-changed', self.on_listitem_activated)
|
self.treeView.connect('cursor-changed', self.on_listitem_activated)
|
||||||
self.treeView.connect('row-activated', self.on_edit_button_clicked)
|
self.treeView.connect('row-activated', self.on_edit_button_clicked)
|
||||||
self.treeView.set_rules_hint(True)
|
self.treeView.set_rules_hint(True)
|
||||||
|
@ -464,7 +473,7 @@ class GtkUI(GtkPluginBase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def create_model(self):
|
def create_model(self):
|
||||||
store = gtk.ListStore(str, bool, str, str)
|
store = Gtk.ListStore(str, bool, str, str)
|
||||||
for watchdir_id, watchdir in self.watchdirs.items():
|
for watchdir_id, watchdir in self.watchdirs.items():
|
||||||
store.append(
|
store.append(
|
||||||
[
|
[
|
||||||
|
@ -477,29 +486,29 @@ class GtkUI(GtkPluginBase):
|
||||||
return store
|
return store
|
||||||
|
|
||||||
def create_columns(self, treeview):
|
def create_columns(self, treeview):
|
||||||
renderer_toggle = gtk.CellRendererToggle()
|
renderer_toggle = Gtk.CellRendererToggle()
|
||||||
column = gtk.TreeViewColumn(
|
column = Gtk.TreeViewColumn(
|
||||||
_('Active'), renderer_toggle, activatable=1, active=1
|
_('Active'), renderer_toggle, activatable=1, active=1
|
||||||
)
|
)
|
||||||
column.set_sort_column_id(1)
|
column.set_sort_column_id(1)
|
||||||
treeview.append_column(column)
|
treeview.append_column(column)
|
||||||
tt = gtk.Tooltip()
|
tt = Gtk.Tooltip()
|
||||||
tt.set_text(_('Double-click to toggle'))
|
tt.set_text(_('Double-click to toggle'))
|
||||||
treeview.set_tooltip_cell(tt, None, None, renderer_toggle)
|
treeview.set_tooltip_cell(tt, None, None, renderer_toggle)
|
||||||
|
|
||||||
renderertext = gtk.CellRendererText()
|
renderertext = Gtk.CellRendererText()
|
||||||
column = gtk.TreeViewColumn(_('Owner'), renderertext, text=2)
|
column = Gtk.TreeViewColumn(_('Owner'), renderertext, text=2)
|
||||||
column.set_sort_column_id(2)
|
column.set_sort_column_id(2)
|
||||||
treeview.append_column(column)
|
treeview.append_column(column)
|
||||||
tt2 = gtk.Tooltip()
|
tt2 = Gtk.Tooltip()
|
||||||
tt2.set_text(_('Double-click to edit'))
|
tt2.set_text(_('Double-click to edit'))
|
||||||
treeview.set_has_tooltip(True)
|
treeview.set_has_tooltip(True)
|
||||||
|
|
||||||
renderertext = gtk.CellRendererText()
|
renderertext = Gtk.CellRendererText()
|
||||||
column = gtk.TreeViewColumn(_('Path'), renderertext, text=3)
|
column = Gtk.TreeViewColumn(_('Path'), renderertext, text=3)
|
||||||
column.set_sort_column_id(3)
|
column.set_sort_column_id(3)
|
||||||
treeview.append_column(column)
|
treeview.append_column(column)
|
||||||
tt2 = gtk.Tooltip()
|
tt2 = Gtk.Tooltip()
|
||||||
tt2.set_text(_('Double-click to edit'))
|
tt2.set_text(_('Double-click to edit'))
|
||||||
treeview.set_has_tooltip(True)
|
treeview.set_has_tooltip(True)
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ from setuptools import find_packages, setup
|
||||||
__plugin_name__ = 'AutoAdd'
|
__plugin_name__ = 'AutoAdd'
|
||||||
__author__ = 'Chase Sterling, Pedro Algarvio'
|
__author__ = 'Chase Sterling, Pedro Algarvio'
|
||||||
__author_email__ = 'chase.sterling@gmail.com, pedro@algarvio.me'
|
__author_email__ = 'chase.sterling@gmail.com, pedro@algarvio.me'
|
||||||
__version__ = '1.7'
|
__version__ = '1.8'
|
||||||
__url__ = 'http://dev.deluge-torrent.org/wiki/Plugins/AutoAdd'
|
__url__ = 'http://dev.deluge-torrent.org/wiki/Plugins/AutoAdd'
|
||||||
__license__ = 'GPLv3'
|
__license__ = 'GPLv3'
|
||||||
__description__ = 'Monitors folders for .torrent files.'
|
__description__ = 'Monitors folders for .torrent files.'
|
||||||
|
@ -42,8 +42,8 @@ setup(
|
||||||
entry_points="""
|
entry_points="""
|
||||||
[deluge.plugin.core]
|
[deluge.plugin.core]
|
||||||
%s = deluge.plugins.%s:CorePlugin
|
%s = deluge.plugins.%s:CorePlugin
|
||||||
[deluge.plugin.gtkui]
|
[deluge.plugin.gtk3ui]
|
||||||
%s = deluge.plugins.%s:GtkUIPlugin
|
%s = deluge.plugins.%s:Gtk3UIPlugin
|
||||||
[deluge.plugin.web]
|
[deluge.plugin.web]
|
||||||
%s = deluge.plugins.%s:WebUIPlugin
|
%s = deluge.plugins.%s:WebUIPlugin
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.24"/>
|
<requires lib="gtk+" version="3.0"/>
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
<!-- interface-naming-policy toplevel-contextual -->
|
||||||
<object class="GtkAdjustment" id="adjustment1">
|
<object class="GtkAdjustment" id="adjustment1">
|
||||||
<property name="lower">1</property>
|
<property name="lower">1</property>
|
||||||
|
|
|
@ -12,19 +12,26 @@ from __future__ import unicode_literals
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
import gtk
|
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.common
|
import deluge.common
|
||||||
import deluge.component as component
|
import deluge.component as component
|
||||||
from deluge.plugins.pluginbase import GtkPluginBase
|
from deluge.plugins.pluginbase import Gtk3PluginBase
|
||||||
from deluge.ui.client import client
|
from deluge.ui.client import client
|
||||||
|
|
||||||
|
# isort:imports-localfolder
|
||||||
from . import common
|
from . import common
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class GtkUI(GtkPluginBase):
|
class GtkUI(Gtk3PluginBase):
|
||||||
def enable(self):
|
def enable(self):
|
||||||
log.debug('Blocklist GtkUI enable..')
|
log.debug('Blocklist GtkUI enable..')
|
||||||
self.plugin = component.get('PluginManager')
|
self.plugin = component.get('PluginManager')
|
||||||
|
@ -151,7 +158,7 @@ class GtkUI(GtkPluginBase):
|
||||||
def load_preferences_page(self):
|
def load_preferences_page(self):
|
||||||
"""Initializes the preferences page and adds it to the preferences dialog"""
|
"""Initializes the preferences page and adds it to the preferences dialog"""
|
||||||
# Load the preferences page
|
# Load the preferences page
|
||||||
self.builder = gtk.Builder()
|
self.builder = Gtk.Builder()
|
||||||
self.builder.add_from_file(common.get_resource('blocklist_pref.ui'))
|
self.builder.add_from_file(common.get_resource('blocklist_pref.ui'))
|
||||||
|
|
||||||
self.whitelist_frame = self.builder.get_object('whitelist_frame')
|
self.whitelist_frame = self.builder.get_object('whitelist_frame')
|
||||||
|
@ -203,12 +210,12 @@ class GtkUI(GtkPluginBase):
|
||||||
treeview_selection.connect(
|
treeview_selection.connect(
|
||||||
'changed', self.on_whitelist_treeview_selection_changed
|
'changed', self.on_whitelist_treeview_selection_changed
|
||||||
)
|
)
|
||||||
self.whitelist_model = gtk.ListStore(str, bool)
|
self.whitelist_model = Gtk.ListStore(str, bool)
|
||||||
renderer = gtk.CellRendererText()
|
renderer = Gtk.CellRendererText()
|
||||||
renderer.connect('edited', self.on_cell_edited, self.whitelist_model)
|
renderer.connect('edited', self.on_cell_edited, self.whitelist_model)
|
||||||
renderer.set_data('ip', 0)
|
renderer.set_data('ip', 0)
|
||||||
|
|
||||||
column = gtk.TreeViewColumn('IPs', renderer, text=0, editable=1)
|
column = Gtk.TreeViewColumn('IPs', renderer, text=0, editable=1)
|
||||||
column.set_expand(True)
|
column.set_expand(True)
|
||||||
self.whitelist_treeview.append_column(column)
|
self.whitelist_treeview.append_column(column)
|
||||||
self.whitelist_treeview.set_model(self.whitelist_model)
|
self.whitelist_treeview.set_model(self.whitelist_model)
|
||||||
|
|
|
@ -12,7 +12,7 @@ from setuptools import find_packages, setup
|
||||||
__plugin_name__ = 'Blocklist'
|
__plugin_name__ = 'Blocklist'
|
||||||
__author__ = 'John Garland'
|
__author__ = 'John Garland'
|
||||||
__author_email__ = 'johnnybg+deluge@gmail.com'
|
__author_email__ = 'johnnybg+deluge@gmail.com'
|
||||||
__version__ = '1.3'
|
__version__ = '1.4'
|
||||||
__url__ = 'http://deluge-torrent.org'
|
__url__ = 'http://deluge-torrent.org'
|
||||||
__license__ = 'GPLv3'
|
__license__ = 'GPLv3'
|
||||||
__description__ = 'Download and import IP blocklists'
|
__description__ = 'Download and import IP blocklists'
|
||||||
|
@ -35,7 +35,7 @@ setup(
|
||||||
entry_points="""
|
entry_points="""
|
||||||
[deluge.plugin.core]
|
[deluge.plugin.core]
|
||||||
%s = deluge.plugins.%s:CorePlugin
|
%s = deluge.plugins.%s:CorePlugin
|
||||||
[deluge.plugin.gtkui]
|
[deluge.plugin.gtk3ui]
|
||||||
%s = deluge.plugins.%s:GtkUIPlugin
|
%s = deluge.plugins.%s:GtkUIPlugin
|
||||||
[deluge.plugin.web]
|
[deluge.plugin.web]
|
||||||
%s = deluge.plugins.%s:WebUIPlugin
|
%s = deluge.plugins.%s:WebUIPlugin
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.24"/>
|
<requires lib="gtk+" version="3.0"/>
|
||||||
<!-- interface-naming-policy project-wide -->
|
<!-- interface-naming-policy project-wide -->
|
||||||
<object class="GtkListStore" id="liststore1">
|
<object class="GtkListStore" id="liststore1">
|
||||||
<columns>
|
<columns>
|
||||||
|
|
|
@ -11,16 +11,21 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import gtk
|
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
|
import deluge.component as component
|
||||||
from deluge.plugins.pluginbase import GtkPluginBase
|
from deluge.plugins.pluginbase import Gtk3PluginBase
|
||||||
from deluge.ui.client import client
|
from deluge.ui.client import client
|
||||||
|
|
||||||
|
# isort:imports-localfolder
|
||||||
from . import common
|
from . import common
|
||||||
|
|
||||||
# Relative import
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
EXECUTE_ID = 0
|
EXECUTE_ID = 0
|
||||||
|
@ -42,13 +47,13 @@ class ExecutePreferences(object):
|
||||||
|
|
||||||
def load(self):
|
def load(self):
|
||||||
log.debug('Adding Execute Preferences page')
|
log.debug('Adding Execute Preferences page')
|
||||||
self.builder = gtk.Builder()
|
self.builder = Gtk.Builder()
|
||||||
self.builder.add_from_file(common.get_resource('execute_prefs.ui'))
|
self.builder.add_from_file(common.get_resource('execute_prefs.ui'))
|
||||||
self.builder.connect_signals(self)
|
self.builder.connect_signals(self)
|
||||||
|
|
||||||
events = self.builder.get_object('event_combobox')
|
events = self.builder.get_object('event_combobox')
|
||||||
|
|
||||||
store = gtk.ListStore(str, str)
|
store = Gtk.ListStore(str, str)
|
||||||
for event in EVENTS:
|
for event in EVENTS:
|
||||||
event_label = EVENT_MAP[event]
|
event_label = EVENT_MAP[event]
|
||||||
store.append((event_label, event))
|
store.append((event_label, event))
|
||||||
|
@ -78,17 +83,17 @@ class ExecutePreferences(object):
|
||||||
def add_command(self, command_id, event, command):
|
def add_command(self, command_id, event, command):
|
||||||
log.debug('Adding command `%s`', command_id)
|
log.debug('Adding command `%s`', command_id)
|
||||||
vbox = self.builder.get_object('commands_vbox')
|
vbox = self.builder.get_object('commands_vbox')
|
||||||
hbox = gtk.HBox(False, 5)
|
hbox = Gtk.HBox(False, 5)
|
||||||
hbox.set_name(command_id + '_' + event)
|
hbox.set_name(command_id + '_' + event)
|
||||||
label = gtk.Label(EVENT_MAP[event])
|
label = Gtk.Label(EVENT_MAP[event])
|
||||||
entry = gtk.Entry()
|
entry = Gtk.Entry()
|
||||||
entry.set_text(command)
|
entry.set_text(command)
|
||||||
button = gtk.Button()
|
button = Gtk.Button()
|
||||||
button.set_name('remove_%s' % command_id)
|
button.set_name('remove_%s' % command_id)
|
||||||
button.connect('clicked', self.on_remove_button_clicked)
|
button.connect('clicked', self.on_remove_button_clicked)
|
||||||
|
|
||||||
img = gtk.Image()
|
img = Gtk.Image()
|
||||||
img.set_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_BUTTON)
|
img.set_from_stock(Gtk.STOCK_REMOVE, Gtk.IconSize.BUTTON)
|
||||||
button.set_image(img)
|
button.set_image(img)
|
||||||
|
|
||||||
hbox.pack_start(label, False, False)
|
hbox.pack_start(label, False, False)
|
||||||
|
@ -137,7 +142,7 @@ class ExecutePreferences(object):
|
||||||
for child in children:
|
for child in children:
|
||||||
command_id, event = child.get_name().split('_')
|
command_id, event = child.get_name().split('_')
|
||||||
for widget in child.get_children():
|
for widget in child.get_children():
|
||||||
if isinstance(widget, gtk.Entry):
|
if isinstance(widget, Gtk.Entry):
|
||||||
command = widget.get_text()
|
command = widget.get_text()
|
||||||
client.execute.save_command(command_id, event, command)
|
client.execute.save_command(command_id, event, command)
|
||||||
|
|
||||||
|
@ -150,7 +155,7 @@ class ExecutePreferences(object):
|
||||||
self.remove_command(command_id)
|
self.remove_command(command_id)
|
||||||
|
|
||||||
|
|
||||||
class GtkUI(GtkPluginBase):
|
class GtkUI(Gtk3PluginBase):
|
||||||
def enable(self):
|
def enable(self):
|
||||||
self.plugin = component.get('PluginManager')
|
self.plugin = component.get('PluginManager')
|
||||||
self.preferences = ExecutePreferences(self.plugin)
|
self.preferences = ExecutePreferences(self.plugin)
|
||||||
|
|
|
@ -12,7 +12,7 @@ from setuptools import find_packages, setup
|
||||||
__plugin_name__ = 'Execute'
|
__plugin_name__ = 'Execute'
|
||||||
__author__ = 'Damien Churchill'
|
__author__ = 'Damien Churchill'
|
||||||
__author_email__ = 'damoxc@gmail.com'
|
__author_email__ = 'damoxc@gmail.com'
|
||||||
__version__ = '1.2'
|
__version__ = '1.3'
|
||||||
__url__ = 'http://deluge-torrent.org'
|
__url__ = 'http://deluge-torrent.org'
|
||||||
__license__ = 'GPLv3'
|
__license__ = 'GPLv3'
|
||||||
__description__ = 'Plugin to execute a command upon an event'
|
__description__ = 'Plugin to execute a command upon an event'
|
||||||
|
@ -34,7 +34,7 @@ setup(
|
||||||
entry_points="""
|
entry_points="""
|
||||||
[deluge.plugin.core]
|
[deluge.plugin.core]
|
||||||
%s = deluge.plugins.%s:CorePlugin
|
%s = deluge.plugins.%s:CorePlugin
|
||||||
[deluge.plugin.gtkui]
|
[deluge.plugin.gtk3ui]
|
||||||
%s = deluge.plugins.%s:GtkUIPlugin
|
%s = deluge.plugins.%s:GtkUIPlugin
|
||||||
[deluge.plugin.web]
|
[deluge.plugin.web]
|
||||||
%s = deluge.plugins.%s:WebUIPlugin
|
%s = deluge.plugins.%s:WebUIPlugin
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.24"/>
|
<requires lib="gtk+" version="3.0"/>
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
<!-- interface-naming-policy toplevel-contextual -->
|
||||||
<object class="GtkWindow" id="window1">
|
<object class="GtkWindow" id="window1">
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
|
|
@ -15,20 +15,27 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import gtk
|
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
|
import deluge.component as component
|
||||||
from deluge.plugins.pluginbase import GtkPluginBase
|
from deluge.plugins.pluginbase import Gtk3PluginBase
|
||||||
from deluge.ui.client import client
|
from deluge.ui.client import client
|
||||||
|
|
||||||
|
# isort:imports-localfolder
|
||||||
from .common import get_resource
|
from .common import get_resource
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class GtkUI(GtkPluginBase):
|
class GtkUI(Gtk3PluginBase):
|
||||||
def enable(self):
|
def enable(self):
|
||||||
self.builder = gtk.Builder()
|
self.builder = Gtk.Builder()
|
||||||
self.builder.add_from_file(get_resource('extractor_prefs.ui'))
|
self.builder.add_from_file(get_resource('extractor_prefs.ui'))
|
||||||
|
|
||||||
component.get('Preferences').add_page(
|
component.get('Preferences').add_page(
|
||||||
|
|
|
@ -16,7 +16,7 @@ from setuptools import find_packages, setup
|
||||||
__plugin_name__ = 'Extractor'
|
__plugin_name__ = 'Extractor'
|
||||||
__author__ = 'Andrew Resch'
|
__author__ = 'Andrew Resch'
|
||||||
__author_email__ = 'andrewresch@gmail.com'
|
__author_email__ = 'andrewresch@gmail.com'
|
||||||
__version__ = '0.6'
|
__version__ = '0.7'
|
||||||
__url__ = 'http://deluge-torrent.org'
|
__url__ = 'http://deluge-torrent.org'
|
||||||
__license__ = 'GPLv3'
|
__license__ = 'GPLv3'
|
||||||
__description__ = 'Extract files upon torrent completion'
|
__description__ = 'Extract files upon torrent completion'
|
||||||
|
@ -47,7 +47,7 @@ setup(
|
||||||
entry_points="""
|
entry_points="""
|
||||||
[deluge.plugin.core]
|
[deluge.plugin.core]
|
||||||
%s = deluge.plugins.%s:CorePlugin
|
%s = deluge.plugins.%s:CorePlugin
|
||||||
[deluge.plugin.gtkui]
|
[deluge.plugin.gtk3ui]
|
||||||
%s = deluge.plugins.%s:GtkUIPlugin
|
%s = deluge.plugins.%s:GtkUIPlugin
|
||||||
[deluge.plugin.web]
|
[deluge.plugin.web]
|
||||||
%s = deluge.plugins.%s:WebUIPlugin
|
%s = deluge.plugins.%s:WebUIPlugin
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.24"/>
|
<requires lib="gtk+" version="3.0"/>
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
<!-- interface-naming-policy toplevel-contextual -->
|
||||||
<object class="GtkDialog" id="dlg_label_add">
|
<object class="GtkDialog" id="dlg_label_add">
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
@ -25,7 +25,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="button2">
|
<object class="GtkButton" id="button2">
|
||||||
<property name="label">gtk-cancel</property>
|
<property name="label">gtk-cancel</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -41,7 +40,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="button1">
|
<object class="GtkButton" id="button1">
|
||||||
<property name="label">gtk-ok</property>
|
<property name="label">gtk-ok</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.24"/>
|
<requires lib="gtk+" version="3.0"/>
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
<!-- interface-naming-policy toplevel-contextual -->
|
||||||
<object class="GtkAdjustment" id="adjustment1">
|
<object class="GtkAdjustment" id="adjustment1">
|
||||||
<property name="lower">-1</property>
|
<property name="lower">-1</property>
|
||||||
|
@ -59,7 +59,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="button4">
|
<object class="GtkButton" id="button4">
|
||||||
<property name="label">gtk-cancel</property>
|
<property name="label">gtk-cancel</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -75,7 +74,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="button3">
|
<object class="GtkButton" id="button3">
|
||||||
<property name="label">gtk-ok</property>
|
<property name="label">gtk-ok</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -379,7 +377,6 @@
|
||||||
<child type="label">
|
<child type="label">
|
||||||
<object class="GtkCheckButton" id="apply_max">
|
<object class="GtkCheckButton" id="apply_max">
|
||||||
<property name="label" translatable="yes">Apply per torrent max settings:</property>
|
<property name="label" translatable="yes">Apply per torrent max settings:</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
@ -432,7 +429,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="is_auto_managed">
|
<object class="GtkCheckButton" id="is_auto_managed">
|
||||||
<property name="label" translatable="yes">Auto Managed</property>
|
<property name="label" translatable="yes">Auto Managed</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
@ -446,7 +442,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="stop_at_ratio">
|
<object class="GtkCheckButton" id="stop_at_ratio">
|
||||||
<property name="label" translatable="yes">Stop seed at ratio:</property>
|
<property name="label" translatable="yes">Stop seed at ratio:</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
@ -462,7 +457,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="remove_at_ratio">
|
<object class="GtkCheckButton" id="remove_at_ratio">
|
||||||
<property name="label" translatable="yes">Remove at ratio</property>
|
<property name="label" translatable="yes">Remove at ratio</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
@ -529,7 +523,6 @@
|
||||||
<child type="label">
|
<child type="label">
|
||||||
<object class="GtkCheckButton" id="apply_queue">
|
<object class="GtkCheckButton" id="apply_queue">
|
||||||
<property name="label" translatable="yes">Apply Queue settings:</property>
|
<property name="label" translatable="yes">Apply Queue settings:</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
@ -573,7 +566,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="move_completed">
|
<object class="GtkCheckButton" id="move_completed">
|
||||||
<property name="label" translatable="yes">Move completed to:</property>
|
<property name="label" translatable="yes">Move completed to:</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
@ -631,7 +623,6 @@
|
||||||
<child type="label">
|
<child type="label">
|
||||||
<object class="GtkCheckButton" id="apply_move_completed">
|
<object class="GtkCheckButton" id="apply_move_completed">
|
||||||
<property name="label" translatable="yes">Apply folder settings:</property>
|
<property name="label" translatable="yes">Apply folder settings:</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
@ -711,7 +702,6 @@
|
||||||
<child type="label">
|
<child type="label">
|
||||||
<object class="GtkCheckButton" id="auto_add">
|
<object class="GtkCheckButton" id="auto_add">
|
||||||
<property name="label" translatable="yes">Automatically apply label:</property>
|
<property name="label" translatable="yes">Automatically apply label:</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.24"/>
|
<requires lib="gtk+" version="3.0"/>
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
<!-- interface-naming-policy toplevel-contextual -->
|
||||||
<object class="GtkWindow" id="window1">
|
<object class="GtkWindow" id="window1">
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
|
|
@ -12,7 +12,7 @@ from __future__ import unicode_literals
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from deluge import component # for systray
|
from deluge import component # for systray
|
||||||
from deluge.plugins.pluginbase import GtkPluginBase
|
from deluge.plugins.pluginbase import Gtk3PluginBase
|
||||||
|
|
||||||
from . import label_config, sidebar_menu, submenu
|
from . import label_config, sidebar_menu, submenu
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ def cell_data_label(column, cell, model, row, data):
|
||||||
cell.set_property('text', str(model.get_value(row, data)))
|
cell.set_property('text', str(model.get_value(row, data)))
|
||||||
|
|
||||||
|
|
||||||
class GtkUI(GtkPluginBase):
|
class GtkUI(Gtk3PluginBase):
|
||||||
def start(self):
|
def start(self):
|
||||||
if self.label_menu:
|
if self.label_menu:
|
||||||
self.label_menu.on_show()
|
self.label_menu.on_show()
|
||||||
|
|
|
@ -11,7 +11,7 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from gtk import Builder
|
from gi.repository.Gtk import Builder
|
||||||
|
|
||||||
from deluge.ui.client import client
|
from deluge.ui.client import client
|
||||||
|
|
||||||
|
|
|
@ -12,11 +12,18 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import gtk
|
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
|
import deluge.component as component
|
||||||
from deluge.ui.client import client
|
from deluge.ui.client import client
|
||||||
|
|
||||||
|
# isort:imports-localfolder
|
||||||
from ..common import get_resource
|
from ..common import get_resource
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
@ -33,12 +40,12 @@ class LabelSidebarMenu(object):
|
||||||
self.items = []
|
self.items = []
|
||||||
|
|
||||||
# add items, in reverse order, because they are prepended.
|
# add items, in reverse order, because they are prepended.
|
||||||
sep = gtk.SeparatorMenuItem()
|
sep = Gtk.SeparatorMenuItem()
|
||||||
self.items.append(sep)
|
self.items.append(sep)
|
||||||
self.menu.prepend(sep)
|
self.menu.prepend(sep)
|
||||||
self._add_item('options', _('Label _Options'), gtk.STOCK_PREFERENCES)
|
self._add_item('options', _('Label _Options'), Gtk.STOCK_PREFERENCES)
|
||||||
self._add_item('remove', _('_Remove Label'), gtk.STOCK_REMOVE)
|
self._add_item('remove', _('_Remove Label'), Gtk.STOCK_REMOVE)
|
||||||
self._add_item('add', _('_Add Label'), gtk.STOCK_ADD)
|
self._add_item('add', _('_Add Label'), Gtk.STOCK_ADD)
|
||||||
|
|
||||||
self.menu.show_all()
|
self.menu.show_all()
|
||||||
# dialogs:
|
# dialogs:
|
||||||
|
@ -52,7 +59,7 @@ class LabelSidebarMenu(object):
|
||||||
id is automatically-added as self.item_<id>
|
id is automatically-added as self.item_<id>
|
||||||
"""
|
"""
|
||||||
func = getattr(self, 'on_%s' % item_id)
|
func = getattr(self, 'on_%s' % item_id)
|
||||||
item = gtk.ImageMenuItem(stock)
|
item = Gtk.ImageMenuItem(stock)
|
||||||
item.get_children()[0].set_label(label)
|
item.get_children()[0].set_label(label)
|
||||||
item.connect('activate', func)
|
item.connect('activate', func)
|
||||||
self.menu.prepend(item)
|
self.menu.prepend(item)
|
||||||
|
@ -106,7 +113,7 @@ class AddDialog(object):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def show(self):
|
def show(self):
|
||||||
self.builder = gtk.Builder()
|
self.builder = Gtk.Builder()
|
||||||
self.builder.add_from_file(get_resource('label_add.ui'))
|
self.builder.add_from_file(get_resource('label_add.ui'))
|
||||||
self.dialog = self.builder.get_object('dlg_label_add')
|
self.dialog = self.builder.get_object('dlg_label_add')
|
||||||
self.dialog.set_transient_for(component.get('MainWindow').window)
|
self.dialog.set_transient_for(component.get('MainWindow').window)
|
||||||
|
@ -161,7 +168,7 @@ class OptionsDialog(object):
|
||||||
|
|
||||||
def show(self, label):
|
def show(self, label):
|
||||||
self.label = label
|
self.label = label
|
||||||
self.builder = gtk.Builder()
|
self.builder = Gtk.Builder()
|
||||||
self.builder.add_from_file(get_resource('label_options.ui'))
|
self.builder.add_from_file(get_resource('label_options.ui'))
|
||||||
self.dialog = self.builder.get_object('dlg_label_options')
|
self.dialog = self.builder.get_object('dlg_label_options')
|
||||||
self.dialog.set_transient_for(component.get('MainWindow').window)
|
self.dialog.set_transient_for(component.get('MainWindow').window)
|
||||||
|
|
|
@ -12,7 +12,7 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import gtk
|
from gi.repository.Gtk import Menu, MenuItem
|
||||||
|
|
||||||
from deluge import component # for systray
|
from deluge import component # for systray
|
||||||
from deluge.ui.client import client
|
from deluge.ui.client import client
|
||||||
|
@ -29,11 +29,11 @@ NO_LABEL = _('No Label')
|
||||||
del _
|
del _
|
||||||
|
|
||||||
|
|
||||||
class LabelMenu(gtk.MenuItem):
|
class LabelMenu(MenuItem):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
gtk.MenuItem.__init__(self, _('Label'))
|
MenuItem.__init__(self, _('Label'))
|
||||||
|
|
||||||
self.sub_menu = gtk.Menu()
|
self.sub_menu = Menu()
|
||||||
self.set_submenu(self.sub_menu)
|
self.set_submenu(self.sub_menu)
|
||||||
self.items = []
|
self.items = []
|
||||||
|
|
||||||
|
@ -52,9 +52,9 @@ class LabelMenu(gtk.MenuItem):
|
||||||
self.sub_menu.remove(child)
|
self.sub_menu.remove(child)
|
||||||
for label in [NO_LABEL] + list(labels):
|
for label in [NO_LABEL] + list(labels):
|
||||||
if label == NO_LABEL:
|
if label == NO_LABEL:
|
||||||
item = gtk.MenuItem(_(NO_LABEL))
|
item = MenuItem(_(NO_LABEL))
|
||||||
else:
|
else:
|
||||||
item = gtk.MenuItem(label.replace('_', '__'))
|
item = MenuItem(label.replace('_', '__'))
|
||||||
item.connect('activate', self.on_select_label, label)
|
item.connect('activate', self.on_select_label, label)
|
||||||
self.sub_menu.append(item)
|
self.sub_menu.append(item)
|
||||||
self.show_all()
|
self.show_all()
|
||||||
|
|
|
@ -12,7 +12,7 @@ from setuptools import find_packages, setup
|
||||||
__plugin_name__ = 'Label'
|
__plugin_name__ = 'Label'
|
||||||
__author__ = 'Martijn Voncken'
|
__author__ = 'Martijn Voncken'
|
||||||
__author_email__ = 'mvoncken@gmail.com'
|
__author_email__ = 'mvoncken@gmail.com'
|
||||||
__version__ = '0.2'
|
__version__ = '0.3'
|
||||||
__url__ = 'http://deluge-torrent.org'
|
__url__ = 'http://deluge-torrent.org'
|
||||||
__license__ = 'GPLv3'
|
__license__ = 'GPLv3'
|
||||||
__description__ = 'Allows labels to be assigned to torrents'
|
__description__ = 'Allows labels to be assigned to torrents'
|
||||||
|
@ -38,7 +38,7 @@ setup(
|
||||||
entry_points="""
|
entry_points="""
|
||||||
[deluge.plugin.core]
|
[deluge.plugin.core]
|
||||||
%s = deluge.plugins.%s:CorePlugin
|
%s = deluge.plugins.%s:CorePlugin
|
||||||
[deluge.plugin.gtkui]
|
[deluge.plugin.gtk3ui]
|
||||||
%s = deluge.plugins.%s:GtkUIPlugin
|
%s = deluge.plugins.%s:GtkUIPlugin
|
||||||
[deluge.plugin.web]
|
[deluge.plugin.web]
|
||||||
%s = deluge.plugins.%s:WebUIPlugin
|
%s = deluge.plugins.%s:WebUIPlugin
|
||||||
|
|
|
@ -23,7 +23,7 @@ from twisted.internet import defer
|
||||||
import deluge.common
|
import deluge.common
|
||||||
import deluge.component as component
|
import deluge.component as component
|
||||||
import deluge.configmanager
|
import deluge.configmanager
|
||||||
from deluge.plugins.pluginbase import GtkPluginBase
|
from deluge.plugins.pluginbase import Gtk3PluginBase
|
||||||
from deluge.ui.client import client
|
from deluge.ui.client import client
|
||||||
|
|
||||||
from .common import CustomNotifications, get_resource
|
from .common import CustomNotifications, get_resource
|
||||||
|
@ -245,9 +245,9 @@ class GtkUiNotifications(CustomNotifications):
|
||||||
return title, message
|
return title, message
|
||||||
|
|
||||||
|
|
||||||
class GtkUI(GtkPluginBase, GtkUiNotifications):
|
class GtkUI(Gtk3PluginBase, GtkUiNotifications):
|
||||||
def __init__(self, plugin_name):
|
def __init__(self, plugin_name):
|
||||||
GtkPluginBase.__init__(self, plugin_name)
|
Gtk3PluginBase.__init__(self, plugin_name)
|
||||||
GtkUiNotifications.__init__(self)
|
GtkUiNotifications.__init__(self)
|
||||||
|
|
||||||
def enable(self):
|
def enable(self):
|
||||||
|
|
|
@ -17,7 +17,7 @@ from setuptools import find_packages, setup
|
||||||
__plugin_name__ = 'Notifications'
|
__plugin_name__ = 'Notifications'
|
||||||
__author__ = 'Pedro Algarvio'
|
__author__ = 'Pedro Algarvio'
|
||||||
__author_email__ = 'pedro@algarvio.me'
|
__author_email__ = 'pedro@algarvio.me'
|
||||||
__version__ = '0.2'
|
__version__ = '0.3'
|
||||||
__url__ = 'http://dev.deluge-torrent.org/'
|
__url__ = 'http://dev.deluge-torrent.org/'
|
||||||
__license__ = 'GPLv3'
|
__license__ = 'GPLv3'
|
||||||
__description__ = 'Plugin which provides notifications to Deluge.'
|
__description__ = 'Plugin which provides notifications to Deluge.'
|
||||||
|
@ -46,7 +46,7 @@ setup(
|
||||||
entry_points="""
|
entry_points="""
|
||||||
[deluge.plugin.core]
|
[deluge.plugin.core]
|
||||||
%s = deluge.plugins.%s:CorePlugin
|
%s = deluge.plugins.%s:CorePlugin
|
||||||
[deluge.plugin.gtkui]
|
[deluge.plugin.gtk3ui]
|
||||||
%s = deluge.plugins.%s:GtkUIPlugin
|
%s = deluge.plugins.%s:GtkUIPlugin
|
||||||
[deluge.plugin.web]
|
[deluge.plugin.web]
|
||||||
%s = deluge.plugins.%s:WebUIPlugin
|
%s = deluge.plugins.%s:WebUIPlugin
|
||||||
|
|
|
@ -18,7 +18,7 @@ import logging
|
||||||
import gtk
|
import gtk
|
||||||
|
|
||||||
import deluge.component as component
|
import deluge.component as component
|
||||||
from deluge.plugins.pluginbase import GtkPluginBase
|
from deluge.plugins.pluginbase import Gtk3PluginBase
|
||||||
from deluge.ui.client import client
|
from deluge.ui.client import client
|
||||||
|
|
||||||
from .common import get_resource
|
from .common import get_resource
|
||||||
|
@ -167,7 +167,7 @@ class SchedulerSelectWidget(gtk.DrawingArea):
|
||||||
self.hover_point = [-1, -1]
|
self.hover_point = [-1, -1]
|
||||||
|
|
||||||
|
|
||||||
class GtkUI(GtkPluginBase):
|
class GtkUI(Gtk3PluginBase):
|
||||||
def enable(self):
|
def enable(self):
|
||||||
self.create_prefs_page()
|
self.create_prefs_page()
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ from setuptools import find_packages, setup
|
||||||
__plugin_name__ = 'Scheduler'
|
__plugin_name__ = 'Scheduler'
|
||||||
__author__ = 'Andrew Resch'
|
__author__ = 'Andrew Resch'
|
||||||
__author_email__ = 'andrewresch@gmail.com'
|
__author_email__ = 'andrewresch@gmail.com'
|
||||||
__version__ = '0.2'
|
__version__ = '0.3'
|
||||||
__url__ = 'http://deluge-torrent.org'
|
__url__ = 'http://deluge-torrent.org'
|
||||||
__license__ = 'GPLv3'
|
__license__ = 'GPLv3'
|
||||||
__description__ = 'Schedule limits on a per-hour per-day basis.'
|
__description__ = 'Schedule limits on a per-hour per-day basis.'
|
||||||
|
@ -38,7 +38,7 @@ setup(
|
||||||
entry_points="""
|
entry_points="""
|
||||||
[deluge.plugin.core]
|
[deluge.plugin.core]
|
||||||
%s = deluge.plugins.%s:CorePlugin
|
%s = deluge.plugins.%s:CorePlugin
|
||||||
[deluge.plugin.gtkui]
|
[deluge.plugin.gtk3ui]
|
||||||
%s = deluge.plugins.%s:GtkUIPlugin
|
%s = deluge.plugins.%s:GtkUIPlugin
|
||||||
[deluge.plugin.web]
|
[deluge.plugin.web]
|
||||||
%s = deluge.plugins.%s:WebUIPlugin
|
%s = deluge.plugins.%s:WebUIPlugin
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.24"/>
|
<requires lib="gtk+" version="3.0"/>
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
<!-- interface-naming-policy toplevel-contextual -->
|
||||||
<object class="GtkWindow" id="window1">
|
<object class="GtkWindow" id="window1">
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
@ -28,7 +28,6 @@
|
||||||
<property name="column_spacing">15</property>
|
<property name="column_spacing">15</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkColorButton" id="bandwidth_graph_download_rate_color">
|
<object class="GtkColorButton" id="bandwidth_graph_download_rate_color">
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -68,7 +67,6 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkColorButton" id="bandwidth_graph_upload_rate_color">
|
<object class="GtkColorButton" id="bandwidth_graph_upload_rate_color">
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -110,7 +108,6 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkColorButton" id="connections_graph_dht_nodes_color">
|
<object class="GtkColorButton" id="connections_graph_dht_nodes_color">
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -138,7 +135,6 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkColorButton" id="connections_graph_dht_cache_nodes_color">
|
<object class="GtkColorButton" id="connections_graph_dht_cache_nodes_color">
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -190,7 +186,6 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkColorButton" id="connections_graph_dht_torrents_color">
|
<object class="GtkColorButton" id="connections_graph_dht_torrents_color">
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -206,7 +201,6 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkColorButton" id="connections_graph_num_connections_color">
|
<object class="GtkColorButton" id="connections_graph_num_connections_color">
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -236,7 +230,6 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkColorButton" id="seeds_graph_num_peers_color">
|
<object class="GtkColorButton" id="seeds_graph_num_peers_color">
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
|
|
@ -20,7 +20,7 @@ import logging
|
||||||
import math
|
import math
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import cairo
|
from gi.repository import cairo
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
@ -16,34 +16,39 @@ from __future__ import division, unicode_literals
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import gtk
|
from gi.repository import Gtk
|
||||||
|
from gi.repository.Gdk import RGBA
|
||||||
|
|
||||||
import deluge
|
import deluge
|
||||||
from deluge import component
|
from deluge import component
|
||||||
from deluge.common import fspeed
|
from deluge.common import fspeed
|
||||||
from deluge.plugins.pluginbase import GtkPluginBase
|
from deluge.plugins.pluginbase import Gtk3PluginBase
|
||||||
from deluge.ui.client import client
|
from deluge.ui.client import client
|
||||||
from deluge.ui.gtkui.torrentdetails import Tab
|
from deluge.ui.gtk3.torrentdetails import Tab
|
||||||
|
|
||||||
from .common import get_resource
|
from .common import get_resource
|
||||||
from .graph import Graph, size_formatter_scale
|
from .graph import Graph, size_formatter_scale
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# Gdk.RGBA textual spec
|
||||||
|
RED = 'rgb(255,0,0)'
|
||||||
|
GREEN = 'rgb(0,128,0)'
|
||||||
|
BLUE = 'rgb(0,0,255)'
|
||||||
|
DARKRED = 'rgb(139,0,0)'
|
||||||
|
ORANGE = 'rgb(255,165,0)'
|
||||||
|
|
||||||
DEFAULT_CONF = {
|
DEFAULT_CONF = {
|
||||||
'version': 1,
|
'version': 2,
|
||||||
'colors': {
|
'colors': {
|
||||||
'bandwidth_graph': {
|
'bandwidth_graph': {'upload_rate': BLUE, 'download_rate': GREEN},
|
||||||
'upload_rate': str(gtk.gdk.Color('blue')),
|
|
||||||
'download_rate': str(gtk.gdk.Color('green')),
|
|
||||||
},
|
|
||||||
'connections_graph': {
|
'connections_graph': {
|
||||||
'dht_nodes': str(gtk.gdk.Color('orange')),
|
'dht_nodes': ORANGE,
|
||||||
'dht_cache_nodes': str(gtk.gdk.Color('blue')),
|
'dht_cache_nodes': BLUE,
|
||||||
'dht_torrents': str(gtk.gdk.Color('green')),
|
'dht_torrents': GREEN,
|
||||||
'num_connections': str(gtk.gdk.Color('darkred')),
|
'num_connections': DARKRED,
|
||||||
},
|
},
|
||||||
'seeds_graph': {'num_peers': str(gtk.gdk.Color('blue'))},
|
'seeds_graph': {'num_peers': BLUE},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,20 +76,18 @@ def fspeed_shortform(value):
|
||||||
return fspeed(value, shortform=True)
|
return fspeed(value, shortform=True)
|
||||||
|
|
||||||
|
|
||||||
def gtk_to_graph_color(color):
|
def text_to_rgba(color):
|
||||||
"""Turns a gtk.gdk.Color into a tuple with range 0-1 as used by the graph"""
|
"""Turns a Color into a tuple with range 0-1 as used by the graph"""
|
||||||
gtk_color = gtk.gdk.Color(color)
|
color_rgba = RGBA()
|
||||||
red = gtk_color.red / 65535
|
color_rgba.parse(color)
|
||||||
green = gtk_color.green / 65535
|
return color_rgba
|
||||||
blue = gtk_color.blue / 65535
|
|
||||||
return (red, green, blue)
|
|
||||||
|
|
||||||
|
|
||||||
class GraphsTab(Tab):
|
class GraphsTab(Tab):
|
||||||
def __init__(self, colors):
|
def __init__(self, colors):
|
||||||
super(GraphsTab, self).__init__()
|
super(GraphsTab, self).__init__()
|
||||||
|
|
||||||
builder = gtk.Builder()
|
builder = Gtk.Builder()
|
||||||
builder.add_from_file(get_resource('tabs.ui'))
|
builder.add_from_file(get_resource('tabs.ui'))
|
||||||
self.window = builder.get_object('graph_tab')
|
self.window = builder.get_object('graph_tab')
|
||||||
self.notebook = builder.get_object('graph_notebook')
|
self.notebook = builder.get_object('graph_notebook')
|
||||||
|
@ -97,13 +100,13 @@ class GraphsTab(Tab):
|
||||||
self.colors = colors
|
self.colors = colors
|
||||||
|
|
||||||
self.bandwidth_graph = builder.get_object('bandwidth_graph')
|
self.bandwidth_graph = builder.get_object('bandwidth_graph')
|
||||||
self.bandwidth_graph.connect('expose_event', self.graph_expose)
|
self.bandwidth_graph.connect('draw', self.on_graph_draw)
|
||||||
|
|
||||||
self.connections_graph = builder.get_object('connections_graph')
|
self.connections_graph = builder.get_object('connections_graph')
|
||||||
self.connections_graph.connect('expose_event', self.graph_expose)
|
self.connections_graph.connect('draw', self.on_graph_draw)
|
||||||
|
|
||||||
self.seeds_graph = builder.get_object('seeds_graph')
|
self.seeds_graph = builder.get_object('seeds_graph')
|
||||||
self.seeds_graph.connect('expose_event', self.graph_expose)
|
self.seeds_graph.connect('draw', self.on_graph_draw)
|
||||||
|
|
||||||
self.notebook.connect('switch-page', self._on_notebook_switch_page)
|
self.notebook.connect('switch-page', self._on_notebook_switch_page)
|
||||||
|
|
||||||
|
@ -115,26 +118,20 @@ class GraphsTab(Tab):
|
||||||
|
|
||||||
self.intervals = None
|
self.intervals = None
|
||||||
self.intervals_combo = builder.get_object('combo_intervals')
|
self.intervals_combo = builder.get_object('combo_intervals')
|
||||||
cell = gtk.CellRendererText()
|
cell = Gtk.CellRendererText()
|
||||||
self.intervals_combo.pack_start(cell, True)
|
self.intervals_combo.pack_start(cell, True)
|
||||||
self.intervals_combo.set_cell_data_func(cell, neat_time)
|
self.intervals_combo.set_cell_data_func(cell, neat_time)
|
||||||
self.intervals_combo.connect('changed', self._on_selected_interval_changed)
|
self.intervals_combo.connect('changed', self._on_selected_interval_changed)
|
||||||
self.update_intervals()
|
self.update_intervals()
|
||||||
|
|
||||||
def graph_expose(self, widget, event):
|
def on_graph_draw(self, widget, context):
|
||||||
context = self.graph_widget.window.cairo_create()
|
|
||||||
# set a clip region
|
|
||||||
context.rectangle(
|
|
||||||
event.area.x, event.area.y, event.area.width, event.area.height
|
|
||||||
)
|
|
||||||
context.clip()
|
|
||||||
self.graph.draw_to_context(
|
self.graph.draw_to_context(
|
||||||
context,
|
context,
|
||||||
self.graph_widget.allocation.width,
|
self.graph_widget.get_allocated_width(),
|
||||||
self.graph_widget.allocation.height,
|
self.graph_widget.get_allocated_height(),
|
||||||
)
|
)
|
||||||
# Do not propagate the event
|
# Do not propagate the event
|
||||||
return False
|
return True
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
d1 = client.stats.get_stats(list(self.graph.stat_info), self.selected_interval)
|
d1 = client.stats.get_stats(list(self.graph.stat_info), self.selected_interval)
|
||||||
|
@ -161,12 +158,12 @@ class GraphsTab(Tab):
|
||||||
self.graph.add_stat(
|
self.graph.add_stat(
|
||||||
'download_rate',
|
'download_rate',
|
||||||
label='Download Rate',
|
label='Download Rate',
|
||||||
color=gtk_to_graph_color(colors['download_rate']),
|
color=text_to_rgba(colors['download_rate']),
|
||||||
)
|
)
|
||||||
self.graph.add_stat(
|
self.graph.add_stat(
|
||||||
'upload_rate',
|
'upload_rate',
|
||||||
label='Upload Rate',
|
label='Upload Rate',
|
||||||
color=gtk_to_graph_color(colors['upload_rate']),
|
color=text_to_rgba(colors['upload_rate']),
|
||||||
)
|
)
|
||||||
self.graph.set_left_axis(
|
self.graph.set_left_axis(
|
||||||
formatter=fspeed_shortform, min=10240, formatter_scale=size_formatter_scale
|
formatter=fspeed_shortform, min=10240, formatter_scale=size_formatter_scale
|
||||||
|
@ -178,14 +175,10 @@ class GraphsTab(Tab):
|
||||||
g = Graph()
|
g = Graph()
|
||||||
self.graph = g
|
self.graph = g
|
||||||
colors = self.colors['connections_graph']
|
colors = self.colors['connections_graph']
|
||||||
g.add_stat('dht_nodes', color=gtk_to_graph_color(colors['dht_nodes']))
|
g.add_stat('dht_nodes', color=text_to_rgba(colors['dht_nodes']))
|
||||||
g.add_stat(
|
g.add_stat('dht_cache_nodes', color=text_to_rgba(colors['dht_cache_nodes']))
|
||||||
'dht_cache_nodes', color=gtk_to_graph_color(colors['dht_cache_nodes'])
|
g.add_stat('dht_torrents', color=text_to_rgba(colors['dht_torrents']))
|
||||||
)
|
g.add_stat('num_connections', color=text_to_rgba(colors['num_connections']))
|
||||||
g.add_stat('dht_torrents', color=gtk_to_graph_color(colors['dht_torrents']))
|
|
||||||
g.add_stat(
|
|
||||||
'num_connections', color=gtk_to_graph_color(colors['num_connections'])
|
|
||||||
)
|
|
||||||
g.set_left_axis(formatter=int_str, min=10)
|
g.set_left_axis(formatter=int_str, min=10)
|
||||||
|
|
||||||
def select_seeds_graph(self):
|
def select_seeds_graph(self):
|
||||||
|
@ -193,7 +186,7 @@ class GraphsTab(Tab):
|
||||||
self.graph_widget = self.seeds_graph
|
self.graph_widget = self.seeds_graph
|
||||||
self.graph = Graph()
|
self.graph = Graph()
|
||||||
colors = self.colors['seeds_graph']
|
colors = self.colors['seeds_graph']
|
||||||
self.graph.add_stat('num_peers', color=gtk_to_graph_color(colors['num_peers']))
|
self.graph.add_stat('num_peers', color=text_to_rgba(colors['num_peers']))
|
||||||
self.graph.set_left_axis(formatter=int_str, min=10)
|
self.graph.set_left_axis(formatter=int_str, min=10)
|
||||||
|
|
||||||
def set_colors(self, colors):
|
def set_colors(self, colors):
|
||||||
|
@ -204,7 +197,7 @@ class GraphsTab(Tab):
|
||||||
)
|
)
|
||||||
|
|
||||||
def _on_intervals_changed(self, intervals):
|
def _on_intervals_changed(self, intervals):
|
||||||
liststore = gtk.ListStore(int)
|
liststore = Gtk.ListStore(int)
|
||||||
for inter in intervals:
|
for inter in intervals:
|
||||||
liststore.append([inter])
|
liststore.append([inter])
|
||||||
self.intervals_combo.set_model(liststore)
|
self.intervals_combo.set_model(liststore)
|
||||||
|
@ -236,14 +229,14 @@ class GraphsTab(Tab):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
class GtkUI(GtkPluginBase):
|
class GtkUI(Gtk3PluginBase):
|
||||||
def enable(self):
|
def enable(self):
|
||||||
log.debug('Stats plugin enable called')
|
log.debug('Stats plugin enable called')
|
||||||
self.config = deluge.configmanager.ConfigManager(
|
self.config = deluge.configmanager.ConfigManager(
|
||||||
'stats.gtkui.conf', DEFAULT_CONF
|
'stats.gtk3ui.conf', DEFAULT_CONF
|
||||||
)
|
)
|
||||||
|
|
||||||
self.builder = gtk.Builder()
|
self.builder = Gtk.Builder()
|
||||||
self.builder.add_from_file(get_resource('config.ui'))
|
self.builder.add_from_file(get_resource('config.ui'))
|
||||||
|
|
||||||
component.get('Preferences').add_page(
|
component.get('Preferences').add_page(
|
||||||
|
@ -277,9 +270,9 @@ class GtkUI(GtkPluginBase):
|
||||||
for graph, colors in self.config['colors'].items():
|
for graph, colors in self.config['colors'].items():
|
||||||
gtkconf[graph] = {}
|
gtkconf[graph] = {}
|
||||||
for value, color in colors.items():
|
for value, color in colors.items():
|
||||||
|
color_btn = self.builder.get_object('%s_%s_color' % (graph, value))
|
||||||
try:
|
try:
|
||||||
color_btn = self.builder.get_object('%s_%s_color' % (graph, value))
|
gtkconf[graph][value] = color_btn.get_color().to_string()
|
||||||
gtkconf[graph][value] = str(color_btn.get_color())
|
|
||||||
except Exception:
|
except Exception:
|
||||||
gtkconf[graph][value] = DEFAULT_CONF['colors'][graph][value]
|
gtkconf[graph][value] = DEFAULT_CONF['colors'][graph][value]
|
||||||
self.config['colors'] = gtkconf
|
self.config['colors'] = gtkconf
|
||||||
|
@ -293,9 +286,9 @@ class GtkUI(GtkPluginBase):
|
||||||
for value, color in colors.items():
|
for value, color in colors.items():
|
||||||
try:
|
try:
|
||||||
color_btn = self.builder.get_object('%s_%s_color' % (graph, value))
|
color_btn = self.builder.get_object('%s_%s_color' % (graph, value))
|
||||||
color_btn.set_color(gtk.gdk.Color(color))
|
color_btn.set_rgba(text_to_rgba(color))
|
||||||
except Exception:
|
except Exception as ex:
|
||||||
log.debug('Unable to set %s %s %s', graph, value, color)
|
log.debug('Unable to set %s %s %s: %s', graph, value, color, ex)
|
||||||
client.stats.get_config().addCallback(self.cb_get_config)
|
client.stats.get_config().addCallback(self.cb_get_config)
|
||||||
|
|
||||||
def cb_get_config(self, config):
|
def cb_get_config(self, config):
|
||||||
|
|
|
@ -17,7 +17,7 @@ from setuptools import find_packages, setup
|
||||||
__plugin_name__ = 'Stats'
|
__plugin_name__ = 'Stats'
|
||||||
__author__ = 'Ian Martin'
|
__author__ = 'Ian Martin'
|
||||||
__author_email__ = 'ianmartin@cantab.net'
|
__author_email__ = 'ianmartin@cantab.net'
|
||||||
__version__ = '0.3.2'
|
__version__ = '0.4'
|
||||||
__url__ = 'http://deluge-torrent.org'
|
__url__ = 'http://deluge-torrent.org'
|
||||||
__license__ = 'GPLv3'
|
__license__ = 'GPLv3'
|
||||||
__description__ = 'Display stats graphs'
|
__description__ = 'Display stats graphs'
|
||||||
|
@ -42,7 +42,7 @@ setup(
|
||||||
entry_points="""
|
entry_points="""
|
||||||
[deluge.plugin.core]
|
[deluge.plugin.core]
|
||||||
%s = deluge.plugins.%s:CorePlugin
|
%s = deluge.plugins.%s:CorePlugin
|
||||||
[deluge.plugin.gtkui]
|
[deluge.plugin.gtk3ui]
|
||||||
%s = deluge.plugins.%s:GtkUIPlugin
|
%s = deluge.plugins.%s:GtkUIPlugin
|
||||||
[deluge.plugin.web]
|
[deluge.plugin.web]
|
||||||
%s = deluge.plugins.%s:WebUIPlugin
|
%s = deluge.plugins.%s:WebUIPlugin
|
||||||
|
|
|
@ -17,13 +17,13 @@ from __future__ import unicode_literals
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import deluge.component as component
|
import deluge.component as component
|
||||||
from deluge.plugins.pluginbase import GtkPluginBase
|
from deluge.plugins.pluginbase import Gtk3PluginBase
|
||||||
from deluge.ui.client import client
|
from deluge.ui.client import client
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class GtkUI(GtkPluginBase):
|
class GtkUI(Gtk3PluginBase):
|
||||||
def enable(self):
|
def enable(self):
|
||||||
self.core = client.toggle
|
self.core = client.toggle
|
||||||
self.plugin = component.get('PluginManager')
|
self.plugin = component.get('PluginManager')
|
||||||
|
|
|
@ -17,7 +17,7 @@ from setuptools import find_packages, setup
|
||||||
__plugin_name__ = 'Toggle'
|
__plugin_name__ = 'Toggle'
|
||||||
__author__ = 'John Garland'
|
__author__ = 'John Garland'
|
||||||
__author_email__ = 'johnnybg+deluge@gmail.com'
|
__author_email__ = 'johnnybg+deluge@gmail.com'
|
||||||
__version__ = '0.3'
|
__version__ = '0.4'
|
||||||
__url__ = 'http://deluge-torrent.org'
|
__url__ = 'http://deluge-torrent.org'
|
||||||
__license__ = 'GPLv3'
|
__license__ = 'GPLv3'
|
||||||
__description__ = 'Toggles the session'
|
__description__ = 'Toggles the session'
|
||||||
|
@ -39,7 +39,7 @@ setup(
|
||||||
entry_points="""
|
entry_points="""
|
||||||
[deluge.plugin.core]
|
[deluge.plugin.core]
|
||||||
%s = deluge.plugins.%s:CorePlugin
|
%s = deluge.plugins.%s:CorePlugin
|
||||||
[deluge.plugin.gtkui]
|
[deluge.plugin.gtk3ui]
|
||||||
%s = deluge.plugins.%s:GtkUIPlugin
|
%s = deluge.plugins.%s:GtkUIPlugin
|
||||||
[deluge.plugin.web]
|
[deluge.plugin.web]
|
||||||
%s = deluge.plugins.%s:WebUIPlugin
|
%s = deluge.plugins.%s:WebUIPlugin
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.24"/>
|
<requires lib="gtk+" version="3.0"/>
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
<!-- interface-naming-policy toplevel-contextual -->
|
||||||
<object class="GtkAdjustment" id="adjustment1">
|
<object class="GtkAdjustment" id="adjustment1">
|
||||||
<property name="upper">99999</property>
|
<property name="upper">99999</property>
|
||||||
|
|
|
@ -15,10 +15,10 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import gtk
|
from gi.repository import Gtk
|
||||||
|
|
||||||
import deluge.component as component
|
import deluge.component as component
|
||||||
from deluge.plugins.pluginbase import GtkPluginBase
|
from deluge.plugins.pluginbase import Gtk3PluginBase
|
||||||
from deluge.ui.client import client
|
from deluge.ui.client import client
|
||||||
|
|
||||||
from .common import get_resource
|
from .common import get_resource
|
||||||
|
@ -26,9 +26,9 @@ from .common import get_resource
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class GtkUI(GtkPluginBase):
|
class GtkUI(Gtk3PluginBase):
|
||||||
def enable(self):
|
def enable(self):
|
||||||
self.builder = gtk.Builder()
|
self.builder = Gtk.Builder()
|
||||||
self.builder.add_from_file(get_resource('config.ui'))
|
self.builder.add_from_file(get_resource('config.ui'))
|
||||||
|
|
||||||
component.get('Preferences').add_page(
|
component.get('Preferences').add_page(
|
||||||
|
@ -80,14 +80,14 @@ class GtkUI(GtkPluginBase):
|
||||||
|
|
||||||
vbox = self.builder.get_object('prefs_box')
|
vbox = self.builder.get_object('prefs_box')
|
||||||
|
|
||||||
hbox = gtk.HBox()
|
hbox = Gtk.HBox()
|
||||||
icon = gtk.image_new_from_stock(
|
icon = Gtk.image_new_from_stock(
|
||||||
gtk.STOCK_DIALOG_ERROR, gtk.ICON_SIZE_SMALL_TOOLBAR
|
Gtk.STOCK_DIALOG_ERROR, Gtk.IconSize.SMALL_TOOLBAR
|
||||||
)
|
)
|
||||||
icon.set_padding(5, 5)
|
icon.set_padding(5, 5)
|
||||||
hbox.pack_start(icon, False, False)
|
hbox.pack_start(icon, False, False, 0)
|
||||||
|
|
||||||
label = gtk.Label(
|
label = Gtk.Label(
|
||||||
_(
|
_(
|
||||||
'The Deluge web interface is not installed, '
|
'The Deluge web interface is not installed, '
|
||||||
'please install the\ninterface and try again'
|
'please install the\ninterface and try again'
|
||||||
|
@ -95,7 +95,7 @@ class GtkUI(GtkPluginBase):
|
||||||
)
|
)
|
||||||
label.set_alignment(0, 0.5)
|
label.set_alignment(0, 0.5)
|
||||||
label.set_padding(5, 5)
|
label.set_padding(5, 5)
|
||||||
hbox.pack_start(label)
|
hbox.pack_start(label, False, False, 0)
|
||||||
|
|
||||||
vbox.pack_start(hbox, False, False, 10)
|
vbox.pack_start(hbox, False, False, 10)
|
||||||
vbox.reorder_child(hbox, 0)
|
vbox.reorder_child(hbox, 0)
|
||||||
|
|
|
@ -16,7 +16,7 @@ from setuptools import find_packages, setup
|
||||||
__plugin_name__ = 'WebUi'
|
__plugin_name__ = 'WebUi'
|
||||||
__author__ = 'Damien Churchill'
|
__author__ = 'Damien Churchill'
|
||||||
__author_email__ = 'damoxc@gmail.com'
|
__author_email__ = 'damoxc@gmail.com'
|
||||||
__version__ = '0.1'
|
__version__ = '0.2'
|
||||||
__url__ = 'http://deluge-torrent.org'
|
__url__ = 'http://deluge-torrent.org'
|
||||||
__license__ = 'GPLv3'
|
__license__ = 'GPLv3'
|
||||||
__description__ = 'Allows starting the web interface within the daemon.'
|
__description__ = 'Allows starting the web interface within the daemon.'
|
||||||
|
@ -38,7 +38,7 @@ setup(
|
||||||
entry_points="""
|
entry_points="""
|
||||||
[deluge.plugin.core]
|
[deluge.plugin.core]
|
||||||
%s = deluge.plugins.%s:CorePlugin
|
%s = deluge.plugins.%s:CorePlugin
|
||||||
[deluge.plugin.gtkui]
|
[deluge.plugin.gtk3ui]
|
||||||
%s = deluge.plugins.%s:GtkUIPlugin
|
%s = deluge.plugins.%s:GtkUIPlugin
|
||||||
"""
|
"""
|
||||||
% ((__plugin_name__, __plugin_name__.lower()) * 2),
|
% ((__plugin_name__, __plugin_name__.lower()) * 2),
|
||||||
|
|
|
@ -47,16 +47,16 @@ class CorePluginBase(PluginBase):
|
||||||
super(CorePluginBase, self).disable()
|
super(CorePluginBase, self).disable()
|
||||||
|
|
||||||
|
|
||||||
class GtkPluginBase(PluginBase):
|
class Gtk3PluginBase(PluginBase):
|
||||||
def __init__(self, plugin_name):
|
def __init__(self, plugin_name):
|
||||||
super(GtkPluginBase, self).__init__('GtkPlugin.' + plugin_name)
|
super(Gtk3PluginBase, self).__init__('Gtk3Plugin.' + plugin_name)
|
||||||
log.debug('GtkPlugin initialized..')
|
log.debug('Gtk3Plugin initialized..')
|
||||||
|
|
||||||
def enable(self):
|
def enable(self):
|
||||||
super(GtkPluginBase, self).enable()
|
super(Gtk3PluginBase, self).enable()
|
||||||
|
|
||||||
def disable(self):
|
def disable(self):
|
||||||
super(GtkPluginBase, self).disable()
|
super(Gtk3PluginBase, self).disable()
|
||||||
|
|
||||||
|
|
||||||
class WebPluginBase(PluginBase):
|
class WebPluginBase(PluginBase):
|
||||||
|
|
|
@ -24,7 +24,7 @@ class PluginManager(deluge.pluginmanagerbase.PluginManagerBase, component.Compon
|
||||||
component.Component.__init__(self, 'PluginManager')
|
component.Component.__init__(self, 'PluginManager')
|
||||||
self.config = ConfigManager('gtk3ui.conf')
|
self.config = ConfigManager('gtk3ui.conf')
|
||||||
deluge.pluginmanagerbase.PluginManagerBase.__init__(
|
deluge.pluginmanagerbase.PluginManagerBase.__init__(
|
||||||
self, 'gtk3ui.conf', 'deluge.plugin.gtk3'
|
self, 'gtk3ui.conf', 'deluge.plugin.gtk3ui'
|
||||||
)
|
)
|
||||||
|
|
||||||
self.hooks = {'on_apply_prefs': [], 'on_show_prefs': []}
|
self.hooks = {'on_apply_prefs': [], 'on_show_prefs': []}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue