From ccc32ee73eb600bb1aabe60eafe7696c5ea1a16d Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Mon, 31 Dec 2012 00:31:50 +0900 Subject: Added to sync the user config xml between versions. --- configure.ac | 11 +++++++++++ engine/default.xml.in.in | 1 + engine/main.py | 35 +++++++++++++++++++++++++++++++++++ setup/main.py | 36 ++++++++++++++++++++++++++++++++++-- 4 files changed, 81 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 19ab982..9a06d68 100644 --- a/configure.ac +++ b/configure.ac @@ -360,6 +360,17 @@ else AC_MSG_ERROR([ibus 1.5 or later supports layout_option in IBus.EngineDesc]) fi +AC_MSG_CHECKING([if IBus.EngineDesc has get_version]) +DESC_VERSION_TEST="from gi.repository import IBus +exit(not hasattr(IBus.EngineDesc, 'get_version')) +" +$PYTHON -c "$DESC_VERSION_TEST" +if test $? -eq 0; then + AC_MSG_RESULT([yes]) +else + AC_MSG_ERROR([ibus 1.5 or later supports version in IBus.EngineDesc]) +fi + dnl - set ibus-anthy layout AC_ARG_WITH(layout, [AC_HELP_STRING([--with-layout=LAYOUT], diff --git a/engine/default.xml.in.in b/engine/default.xml.in.in index a6c1873..27e3c82 100644 --- a/engine/default.xml.in.in +++ b/engine/default.xml.in.in @@ -14,5 +14,6 @@ 99 @HOTKEYS_XML@ @SYMBOL_XML@ + @PACKAGE_VERSION@ diff --git a/engine/main.py b/engine/main.py index d339bd2..478f4ce 100644 --- a/engine/main.py +++ b/engine/main.py @@ -22,9 +22,11 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import os +from os import path import sys import getopt import locale +import xml.dom.minidom from gi.repository import GObject from gi.repository import IBus @@ -82,6 +84,38 @@ def get_userhome(): userhome = userhome.rstrip('/') return userhome +def resync_engine_file(): + user_config = path.join(get_userhome(), '.config', + 'ibus-anthy', 'engines.xml') + system_config = path.join(config.PKGDATADIR, 'engine', 'default.xml') + if not path.exists(user_config): + return + if not path.exists(system_config): + os.unlink(user_config) + return + + # path.getmtime depends on the build time rather than install time. + def __get_engine_file_version(engine_file): + version_str = '' + dom = xml.dom.minidom.parse(engine_file) + elements = dom.getElementsByTagName('version') + nodes = [] + if len(elements) > 0: + nodes = elements[0].childNodes + if len(nodes) > 0: + version_str = nodes[0].data + if type(version_str) == unicode: + version_str = str(version_str) + if version_str != '': + version_str = version_str.strip() + return version_str + + user_config_version = __get_engine_file_version(user_config) + system_config_version = __get_engine_file_version(system_config) + if system_config_version > user_config_version: + import shutil + shutil.copyfile(system_config, user_config) + def print_xml(): user_config = os.path.join(get_userhome(), '.config', 'ibus-anthy', 'engines.xml') @@ -141,6 +175,7 @@ def main(): sys.exit() if xml: + resync_engine_file() print_xml() return diff --git a/setup/main.py b/setup/main.py index 2434476..e00abb5 100644 --- a/setup/main.py +++ b/setup/main.py @@ -24,6 +24,7 @@ from os import environ, getuid, path import os, sys import locale +import xml.dom.minidom import gettext from gettext import dgettext @@ -922,6 +923,38 @@ class AnthySetup(object): active = l.get_value(iter, id) renderer.set_property('active', active) + def __resync_engine_file(self): + user_config = path.join(self.__get_userhome(), '.config', + 'ibus-anthy', 'engines.xml') + system_config = path.join(config.PKGDATADIR, 'engine', 'default.xml') + if not path.exists(user_config): + return + if not path.exists(system_config): + os.unlink(user_config) + return + + # path.getmtime depends on the build time rather than install time. + def __get_engine_file_version(engine_file): + version_str = '' + dom = xml.dom.minidom.parse(engine_file) + elements = dom.getElementsByTagName('version') + nodes = [] + if len(elements) > 0: + nodes = elements[0].childNodes + if len(nodes) > 0: + version_str = nodes[0].data + if type(version_str) == unicode: + version_str = str(version_str) + if version_str != '': + version_str = version_str.strip() + return version_str + + user_config_version = __get_engine_file_version(user_config) + system_config_version = __get_engine_file_version(system_config) + if system_config_version > user_config_version: + import shutil + shutil.copyfile(system_config, user_config) + def __get_engine_file(self): user_config = path.join(self.__get_userhome(), '.config', 'ibus-anthy', 'engines.xml') @@ -946,7 +979,6 @@ class AnthySetup(object): if engine_file == None: return None - import xml.dom.minidom dom = xml.dom.minidom.parse(engine_file) nodes = dom.getElementsByTagName('layout')[0].childNodes if len(nodes) > 0: @@ -1018,7 +1050,6 @@ class AnthySetup(object): (layout, variant, option) = self.__parse_keymap(self.__keymap) - import xml.dom.minidom dom = xml.dom.minidom.parse(engine_file) nodes = dom.getElementsByTagName('layout')[0].childNodes if len(nodes) == 0: @@ -1054,6 +1085,7 @@ class AnthySetup(object): "Please restart ibus to reload the layout.")) def __update_keymap_label(self): + self.__resync_engine_file() prefs = self.prefs keymap = self.__get_keymap() if keymap == None: -- cgit v1.2.1