plugins
This commit is contained in:
parent
3c0ab4a0f2
commit
8cacacb3bb
|
@ -44,18 +44,6 @@
|
|||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="chk_use_tray">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Enable system tray icon</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<signal name="toggled" handler="tray_toggle"/>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="chk_min_on_close">
|
||||
<property name="visible">True</property>
|
||||
|
@ -69,6 +57,18 @@
|
|||
<property name="x_padding">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="chk_use_tray">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Enable system tray icon</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<signal name="toggled" handler="tray_toggle"/>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -95,15 +95,13 @@
|
|||
<property name="n_rows">2</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<widget class="GtkFileChooserButton" id="download_path_button">
|
||||
<widget class="GtkRadioButton" id="radio_ask_save">
|
||||
<property name="visible">True</property>
|
||||
<property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property>
|
||||
<property name="label" translatable="yes">Ask me where to save each download</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -119,13 +117,15 @@
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkRadioButton" id="radio_ask_save">
|
||||
<widget class="GtkFileChooserButton" id="download_path_button">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Ask me where to save each download</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
|
@ -154,6 +154,14 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="n_rows">1</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="chk_autoseed">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Stop seeding torrents when
|
||||
their share ratio reaches:</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="ratio_spinner">
|
||||
<property name="visible">True</property>
|
||||
|
@ -171,14 +179,6 @@
|
|||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="chk_autoseed">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Stop seeding torrents when
|
||||
their share ratio reaches:</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -272,53 +272,13 @@ their share ratio reaches:</property>
|
|||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label25">
|
||||
<widget class="GtkButton" id="btn_test_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Try from:</property>
|
||||
</widget>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label26">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">to:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_port_min">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="adjustment">0 0 65535 1 10 10</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_port_max">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="adjustment">0 0 65535 1 10 10</property>
|
||||
<property name="label" translatable="yes">Test Port</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="right_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label27">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Active port:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
|
@ -336,17 +296,57 @@ their share ratio reaches:</property>
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkButton" id="btn_test_port">
|
||||
<widget class="GtkLabel" id="label27">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Test Port</property>
|
||||
<property name="label" translatable="yes">Active port:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_port_max">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="adjustment">0 0 65535 1 10 10</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="right_attach">4</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_port_min">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="adjustment">0 0 65535 1 10 10</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label26">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">to:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label25">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Try from:</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -373,94 +373,62 @@ their share ratio reaches:</property>
|
|||
<property name="n_rows">5</property>
|
||||
<property name="n_columns">3</property>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label9">
|
||||
<widget class="GtkLabel" id="label4">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes"><i>(0 is unlimited)</i></property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum Upload Rate:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="right_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label8">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">KB/s</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label7">
|
||||
<property name="visible">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label6">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">KB/s</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label5">
|
||||
<widget class="GtkLabel" id="label3">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum number of Uploads:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options"></property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_num_download">
|
||||
<widget class="GtkLabel" id="label2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="width_chars">10</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">0 0 100 1 10 10</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum Download Rate:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_max_download">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="width_chars">10</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">0 0 100 1 10 10</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum number of Downloads:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_max_upload">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="width_chars">10</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">0 0 100 1 10 10</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -481,7 +449,7 @@ their share ratio reaches:</property>
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_max_upload">
|
||||
<widget class="GtkSpinButton" id="spin_max_download">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="width_chars">10</property>
|
||||
|
@ -491,53 +459,85 @@ their share ratio reaches:</property>
|
|||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_num_download">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="width_chars">10</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">0 0 100 1 10 10</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label5">
|
||||
<property name="visible">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label6">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">KB/s</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label1">
|
||||
<widget class="GtkLabel" id="label7">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum number of Downloads:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label2">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum Download Rate:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label3">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum number of Uploads:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label4">
|
||||
<widget class="GtkLabel" id="label8">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum Upload Rate:</property>
|
||||
<property name="label" translatable="yes">KB/s</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options"></property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label9">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes"><i>(0 is unlimited)</i></property>
|
||||
<property name="use_markup">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="right_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
|
@ -640,16 +640,11 @@ their share ratio reaches:</property>
|
|||
<property name="n_rows">2</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<widget class="GtkTextView" id="plugin_text1">
|
||||
<widget class="GtkTreeView" id="plugin_view">
|
||||
<property name="visible">True</property>
|
||||
<property name="editable">False</property>
|
||||
<property name="wrap_mode">GTK_WRAP_WORD</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="x_padding">10</property>
|
||||
<property name="y_padding">10</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -684,11 +679,16 @@ their share ratio reaches:</property>
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkTreeView" id="plugin_view1">
|
||||
<widget class="GtkTextView" id="plugin_text">
|
||||
<property name="visible">True</property>
|
||||
<property name="editable">False</property>
|
||||
<property name="wrap_mode">GTK_WRAP_WORD</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="x_padding">10</property>
|
||||
<property name="y_padding">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
|
@ -718,16 +718,12 @@ their share ratio reaches:</property>
|
|||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
|
||||
<property name="layout_style">GTK_BUTTONBOX_END</property>
|
||||
<child>
|
||||
<widget class="GtkButton" id="button9">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">gtk-cancel</property>
|
||||
<property name="use_stock">True</property>
|
||||
</widget>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkButton" id="button10">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">gtk-ok</property>
|
||||
<property name="label" translatable="yes">gtk-close</property>
|
||||
<property name="use_stock">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
|
|
|
@ -4,16 +4,23 @@ class plugin_Example:
|
|||
def __init__(self, deluge_core, deluge_interface):
|
||||
self.core = deluge_core
|
||||
self.interface = deluge_interface
|
||||
print "Example Plugin loaded"
|
||||
|
||||
def unload(self):
|
||||
pass
|
||||
print "Example Plugin unloaded"
|
||||
|
||||
def update(self):
|
||||
pass
|
||||
print "Hello World, from Example Plugin"
|
||||
|
||||
|
||||
|
||||
|
||||
register_plugin("Example",
|
||||
register_plugin("Example Plugin",
|
||||
plugin_Example,
|
||||
"0.2",
|
||||
"An example plugin",
|
||||
requires="0.5.0")
|
||||
config=True,
|
||||
default=False,
|
||||
requires="0.5.0",
|
||||
interface="gtk",
|
||||
required_plugins=None)
|
||||
|
|
|
@ -19,10 +19,13 @@
|
|||
# Boston, MA 02110-1301, USA.
|
||||
|
||||
import sys, os, os.path, webbrowser
|
||||
import xdg, xdg.BaseDirectory
|
||||
|
||||
PROGRAM_NAME = "Deluge"
|
||||
PROGRAM_VERSION = "0.4.9.0"
|
||||
|
||||
CONFIG_DIR = xdg.BaseDirectory.save_config_path('deluge-svn')
|
||||
|
||||
GLADE_DIR = sys.prefix + '/share/deluge/glade'
|
||||
PIXMAP_DIR = sys.prefix + '/share/deluge/pixmaps'
|
||||
PLUGIN_DIR = sys.prefix + '/share/deluge/plugins'
|
||||
|
|
132
src/delugegtk.py
132
src/delugegtk.py
|
@ -21,7 +21,7 @@
|
|||
# Boston, MA 02110-1301, USA.
|
||||
|
||||
import sys, os, os.path, gettext, urllib
|
||||
import deluge, dcommon, dgtk
|
||||
import deluge, dcommon, dgtk, delugeplugins
|
||||
import pygtk
|
||||
pygtk.require('2.0')
|
||||
import gtk, gtk.glade, gobject
|
||||
|
@ -33,13 +33,27 @@ if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
|
|||
_ = gettext.gettext
|
||||
|
||||
class DelugeGTK(dbus.service.Object):
|
||||
## external_add_torrent should only be called from outside the class
|
||||
@dbus.service.method('org.deluge_torrent.DelugeInterface')
|
||||
def external_add_torrent(self, torrent_file):
|
||||
print "Ding!"
|
||||
print "Got torrent externally:", os.path.basename(torrent_file)
|
||||
print "\tNow, what to do with it?"
|
||||
if self.is_running:
|
||||
print "\t\tthe client seems to already be running, i'll try and add the torrent"
|
||||
uid = self.manager.add_torrent(torrent_file, ".", True)
|
||||
self.store.append(self.get_list_from_unique_id(uid))
|
||||
else:
|
||||
print "\t\tthe client hasn't started yet, I'll queue the torrent"
|
||||
self.torrent_file_queue.append(torrent_file)
|
||||
|
||||
def __init__(self, bus_name=dbus.service.BusName('org.deluge_torrent.Deluge',
|
||||
bus=dbus.SessionBus()), object_path='/org/deluge_torrent/DelugeObject'):
|
||||
dbus.service.Object.__init__(self, bus_name, object_path)
|
||||
self.is_running = False
|
||||
self.torrent_file_queue = []
|
||||
#Load up a config file:
|
||||
self.conf_file = xdg.BaseDirectory.save_config_path("deluge-svn") + '/deluge.conf'
|
||||
self.conf_file = dcommon.CONFIG_DIR + '/deluge.conf'
|
||||
if os.path.isdir(self.conf_file):
|
||||
print 'Weird, the file I was trying to write to, %s, is an existing directory'%(self.conf_file)
|
||||
sys.exit(0)
|
||||
|
@ -51,8 +65,7 @@ class DelugeGTK(dbus.service.Object):
|
|||
self.load_default_settings()
|
||||
self.pref.load_from_file(self.conf_file)
|
||||
#Start the Deluge Manager:
|
||||
self.manager = deluge.Manager("DE", "0490", "Deluge 0.4.9",
|
||||
xdg.BaseDirectory.save_config_path("deluge-svn"))
|
||||
self.manager = deluge.Manager("DE", "0490", "Deluge 0.4.9", dcommon.CONFIG_DIR)
|
||||
#Set up the interface:
|
||||
self.wtree = gtk.glade.XML(dcommon.get_glade_file("delugegtk.glade"))
|
||||
self.window = self.wtree.get_widget("main_window")
|
||||
|
@ -63,11 +76,16 @@ class DelugeGTK(dbus.service.Object):
|
|||
self.window.set_title('%s %s'%(dcommon.PROGRAM_NAME, dcommon.PROGRAM_VERSION))
|
||||
self.window.set_icon_from_file(dcommon.get_pixmap("deluge32.png"))
|
||||
|
||||
self.plugins = delugeplugins.PluginManager(self.manager, self)
|
||||
self.plugins.add_plugin_dir(dcommon.PLUGIN_DIR)
|
||||
if os.path.isdir(dcommon.CONFIG_DIR + '/plugins'):
|
||||
self.plugins.add_plugin_dir(dcommon.CONFIG_DIR + '/plugins')
|
||||
self.plugins.scan_for_plugins()
|
||||
|
||||
## Construct the Interface
|
||||
self.build_tray_icon()
|
||||
self.build_about_dialog()
|
||||
self.build_pref_dialog()
|
||||
self.build_plugin_dialog()
|
||||
self.build_torrent_table()
|
||||
self.build_summary_tab()
|
||||
self.build_file_tab()
|
||||
|
@ -164,9 +182,14 @@ class DelugeGTK(dbus.service.Object):
|
|||
self.prf = self.prf_glade.get_widget("pref_dialog")
|
||||
self.prf.set_icon_from_file(dcommon.get_pixmap("deluge32.png"))
|
||||
self.prf_glade.signal_autoconnect({"tray_toggle": self.tray_toggle,})
|
||||
|
||||
def build_plugin_dialog(self):
|
||||
pass
|
||||
self.plugin_dlg = self.prf_glade.get_widget("plugin_dialog")
|
||||
self.plugin_dlg.set_icon_from_file(dcommon.get_pixmap("deluge32.png"))
|
||||
self.plugin_view = self.prf_glade.get_widget("plugin_view")
|
||||
self.plugin_store = gtk.ListStore(str, bool)
|
||||
self.plugin_view.set_model(self.plugin_store)
|
||||
dgtk.add_text_column(self.plugin_view, "Name", 0)
|
||||
dgtk.add_toggle_column(self.plugin_view, "Enabled", 1, toggled_signal=self.plugin_toggled)
|
||||
|
||||
|
||||
def build_torrent_table(self):
|
||||
## Create the torrent listview
|
||||
|
@ -312,8 +335,26 @@ class DelugeGTK(dbus.service.Object):
|
|||
self.apply_prefs()
|
||||
|
||||
def show_plugin_dialog(self, arg=None):
|
||||
pass
|
||||
|
||||
self.plugin_store.clear()
|
||||
for plugin in self.plugins.get_available_plugins():
|
||||
self.plugin_store.append( (plugin, False) )
|
||||
self.plugin_dlg.show()
|
||||
self.plugin_dlg.run()
|
||||
self.plugin_dlg.hide()
|
||||
|
||||
def plugin_toggled(self, renderer, path):
|
||||
plugin_iter = self.plugin_store.get_iter_from_string(path)
|
||||
plugin_name = self.plugin_store.get_value(plugin_iter, 0)
|
||||
plugin_value = not self.plugin_store.get_value(plugin_iter, 1)
|
||||
self.plugin_store.set_value(plugin_iter, 1, plugin_value)
|
||||
print "Plugin:", plugin_name, renderer.get_active()
|
||||
if plugin_value:
|
||||
self.plugins.enable_plugin(plugin_name)
|
||||
else:
|
||||
self.plugins.disable_plugin(plugin_name)
|
||||
|
||||
|
||||
|
||||
def tray_toggle(self, obj):
|
||||
if obj.get_active():
|
||||
self.prf_glade.get_widget("chk_min_on_close").set_sensitive(True)
|
||||
|
@ -321,22 +362,28 @@ class DelugeGTK(dbus.service.Object):
|
|||
self.prf_glade.get_widget("chk_min_on_close").set_sensitive(False)
|
||||
|
||||
|
||||
def apply_prefs(self):
|
||||
pass
|
||||
|
||||
|
||||
## external_add_torrent should only be called from outside the class
|
||||
@dbus.service.method('org.deluge_torrent.DelugeInterface')
|
||||
def external_add_torrent(self, torrent_file):
|
||||
print "Ding!"
|
||||
print "Got torrent externally:", os.path.basename(torrent_file)
|
||||
print "\tNow, what to do with it?"
|
||||
if self.is_running:
|
||||
print "\t\tthe client seems to already be running, i'll try and add the torrent"
|
||||
uid = self.manager.add_torrent(torrent_file, ".", True)
|
||||
self.store.append(self.get_list_from_unique_id(uid))
|
||||
else:
|
||||
print "\t\tthe client hasn't started yet, I'll queue the torrent"
|
||||
self.torrent_file_queue.append(torrent_file)
|
||||
|
||||
|
||||
# UID, Q#, Name, Size, Progress, Message, Seeders, Peers, DL, UL, ETA, Share
|
||||
def get_list_from_unique_id(self, unique_id):
|
||||
state = self.manager.get_torrent_state(unique_id)
|
||||
queue = int(state['queue_pos']) + 1
|
||||
name = state['name']
|
||||
size = dcommon.fsize(state['total_size'])
|
||||
progress = float(state['progress'] * 100)
|
||||
message = '%s %d%%'%(deluge.STATE_MESSAGES[state['state']], int(state['progress'] * 100))
|
||||
seeds = dcommon.fseed(state)
|
||||
peers = dcommon.fpeer(state)
|
||||
dlrate = dcommon.frate(state['download_rate'])
|
||||
ulrate = dcommon.frate(state['upload_rate'])
|
||||
eta = dcommon.estimate_eta(state)
|
||||
share = self.calc_share_ratio(unique_id, state)
|
||||
return [unique_id, queue, name, size, progress, message,
|
||||
seeds, peers, dlrate, ulrate, eta, share]
|
||||
|
||||
|
||||
## Start the timer that updates the interface
|
||||
def start(self, hidden=False):
|
||||
if not hidden:
|
||||
|
@ -360,34 +407,7 @@ class DelugeGTK(dbus.service.Object):
|
|||
gtk.main()
|
||||
except KeyboardInterrupt:
|
||||
self.manager.quit()
|
||||
|
||||
def show_pref(self, o=None):
|
||||
self.pref = self.prf.show_dlg(self.pref)
|
||||
|
||||
def show_plugins(self, o=None):
|
||||
pass
|
||||
|
||||
def apply_prefs(self):
|
||||
for k in self.pref.keys():
|
||||
print k, self.pref.get(k)
|
||||
|
||||
|
||||
# UID, Q#, Name, Size, Progress, Message, Seeders, Peers, DL, UL, ETA, Share
|
||||
def get_list_from_unique_id(self, unique_id):
|
||||
state = self.manager.get_torrent_state(unique_id)
|
||||
queue = int(state['queue_pos']) + 1
|
||||
name = state['name']
|
||||
size = dcommon.fsize(state['total_size'])
|
||||
progress = float(state['progress'] * 100)
|
||||
message = '%s %d%%'%(deluge.STATE_MESSAGES[state['state']], int(state['progress'] * 100))
|
||||
seeds = dcommon.fseed(state)
|
||||
peers = dcommon.fpeer(state)
|
||||
dlrate = dcommon.frate(state['download_rate'])
|
||||
ulrate = dcommon.frate(state['upload_rate'])
|
||||
eta = dcommon.estimate_eta(state)
|
||||
share = self.calc_share_ratio(unique_id, state)
|
||||
return [unique_id, queue, name, size, progress, message,
|
||||
seeds, peers, dlrate, ulrate, eta, share]
|
||||
|
||||
|
||||
## Call via a timer to update the interface
|
||||
def update(self):
|
||||
|
@ -396,6 +416,9 @@ class DelugeGTK(dbus.service.Object):
|
|||
tab = self.wtree.get_widget("torrent_info").get_current_page()
|
||||
except AttributeError:
|
||||
return False
|
||||
|
||||
self.plugins.update_active_plugins()
|
||||
|
||||
# If no torrent is selected, select the first torrent:
|
||||
(temp, selection) = self.view.get_selection().get_selected()
|
||||
if selection is None:
|
||||
|
@ -404,6 +427,7 @@ class DelugeGTK(dbus.service.Object):
|
|||
itr = self.store.get_iter_first()
|
||||
if itr is None:
|
||||
return True
|
||||
|
||||
while itr is not None:
|
||||
uid = self.store.get_value(itr, 0)
|
||||
try:
|
||||
|
@ -419,6 +443,8 @@ class DelugeGTK(dbus.service.Object):
|
|||
|
||||
self.saved_peer_info = None
|
||||
|
||||
|
||||
|
||||
if tab == 0: #Details Pane
|
||||
try:
|
||||
state = self.manager.get_torrent_state(self.get_selected_torrent())
|
||||
|
|
|
@ -23,9 +23,12 @@
|
|||
import os
|
||||
|
||||
class PluginManager:
|
||||
def __init__(self):
|
||||
def __init__(self, deluge_core, deluge_interface):
|
||||
self.plugin_dirs = []
|
||||
self.plugins = {}
|
||||
self.available_plugins = {}
|
||||
self.enabled_plugins = {}
|
||||
self.core = deluge_core
|
||||
self.interface = deluge_interface
|
||||
|
||||
def add_plugin_dir(self, directory):
|
||||
self.plugin_dirs.append(directory)
|
||||
|
@ -33,11 +36,30 @@ class PluginManager:
|
|||
def scan_for_plugins(self):
|
||||
register_plugin = self.register_plugin
|
||||
for folder in self.plugin_dirs:
|
||||
print "Looking in", folder
|
||||
plugin_folders = os.listdir(folder)
|
||||
for plugin in plugin_folders:
|
||||
if os.path.isfile(folder + plugin + "/plugin.py"):
|
||||
execfile(folder + plugin + "/plugin.py")
|
||||
if os.path.isfile(folder + "/" + plugin + "/plugin.py"):
|
||||
execfile(folder + "/" + plugin + "/plugin.py")
|
||||
|
||||
def get_available_plugins(self):
|
||||
return self.available_plugins.keys()
|
||||
|
||||
def get_plugin(self, name):
|
||||
return self.available_plugins[name]
|
||||
|
||||
def enable_plugin(self, name):
|
||||
self.enabled_plugins[name] = self.available_plugins[name]['class'](self.core, self.interface)
|
||||
|
||||
def get_enabled_plugins(self):
|
||||
return self.enabled_plugins.keys()
|
||||
|
||||
def disable_plugin(self, name):
|
||||
self.enabled_plugins[name].unload()
|
||||
self.enabled_plugins.pop(name)
|
||||
|
||||
def update_active_plugins(self):
|
||||
for name in self.enabled_plugins.keys():
|
||||
self.enabled_plugins[name].update()
|
||||
|
||||
def register_plugin(self,
|
||||
name,
|
||||
|
@ -49,7 +71,15 @@ class PluginManager:
|
|||
requires=None,
|
||||
interface=None,
|
||||
required_plugins=None):
|
||||
self.plugins[name] = (plugin_class, version, description, config, default, requires, interface, required_plugins)
|
||||
self.available_plugins[name] = {'class': plugin_class,
|
||||
'version': version,
|
||||
'description': description,
|
||||
'config': config,
|
||||
'default': default,
|
||||
'requires': requires,
|
||||
'interface': interface,
|
||||
'req plugins': required_plugins
|
||||
}
|
||||
|
||||
## Few lines of code to test functionality
|
||||
if __name__ == "__main__":
|
||||
|
@ -59,4 +89,4 @@ if __name__ == "__main__":
|
|||
for x in p.plugins:
|
||||
print x
|
||||
for y in p.plugins[x]:
|
||||
print "\t", y
|
||||
print "\t", y
|
||||
|
|
|
@ -91,5 +91,5 @@ def add_toggle_column(view, header, cid, toggled_signal=None):
|
|||
column.set_expand(False)
|
||||
view.append_column(column)
|
||||
if toggled_signal is not None:
|
||||
render.connect("toggled", toggled_signal, cid)
|
||||
render.connect("toggled", toggled_signal)
|
||||
return column
|
||||
|
|
Loading…
Reference in New Issue