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">&#x25CF;</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">&lt;b&gt;Settings&lt;/b&gt;</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
-~----------~----~----~----~------~----~------~--~---

Reply via email to