summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.net>2008-07-08 15:00:20 +0200
committerRené 'Necoro' Neumann <necoro@necoro.net>2008-07-08 15:00:20 +0200
commit276451a383052ffdc67f561082825cc84aa83bd7 (patch)
treea148e31c8d201ecc61903eae18a495b9cfdf80be /plugins
parent0a8814713917548767f0ff823e34d412061b3ffe (diff)
parent8b6db38a2d27fca00d0fe037e86eefc941d559e4 (diff)
downloadportato-276451a383052ffdc67f561082825cc84aa83bd7.tar.gz
portato-276451a383052ffdc67f561082825cc84aa83bd7.tar.bz2
portato-276451a383052ffdc67f561082825cc84aa83bd7.zip
Merged in the new plugin system
Diffstat (limited to 'plugins')
-rw-r--r--plugins/etc_proposals.py41
-rw-r--r--plugins/etc_proposals.xml19
-rw-r--r--plugins/exception.py20
-rw-r--r--plugins/exception.xml13
-rw-r--r--plugins/gpytage.py26
-rw-r--r--plugins/gpytage.xml13
-rw-r--r--plugins/new_version.py80
-rw-r--r--plugins/new_version.xml16
-rw-r--r--plugins/notify.py49
-rw-r--r--plugins/notify.xml14
-rw-r--r--plugins/reload_portage.py27
11 files changed, 243 insertions, 75 deletions
diff --git a/plugins/etc_proposals.py b/plugins/etc_proposals.py
new file mode 100644
index 0000000..c32c8f3
--- /dev/null
+++ b/plugins/etc_proposals.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+#
+# File: plugins/etc_proposals.py
+# This file is part of the Portato-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2007-2008 René 'Necoro' Neumann
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by René 'Necoro' Neumann <necoro@necoro.net>
+
+from portato.helper import error
+
+import os
+from subprocess import Popen
+
+class EtcProposals (Plugin):
+ __author__ = "René 'Necoro' Neumann"
+ __description__ = "Adds support for <b>etc-proposals</b>, a graphical etc-update replacement."
+ __dependency__ = ["app-portage/etc-proposals"]
+
+ def init (self):
+ self.prog = ["/usr/sbin/etc-proposals"]
+ self.add_call("after_emerge", self.hook, type = "after")
+ self.add_menu("Et_c-Proposals", self.menu)
+
+ def launch (self, options = []):
+ if os.getuid() == 0:
+ Popen(self.prog+options)
+ else:
+ error("ETC_PROPOSALS :: %s",_("Cannot start etc-proposals. Not root!"))
+
+ def hook (self, *args, **kwargs):
+ """Entry point for this plugin."""
+ self.launch(["--fastexit"])
+
+ def menu (self, *args):
+ self.launch()
+
+register(EtcProposals)
diff --git a/plugins/etc_proposals.xml b/plugins/etc_proposals.xml
deleted file mode 100644
index 2caf341..0000000
--- a/plugins/etc_proposals.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<plugin xmlns="http://portato.sourceforge.net/plugin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://portato.sourceforge.net/plugin http://portato.sourceforge.net/plugin.xsd">
-
- <author>René 'Necoro' Neumann</author>
- <name>Etc-proposals</name>
-
- <import>portato.plugins.etc_proposals</import>
-
- <hooks>
- <hook type = "after_emerge" call = "etc_prop">
- <connect type="after" />
- </hook>
- </hooks>
-
- <menu>
- <item call="etc_prop_menu">Et_c-Proposals</item>
- </menu>
-
-</plugin>
diff --git a/plugins/exception.py b/plugins/exception.py
new file mode 100644
index 0000000..e653853
--- /dev/null
+++ b/plugins/exception.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+#
+# File: plugins/exception.py
+# This file is part of the Portato-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2008 René 'Necoro' Neumann
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by René 'Necoro' Neumann <necoro@necoro.net>
+
+def throw (*args, **kwargs):
+ raise Exception, "As requested, Sir!"
+
+p = Plugin()
+p.__name__ = "ExceptionThrower"
+p.__author__ = "René 'Necoro' Neumann"
+p.add_menu("Throw exception", throw)
+register(p)
diff --git a/plugins/exception.xml b/plugins/exception.xml
deleted file mode 100644
index 385e743..0000000
--- a/plugins/exception.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<plugin xmlns="http://portato.sourceforge.net/plugin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://portato.sourceforge.net/plugin http://portato.sourceforge.net/plugin.xsd">
-
- <author>René 'Necoro' Neumann</author>
- <name>Exception Thrower</name>
-
- <import>portato.plugins.exception</import>
-
- <menu>
- <item call="throw">Throw exception</item>
- </menu>
-
-</plugin>
diff --git a/plugins/gpytage.py b/plugins/gpytage.py
new file mode 100644
index 0000000..d8c2831
--- /dev/null
+++ b/plugins/gpytage.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+#
+# File: plugins/gpytage.py
+# This file is part of the Portato-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2008 René 'Necoro' Neumann
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by René 'Necoro' Neumann <necoro@necoro.net>
+
+from subprocess import Popen
+
+class GPytage (Plugin):
+ __author__ = "René 'Necoro' Neumann"
+ __description__ = "Adds a menu entry to directly start <b>gpytage</b>, a config editor."
+ __dependency__ = ["app-portage/gpytage"]
+
+ def init (self):
+ self.add_menu("Config _Editor", self.menu)
+
+ def menu (self, *args):
+ Popen(["/usr/bin/gpytage"])
+
+register(GPytage)
diff --git a/plugins/gpytage.xml b/plugins/gpytage.xml
deleted file mode 100644
index b203ae0..0000000
--- a/plugins/gpytage.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<plugin xmlns="http://portato.sourceforge.net/plugin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://portato.sourceforge.net/plugin http://portato.sourceforge.net/plugin.xsd">
-
- <author>René 'Necoro' Neumann</author>
- <name>GPytage</name>
-
- <import>portato.plugins.gpytage</import>
-
- <menu>
- <item call="gpytage">Config _Editor</item>
- </menu>
-
-</plugin>
diff --git a/plugins/new_version.py b/plugins/new_version.py
new file mode 100644
index 0000000..f3479b4
--- /dev/null
+++ b/plugins/new_version.py
@@ -0,0 +1,80 @@
+# -*- coding: utf-8 -*-
+#
+# File: plugins/new_version.py
+# This file is part of the Portato-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2008 René 'Necoro' Neumann
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by René 'Necoro' Neumann <necoro@necoro.net>
+
+try:
+ from bzrlib import plugin, branch
+except ImportError:
+ plugin = branch = None
+import gobject
+
+from portato.helper import debug, warning
+from portato import get_listener
+from portato.constants import VERSION, APP_ICON, APP
+from portato.gui.utils import GtkThread
+
+class NewVersionFinder(Plugin):
+ """
+ Checks for a new version of portato every 30 minutes and on startup.
+ """
+ __author__ = "René 'Necoro' Neumann"
+ __dependency__ = ["dev-util/bzr"]
+
+ def init (self):
+ self.add_call("main", self.run)
+ self.add_menu("Check for new _versions", self.menu)
+
+ def find_version (self, rev):
+ try:
+ b = branch.Branch.open("lp:portato")
+ except Exception, e:
+ warning("NEW_VERSION :: Exception occured while accessing the remote branch: %s", str(e))
+ return
+
+ debug("NEW_VERSION :: Installed rev: %s - Current rev: %s", rev, b.revno())
+ if int(rev) < int(b.revno()):
+ def callback():
+ get_listener().send_notify(base = "New Portato Live Version Found", descr = "You have rev. %s, but the most recent revision is %s." % (rev, b.revno()), icon = APP_ICON)
+ return False
+
+ gobject.idle_add(callback)
+
+ def start_thread(self, rev):
+ t = GtkThread(target = self.find_version, name = "Version Updater Thread", args = (rev,))
+ t.setDaemon(True)
+ t.start()
+ return True
+
+ def menu (self, *args, **kwargs):
+ """
+ Run the thread once.
+ """
+ v = VERSION.split()
+ if len(v) != 3 or v[0] != "9999":
+ return None
+
+ rev = v[-1]
+
+ plugin.load_plugins() # to have lp: addresses parsed
+
+ self.start_thread(rev)
+ return rev
+
+ def run (self, *args, **kwargs):
+ """
+ Run the thread once and add a 30 minutes timer.
+ """
+ rev = self.menu()
+
+ if rev is not None:
+ gobject.timeout_add(30*60*1000, self.start_thread, rev) # call it every 30 minutes
+
+register(NewVersionFinder, (branch is None))
diff --git a/plugins/new_version.xml b/plugins/new_version.xml
deleted file mode 100644
index 2711054..0000000
--- a/plugins/new_version.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<plugin xmlns="http://portato.sourceforge.net/plugin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://portato.sourceforge.net/plugin http://portato.sourceforge.net/plugin.xsd">
-
- <author>René 'Necoro' Neumann</author>
- <name>New Version Reminder</name>
-
- <import>portato.plugins.new_version</import>
-
- <hooks>
- <hook type="main" call="run" />
- </hooks>
-
- <menu>
- <item call="run_menu">Check for new _versions</item>
- </menu>
-</plugin>
diff --git a/plugins/notify.py b/plugins/notify.py
new file mode 100644
index 0000000..6446812
--- /dev/null
+++ b/plugins/notify.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+#
+# File: plugins/notify.py
+# This file is part of the Portato-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2007-2008 René 'Necoro' Neumann
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by René 'Necoro' Neumann <necoro@necoro.net>
+
+disable = False
+
+try:
+ import pynotify
+except ImportError:
+ disable = True
+
+from portato import get_listener
+
+from portato.helper import warning, error, debug
+from portato.constants import APP_ICON, APP
+
+class Notify (Plugin):
+ __author__ = "René 'Necoro' Neumann"
+ __description__ = "Show notifications when an emerge process finishes."
+ __dependency__ = ["dev-python/notify-python"]
+
+ def init (self):
+ self.add_call("after_emerge", self.notify)
+
+ def notify (self, retcode, **kwargs):
+ if retcode is None:
+ warning("NOTIFY :: %s", _("Notify called while process is still running!"))
+ else:
+ icon = APP_ICON
+ if retcode == 0:
+ text = _("Emerge finished!")
+ descr = ""
+ urgency = pynotify.URGENCY_NORMAL
+ else:
+ text = _("Emerge failed!")
+ descr = _("Error Code: %d") % retcode
+ urgency = pynotify.URGENCY_CRITICAL
+
+ get_listener().send_notify(base = text, descr = descr, icon = icon, urgency = urgency)
+
+register(Notify, disable)
diff --git a/plugins/notify.xml b/plugins/notify.xml
deleted file mode 100644
index 8de08c8..0000000
--- a/plugins/notify.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<plugin xmlns="http://portato.sourceforge.net/plugin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://portato.sourceforge.net/plugin http://portato.sourceforge.net/plugin.xsd">
-
- <author>René 'Necoro' Neumann</author>
- <name>Notify</name>
- <frontends>gtk</frontends>
-
- <import>portato.plugins.notify</import>
-
- <hooks>
- <hook type = "after_emerge" call = "notify" />
- </hooks>
-
-</plugin>
diff --git a/plugins/reload_portage.py b/plugins/reload_portage.py
new file mode 100644
index 0000000..280bd92
--- /dev/null
+++ b/plugins/reload_portage.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+#
+# File: plugins/reload_portage.py
+# This file is part of the Portato-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2007-2008 René 'Necoro' Neumann
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by René 'Necoro' Neumann <necoro@necoro.net>
+
+from portato.backend import system
+
+class ReloadPortage (Plugin):
+ __author__ = "René 'Necoro' Neumann"
+ __description__ = """Reloads portage when an emerge process has finished.
+This can take some time, but sometimes it is necessairy."""
+
+ def init(self):
+ self.add_call("after_emerge", self.hook, type = "after", dep = "EtcProposals")
+ self.status = self.STAT_DISABLED # disable by default
+
+ def hook (self, *args, **kwargs):
+ system.reload_settings()
+
+register(ReloadPortage)