changeset edee1e4ca03a in /home/hg/repos/gajim

details:http://hg.gajim.org/gajim?cmd=changeset;node=edee1e4ca03a
description: auto-check for updates of installed plugins

diffstat:

 plugins/plugin_installer/manifest.ini        |   3 +-
 plugins/plugin_installer/plugin_installer.py |  74 ++++++++++++++++++++++++++-
 2 files changed, 73 insertions(+), 4 deletions(-)

diffs (149 lines):

diff -r e59e6777df1d -r edee1e4ca03a plugins/plugin_installer/manifest.ini
--- a/plugins/plugin_installer/manifest.ini     Mon Oct 31 10:47:28 2011 +0100
+++ b/plugins/plugin_installer/manifest.ini     Wed Nov 02 11:23:02 2011 +0100
@@ -1,7 +1,8 @@
 [info]
 name: Plugin Installer
 short_name: plugin_installer
-version: 0.3
+version: 0.4
 description: Install and upgrade plugins from ftp
 authors: Denis Fomin <[email protected]>
+ Yann Leboulanger <[email protected]>
 homepage: http://www.gajim.org/
diff -r e59e6777df1d -r edee1e4ca03a 
plugins/plugin_installer/plugin_installer.py
--- a/plugins/plugin_installer/plugin_installer.py      Mon Oct 31 10:47:28 
2011 +0100
+++ b/plugins/plugin_installer/plugin_installer.py      Wed Nov 02 11:23:02 
2011 +0100
@@ -33,10 +33,17 @@
 from common import gajim
 from plugins import GajimPlugin
 from plugins.helpers import log_calls, log
-from dialogs import WarningDialog, HigDialog
+from dialogs import WarningDialog, HigDialog, YesNoDialog
 from plugins.gui import GajimPluginConfigDialog
 
 
+def convert_version_to_list(version_str):
+    version_list = version_str.split('.')
+    l = []
+    while len(version_list):
+        l.append(int(version_list.pop(0)))
+    return l
+
 class PluginInstaller(GajimPlugin):
 
     @log_calls('PluginInstallerPlugin')
@@ -44,6 +51,10 @@
         self.description = _('Install and upgrade plugins from ftp')
         self.config_dialog = PluginInstallerPluginConfigDialog(self)
         self.config_default_values = {'ftp_server': ('ftp.gajim.org', '')}
+        self.window = None
+        self.progressbar = None
+        self.available_plugins_model = None
+        self.upgrading = False # True when opened from upgrade popup dialog
 
     @log_calls('PluginInstallerPlugin')
     def activate(self):
@@ -52,6 +63,50 @@
         self.id_ = self.pl_menuitem.connect_after('activate', self.on_activate)
         if 'plugins' in gajim.interface.instances:
             self.on_activate(None)
+        gobject.timeout_add_seconds(30, self.check_update)
+
+    @log_calls('PluginInstallerPlugin')
+    def warn_update(self, plugins):
+        def open_update(dummy):
+            self.upgrading = True
+            self.pl_menuitem.activate()
+            nb = gajim.interface.instances['plugins'].plugins_notebook
+            gobject.idle_add(nb.set_current_page, 1)
+        if plugins:
+            plugins_str = '\n'.join(plugins)
+            YesNoDialog(_('Plugins updates'), _('Some updates are available 
for'
+                ' your installer plugins. Do you want to update those plugins:'
+                '\n%s') % plugins_str, on_response_yes=open_update)
+
+    @log_calls('PluginInstallerPlugin')
+    def check_update(self):
+        def _run():
+            to_update = []
+            con = ftplib.FTP(ftp.server)
+            con.login()
+            con.cwd('plugins')
+            plugins_dirs = con.nlst()
+            for dir_ in plugins_dirs:
+                try:
+                    con.retrbinary('RETR %s/manifest.ini' % dir_,
+                        ftp.handleDownload)
+                except Exception, error:
+                    if str(error).startswith('550'):
+                        continue
+                ftp.config.readfp(io.BytesIO(ftp.buffer_.getvalue()))
+                local_version = ftp.get_plugin_version(ftp.config.get('info',
+                    'name'))
+                if local_version:
+                    local = convert_version_to_list(local_version)
+                    remote = convert_version_to_list(ftp.config.get('info',
+                        'version'))
+                    if remote > local:
+                        to_update.append(ftp.config.get('info', 'name'))
+            con.quit()
+            gobject.idle_add(self.warn_update, to_update)
+        ftp = Ftp(self)
+        ftp.run = _run
+        ftp.start()
 
     @log_calls('PluginInstallerPlugin')
     def deactivate(self):
@@ -152,12 +207,13 @@
         else:
             self.inslall_upgrade_button.set_property('sensitive', True)
 
-    def on_notebook_switch_page(self, widget, page, page_num,):
+    def on_notebook_switch_page(self, widget, page, page_num):
         if not hasattr(self, 'ftp') and self.page_num == page_num:
             self.available_plugins_model.clear()
             self.progressbar.show()
             self.ftp = Ftp(self)
             self.ftp.remote_dirs = None
+            self.ftp.upgrading = True
             self.ftp.start()
 
     def on_inslall_upgrade_clicked(self, widget):
@@ -309,6 +365,7 @@
 class Ftp(threading.Thread):
     def __init__(self, plugin):
         super(Ftp, self).__init__()
+        self.plugin = plugin
         self.window = plugin.window
         self.server = plugin.config['ftp_server']
         self.progressbar = plugin.progressbar
@@ -317,6 +374,7 @@
         self.buffer_ = io.BytesIO()
         self.remote_dirs = None
         self.append_to_model = True
+        self.upgrading = False
 
     def model_append(self, row):
         self.model.append(row)
@@ -357,9 +415,19 @@
                     self.config.readfp(io.BytesIO(self.buffer_.getvalue()))
                     local_version = self.get_plugin_version(
                         self.config.get('info', 'name'))
+                    upgrade = False
+                    if self.upgrading and local_version:
+                        local = convert_version_to_list(local_version)
+                        remote = 
convert_version_to_list(self.config.get('info',
+                            'version'))
+                        if remote > local:
+                            upgrade = True
+                            gobject.idle_add(
+                                
self.plugin.inslall_upgrade_button.set_property,
+                                'sensitive', True)
                     gobject.idle_add(self.model_append, [dir_,
                         self.config.get('info', 'name'), local_version,
-                        self.config.get('info', 'version'), False,
+                        self.config.get('info', 'version'), upgrade,
                         self.config.get('info', 'description'),
                         self.config.get('info', 'authors'),
                         self.config.get('info', 'homepage'), ])
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to