From e270d9247481bf71f15882437b79bb2998082957 Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Mon, 29 Oct 2012 14:34:55 +0100 Subject: [PATCH] create one ConfigParser instance per file so old values ore not used if current manifest has missing fields. Check that manifest file is full --- plugin_installer/manifest.ini | 2 +- plugin_installer/plugin_installer.py | 42 +++++++++++++++++++--------- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/plugin_installer/manifest.ini b/plugin_installer/manifest.ini index 7f9e082..8b58d99 100644 --- a/plugin_installer/manifest.ini +++ b/plugin_installer/manifest.ini @@ -1,7 +1,7 @@ [info] name: Plugin Installer short_name: plugin_installer -version: 0.10.5 +version: 0.11 description: Install and upgrade plugins from ftp authors: Denis Fomin Yann Leboulanger diff --git a/plugin_installer/plugin_installer.py b/plugin_installer/plugin_installer.py index 7360cce..33295ff 100644 --- a/plugin_installer/plugin_installer.py +++ b/plugin_installer/plugin_installer.py @@ -119,15 +119,23 @@ class PluginInstaller(GajimPlugin): zip_file = zipfile.ZipFile(ftp.buffer_) manifest_list = zip_file.namelist() for filename in manifest_list: - ftp.config.readfp(zip_file.open(filename)) - local_version = ftp.get_plugin_version(ftp.config.get( + config = ConfigParser.ConfigParser() + config.readfp(zip_file.open(filename)) + if not config.has_section('info'): + continue + opts = config.options('info') + if 'name' not in opts or 'version' not in opts or \ + 'description' not in opts or 'authors' not in opts or \ + 'homepage' not in opts: + continue + local_version = ftp.get_plugin_version(config.get( 'info', 'name')) if local_version: local = convert_version_to_list(local_version) - remote = convert_version_to_list(ftp.config.get('info', + remote = convert_version_to_list(config.get('info', 'version')) if remote > local: - to_update.append(ftp.config.get('info', 'name')) + to_update.append(config.get('info', 'name')) con.quit() gobject.idle_add(self.warn_update, to_update) except Exception, e: @@ -451,7 +459,6 @@ class Ftp(threading.Thread): self.window = plugin.window self.progressbar = plugin.progressbar self.model = plugin.available_plugins_model - self.config = ConfigParser.ConfigParser() self.buffer_ = io.BytesIO() self.remote_dirs = None self.append_to_model = True @@ -495,13 +502,22 @@ class Ftp(threading.Thread): gobject.idle_add(self.progressbar.set_text, _('Reading "%s"') % dir_) - self.config.readfp(zip_file.open(filename)) + config = ConfigParser.ConfigParser() + config.readfp(zip_file.open(filename)) + if not config.has_section('info'): + continue + opts = config.options('info') + if 'name' not in opts or 'version' not in opts or \ + 'description' not in opts or 'authors' not in opts or \ + 'homepage' not in opts: + continue + local_version = self.get_plugin_version( - self.config.get('info', 'name')) + 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', + remote = convert_version_to_list(config.get('info', 'version')) if remote > local: upgrade = True @@ -523,11 +539,11 @@ class Ftp(threading.Thread): local_dir = os.path.join(user_dir, dir_) gobject.idle_add(self.model_append, [def_icon, dir_, - self.config.get('info', 'name'), local_version, - self.config.get('info', 'version'), upgrade, - self.config.get('info', 'description'), - self.config.get('info', 'authors'), - self.config.get('info', 'homepage'), ]) + config.get('info', 'name'), local_version, + config.get('info', 'version'), upgrade, + config.get('info', 'description'), + config.get('info', 'authors'), + config.get('info', 'homepage'), ]) self.ftp.quit() gobject.idle_add(self.progressbar.set_fraction, 0) if self.remote_dirs: