~onboard/onboard/0.99

« back to all changes in this revision

Viewing changes to Onboard/Config.py

  • Committer: marmuta
  • Date: 2013-08-18 18:00:28 UTC
  • Revision ID: marmvta@gmail.com-20130818180028-xdhfvw3i220volz2
Support XDG Base Directory Specification (LP: #1074448).

Onboard's data directory moves from ~/.onboard to the XDG data directory,
which will usually be ~/.local/share/onboard.
Existing data in either ~/.onboard or ~/.sok is migrated to the new location.

System defaults are looked up in XDG_CONFIG_HOME, XDG_CONFIG_DIRS and the
previous locations, in this order.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
 
13
13
from gi.repository import GLib, Gtk
14
14
 
15
 
from Onboard.utils          import show_confirmation_dialog, Version, unicode_str
 
15
from Onboard.utils          import show_confirmation_dialog, Version, \
 
16
                                   unicode_str, XDGDirs, chmodtree
16
17
from Onboard.definitions    import InputEventSourceEnum, TouchInputEnum
17
18
from Onboard.WindowUtils    import Handle, DockingEdge
18
19
from Onboard.ConfigUtils    import ConfigObject
70
71
 
71
72
INSTALL_DIR                = "/usr/share/onboard"
72
73
LOCAL_INSTALL_DIR          = "/usr/local/share/onboard"
73
 
USER_DIR                   = ".onboard"
 
74
USER_DIR                   = "onboard"
74
75
 
75
76
SYSTEM_DEFAULTS_FILENAME   = "onboard-defaults.conf"
76
77
 
251
252
        self.install_dir = self._get_install_dir()
252
253
        self.user_dir = self._get_user_dir()
253
254
 
254
 
        # migrate old user dir ".sok" to ".onboard"
255
 
        old_user_dir = os.path.join(os.path.expanduser("~"), ".sok")
256
 
        user_dir = self.user_dir
257
 
        if not os.path.exists(user_dir) and os.path.exists(old_user_dir):
258
 
            _logger.info(_format("Migrating user directory '{}' to '{}'.", \
259
 
                                 old_user_dir, user_dir))
260
 
            try:
261
 
                copytree(old_user_dir, user_dir)
262
 
            except OSError as ex: # python >2.5
263
 
                _logger.error(_format("Failed to migrate user directory. ") + \
264
 
                              unicode_str(ex))
 
255
        # migrate old user dir ".sok" or ".onboard" to XDG data home
 
256
        if not os.path.exists(self.user_dir):
 
257
            old_user_dir = os.path.join(os.path.expanduser("~"), ".onboard")
 
258
            if not os.path.exists(old_user_dir):
 
259
                old_user_dir = os.path.join(os.path.expanduser("~"), ".sok")
 
260
            if os.path.exists(old_user_dir):
 
261
                _logger.info(_format("Migrating user directory '{}' to '{}'.", \
 
262
                                     old_user_dir, self.user_dir))
 
263
                try:
 
264
                    copytree(old_user_dir, self.user_dir)
 
265
                    chmodtree(self.user_dir, 0o700, True) # honor XDG spec
 
266
                except OSError as ex: # python >2.5
 
267
                    _logger.error(_format("Failed to migrate user directory. ") + \
 
268
                                  unicode_str(ex))
265
269
 
266
270
        # Load system defaults (if there are any, not required).
267
271
        # Used for distribution specific settings, aka branding.
268
 
        paths = [os.path.join(self.install_dir, SYSTEM_DEFAULTS_FILENAME),
 
272
        paths = XDGDirs.get_all_config_dirs(USER_DIR) + \
 
273
                [os.path.join(self.install_dir, SYSTEM_DEFAULTS_FILENAME),
269
274
                 os.path.join("/etc/onboard", SYSTEM_DEFAULTS_FILENAME)]
270
275
        self.load_system_defaults(paths)
271
276
 
934
939
        return result
935
940
 
936
941
    def _get_user_dir(self):
937
 
        return os.path.join(os.path.expanduser("~"), USER_DIR)
 
942
        return XDGDirs.get_data_home(USER_DIR)
938
943
 
939
944
 
940
945
class ConfigKeyboard(ConfigObject):