Author: damoxc
Revision: 5622
Log:
add a webui plugin to core and gtk for integrating the web interface
with the core
Diff:
Added: trunk/deluge/plugins/webui/create_dev_link.sh
===================================================================
--- trunk/deluge/plugins/webui/create_dev_link.sh
(rev 0)
+++ trunk/deluge/plugins/webui/create_dev_link.sh 2009-08-03 21:37:35 UTC
(rev 5622)
@@ -0,0 +1,7 @@
+#!/bin/bash
+cd /home/damien/Projects/deluge/deluge/plugins/webui
+mkdir temp
+export PYTHONPATH=./temp
+python setup.py build develop --install-dir ./temp
+cp ./temp/WebUi.egg-link /home/damien/.config/deluge/plugins
+rm -fr ./temp
Property changes on: trunk/deluge/plugins/webui/create_dev_link.sh
___________________________________________________________________
Added: svn:executable
+ *
Added: trunk/deluge/plugins/webui/setup.py
===================================================================
--- trunk/deluge/plugins/webui/setup.py (rev 0)
+++ trunk/deluge/plugins/webui/setup.py 2009-08-03 21:37:35 UTC (rev 5622)
@@ -0,0 +1,70 @@
+#
+# setup.py
+#
+# Copyright (C) 2009 Damien Churchill <[email protected]>
+#
+# Basic plugin template created by:
+# Copyright (C) 2008 Martijn Voncken <[email protected]>
+# Copyright (C) 2007-2009 Andrew Resch <[email protected]>
+#
+# Deluge is free software.
+#
+# You may redistribute it and/or modify it under the terms of the
+# GNU General Public License, as published by the Free Software
+# Foundation; either version 3 of the License, or (at your option)
+# any later version.
+#
+# deluge is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with deluge. If not, write to:
+# The Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor
+# Boston, MA 02110-1301, USA.
+#
+# In addition, as a special exception, the copyright holders give
+# permission to link the code of portions of this program with the OpenSSL
+# library.
+# You must obey the GNU General Public License in all respects for all of
+# the code used other than OpenSSL. If you modify file(s) with this
+# exception, you may extend this exception to your version of the file(s),
+# but you are not obligated to do so. If you do not wish to do so, delete
+# this exception statement from your version. If you delete this exception
+# statement from all source files in the program, then also delete it here.
+#
+
+from setuptools import setup
+
+__plugin_name__ = "WebUi"
+__author__ = "Damien Churchill"
+__author_email__ = "[email protected]"
+__version__ = "0.1"
+__url__ = "http://deluge-torrent.org"
+__license__ = "GPLv3"
+__description__ = "Allows starting the web interface within the daemon."
+__long_description__ = """"""
+__pkg_data__ = {__plugin_name__.lower(): ["template/*", "data/*"]}
+
+setup(
+ name=__plugin_name__,
+ version=__version__,
+ description=__description__,
+ author=__author__,
+ author_email=__author_email__,
+ url=__url__,
+ license=__license__,
+ long_description=__long_description__ if __long_description__ else
__description__,
+
+ packages=[__plugin_name__.lower()],
+ package_data = __pkg_data__,
+
+ entry_points="""
+ [deluge.plugin.core]
+ %s = %s:CorePlugin
+ [deluge.plugin.gtkui]
+ %s = %s:GtkUIPlugin
+ """ % ((__plugin_name__, __plugin_name__.lower())*2)
+)
Added: trunk/deluge/plugins/webui/webui/__init__.py
===================================================================
--- trunk/deluge/plugins/webui/webui/__init__.py
(rev 0)
+++ trunk/deluge/plugins/webui/webui/__init__.py 2009-08-03 21:37:35 UTC
(rev 5622)
@@ -0,0 +1,57 @@
+#
+# __init__.py
+#
+# Copyright (C) 2009 Damien Churchill <[email protected]>
+#
+# Basic plugin template created by:
+# Copyright (C) 2008 Martijn Voncken <[email protected]>
+# Copyright (C) 2007-2009 Andrew Resch <[email protected]>
+#
+# Deluge is free software.
+#
+# You may redistribute it and/or modify it under the terms of the
+# GNU General Public License, as published by the Free Software
+# Foundation; either version 3 of the License, or (at your option)
+# any later version.
+#
+# deluge is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with deluge. If not, write to:
+# The Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor
+# Boston, MA 02110-1301, USA.
+#
+# In addition, as a special exception, the copyright holders give
+# permission to link the code of portions of this program with the OpenSSL
+# library.
+# You must obey the GNU General Public License in all respects for all of
+# the code used other than OpenSSL. If you modify file(s) with this
+# exception, you may extend this exception to your version of the file(s),
+# but you are not obligated to do so. If you do not wish to do so, delete
+# this exception statement from your version. If you delete this exception
+# statement from all source files in the program, then also delete it here.
+#
+
+from deluge.plugins.init import PluginInitBase
+
+class CorePlugin(PluginInitBase):
+ def __init__(self, plugin_name):
+ from core import Core as _plugin_cls
+ self._plugin_cls = _plugin_cls
+ super(CorePlugin, self).__init__(plugin_name)
+
+class GtkUIPlugin(PluginInitBase):
+ def __init__(self, plugin_name):
+ from gtkui import GtkUI as _plugin_cls
+ self._plugin_cls = _plugin_cls
+ super(GtkUIPlugin, self).__init__(plugin_name)
+
+class WebUIPlugin(PluginInitBase):
+ def __init__(self, plugin_name):
+ from webui import WebUI as _plugin_cls
+ self._plugin_cls = _plugin_cls
+ super(WebUIPlugin, self).__init__(plugin_name)
Added: trunk/deluge/plugins/webui/webui/common.py
===================================================================
--- trunk/deluge/plugins/webui/webui/common.py (rev 0)
+++ trunk/deluge/plugins/webui/webui/common.py 2009-08-03 21:37:35 UTC (rev
5622)
@@ -0,0 +1,41 @@
+#
+# common.py
+#
+# Copyright (C) 2009 Damien Churchill <[email protected]>
+#
+# Basic plugin template created by:
+# Copyright (C) 2008 Martijn Voncken <[email protected]>
+# Copyright (C) 2007-2009 Andrew Resch <[email protected]>
+#
+# Deluge is free software.
+#
+# You may redistribute it and/or modify it under the terms of the
+# GNU General Public License, as published by the Free Software
+# Foundation; either version 3 of the License, or (at your option)
+# any later version.
+#
+# deluge is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with deluge. If not, write to:
+# The Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor
+# Boston, MA 02110-1301, USA.
+#
+# In addition, as a special exception, the copyright holders give
+# permission to link the code of portions of this program with the OpenSSL
+# library.
+# You must obey the GNU General Public License in all respects for all of
+# the code used other than OpenSSL. If you modify file(s) with this
+# exception, you may extend this exception to your version of the file(s),
+# but you are not obligated to do so. If you do not wish to do so, delete
+# this exception statement from your version. If you delete this exception
+# statement from all source files in the program, then also delete it here.
+#
+
+def get_resource(filename):
+ import pkg_resources, os
+ return pkg_resources.resource_filename("webui", os.path.join("data",
filename))
Added: trunk/deluge/plugins/webui/webui/core.py
===================================================================
--- trunk/deluge/plugins/webui/webui/core.py (rev 0)
+++ trunk/deluge/plugins/webui/webui/core.py 2009-08-03 21:37:35 UTC (rev
5622)
@@ -0,0 +1,119 @@
+#
+# core.py
+#
+# Copyright (C) 2009 Damien Churchill <[email protected]>
+#
+# Basic plugin template created by:
+# Copyright (C) 2008 Martijn Voncken <[email protected]>
+# Copyright (C) 2007-2009 Andrew Resch <[email protected]>
+#
+# Deluge is free software.
+#
+# You may redistribute it and/or modify it under the terms of the
+# GNU General Public License, as published by the Free Software
+# Foundation; either version 3 of the License, or (at your option)
+# any later version.
+#
+# deluge is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with deluge. If not, write to:
+# The Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor
+# Boston, MA 02110-1301, USA.
+#
+# In addition, as a special exception, the copyright holders give
+# permission to link the code of portions of this program with the OpenSSL
+# library.
+# You must obey the GNU General Public License in all respects for all of
+# the code used other than OpenSSL. If you modify file(s) with this
+# exception, you may extend this exception to your version of the file(s),
+# but you are not obligated to do so. If you do not wish to do so, delete
+# this exception statement from your version. If you delete this exception
+# statement from all source files in the program, then also delete it here.
+#
+
+import os
+
+from deluge import common, component, configmanager
+from deluge.log import LOG as log
+from deluge.plugins.pluginbase import CorePluginBase
+from deluge.core.rpcserver import export
+
+from deluge.ui.web import server
+
+DEFAULT_PREFS = {
+ "enabled": False,
+ "ssl": False,
+ "port": 8112
+}
+
+class Core(CorePluginBase):
+
+
+ def enable(self):
+ self.config = configmanager.ConfigManager("web_plugin.conf",
DEFAULT_PREFS)
+ self.server = None
+ if self.config['enabled']:
+ self.start()
+
+ def disable(self):
+ if self.server:
+ self.server.stop()
+
+ def update(self):
+ pass
+
+ def restart(self):
+ if self.server:
+ self.server.stop().addCallback(self.on_stop)
+ else:
+ self.start()
+
+ def on_stop(self, *args):
+ self.start()
+
+ @export
+ def start(self):
+ if not self.server:
+ self.server = server.DelugeWeb()
+ self.server.port = self.config["port"]
+ self.server.https = self.config["ssl"]
+ self.server.start(False)
+
+ @export
+ def stop(self):
+ if self.server:
+ self.server.stop()
+
+ @export
+ def set_config(self, config):
+ "sets the config dictionary"
+
+ action = None
+ if "enabled" in config:
+ if config["enabled"] != self.config["enabled"]:
+ action = config["enabled"] and 'start' or 'stop'
+
+ if "ssl" in config:
+ if not action:
+ action = 'restart'
+
+ for key in config.keys():
+ self.config[key] = config[key]
+ self.config.save()
+
+ if action == 'start':
+ self.start()
+ elif action == 'stop':
+ self.stop()
+ elif action == 'restart':
+ self.restart()
+
+ @export
+ def get_config(self):
+ "returns the config dictionary"
+ return self.config.config
Added: trunk/deluge/plugins/webui/webui/data/config.glade
===================================================================
--- trunk/deluge/plugins/webui/webui/data/config.glade
(rev 0)
+++ trunk/deluge/plugins/webui/webui/data/config.glade 2009-08-03 21:37:35 UTC
(rev 5622)
@@ -0,0 +1,109 @@
+<?xml version="1.0"?>
+<glade-interface>
+ <!-- interface-requires gtk+ 2.16 -->
+ <!-- interface-naming-policy toplevel-contextual -->
+ <widget class="GtkWindow" id="window1">
+ <child>
+ <widget class="GtkVBox" id="prefs_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <widget class="GtkFrame" id="settings_frame">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <widget class="GtkAlignment" id="settings_alignment">
+ <property name="visible">True</property>
+ <property name="top_padding">10</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVBox" id="settings_vbox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">5</property>
+ <child>
+ <widget class="GtkCheckButton" id="enabled_checkbutton">
+ <property name="label" translatable="yes">Enable web
interface</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="ssl_checkbutton">
+ <property name="label" translatable="yes">Enable
SSL</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="port_hbox">
+ <property name="visible">True</property>
+ <property name="spacing">5</property>
+ <child>
+ <widget class="GtkLabel" id="port_label">
+ <property name="visible">True</property>
+ <property name="label"
translatable="yes">Listening port:</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="port_spinbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="adjustment">8112 0 99999 1 10
0</property>
+ <property name="numeric">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="settings_label">
+ <property name="visible">True</property>
+ <property name="label"
translatable="yes"><b>Settings</b></property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
Added: trunk/deluge/plugins/webui/webui/gtkui.py
===================================================================
--- trunk/deluge/plugins/webui/webui/gtkui.py (rev 0)
+++ trunk/deluge/plugins/webui/webui/gtkui.py 2009-08-03 21:37:35 UTC (rev
5622)
@@ -0,0 +1,79 @@
+#
+# gtkui.py
+#
+# Copyright (C) 2009 Damien Churchill <[email protected]>
+#
+# Basic plugin template created by:
+# Copyright (C) 2008 Martijn Voncken <[email protected]>
+# Copyright (C) 2007-2009 Andrew Resch <[email protected]>
+#
+# Deluge is free software.
+#
+# You may redistribute it and/or modify it under the terms of the
+# GNU General Public License, as published by the Free Software
+# Foundation; either version 3 of the License, or (at your option)
+# any later version.
+#
+# deluge is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with deluge. If not, write to:
+# The Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor
+# Boston, MA 02110-1301, USA.
+#
+# In addition, as a special exception, the copyright holders give
+# permission to link the code of portions of this program with the OpenSSL
+# library.
+# You must obey the GNU General Public License in all respects for all of
+# the code used other than OpenSSL. If you modify file(s) with this
+# exception, you may extend this exception to your version of the file(s),
+# but you are not obligated to do so. If you do not wish to do so, delete
+# this exception statement from your version. If you delete this exception
+# statement from all source files in the program, then also delete it here.
+#
+
+import gtk
+
+from deluge.log import LOG as log
+from deluge.ui.client import client
+from deluge.plugins.pluginbase import GtkPluginBase
+import deluge.component as component
+import deluge.common
+
+from common import get_resource
+
+class GtkUI(GtkPluginBase):
+ def enable(self):
+ self.glade = gtk.glade.XML(get_resource("config.glade"))
+
+ component.get("Preferences").add_page("WebUi",
self.glade.get_widget("prefs_box"))
+ component.get("PluginManager").register_hook("on_apply_prefs",
self.on_apply_prefs)
+ component.get("PluginManager").register_hook("on_show_prefs",
self.on_show_prefs)
+ client.webui.get_config().addCallback(self.cb_get_config)
+
+ def disable(self):
+ component.get("Preferences").remove_page("WebUi")
+ component.get("PluginManager").deregister_hook("on_apply_prefs",
self.on_apply_prefs)
+ component.get("PluginManager").deregister_hook("on_show_prefs",
self.on_show_prefs)
+
+ def on_apply_prefs(self):
+ log.debug("applying prefs for WebUi")
+ config = {
+ "enabled":
self.glade.get_widget("enabled_checkbutton").get_active(),
+ "ssl": self.glade.get_widget("ssl_checkbutton").get_active(),
+ "port": self.glade.get_widget("port_spinbutton").get_value_as_int()
+ }
+ client.webui.set_config(config)
+
+ def on_show_prefs(self):
+ client.webui.get_config().addCallback(self.cb_get_config)
+
+ def cb_get_config(self, config):
+ "callback for on show_prefs"
+
self.glade.get_widget("enabled_checkbutton").set_active(config["enabled"])
+ self.glade.get_widget("ssl_checkbutton").set_active(config["ssl"])
+ self.glade.get_widget("port_spinbutton").set_value(config["port"])
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"deluge-commit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/deluge-commit?hl=en
-~----------~----~----~----~------~----~------~--~---