fix some crashes during settings wizard
[enigma2.git] / lib / python / Tools / Directories.py
index 8ed2c8a46017951c8702db09bd1047d3a6094c99..f0ef0de22a3dfd6acca870adc069d270b29c029d 100755 (executable)
@@ -3,6 +3,7 @@
 from os import path as os_path, mkdir, rmdir, system, walk, stat as os_stat, listdir, readlink, makedirs, error as os_error, symlink, access, F_OK, R_OK, W_OK
 from stat import S_IMODE
 from re import compile
+from enigma import eEnv
 
 try:
        from os import chmod
@@ -39,26 +40,26 @@ PATH_CREATE = 0
 PATH_DONTCREATE = 1
 PATH_FALLBACK = 2
 defaultPaths = {
-               SCOPE_TRANSPONDERDATA: ("/etc/", PATH_DONTCREATE),
-               SCOPE_SYSETC: ("/etc/", PATH_DONTCREATE),
-               SCOPE_FONTS: ("/usr/share/fonts/", PATH_DONTCREATE),
-               SCOPE_CONFIG: ("/etc/enigma2/", PATH_CREATE),
-               SCOPE_PLUGINS: ("/usr/lib/enigma2/python/Plugins/", PATH_CREATE),
+               SCOPE_TRANSPONDERDATA: (eEnv.resolve("${sysconfdir}/"), PATH_DONTCREATE),
+               SCOPE_SYSETC: (eEnv.resolve("${sysconfdir}/"), PATH_DONTCREATE),
+               SCOPE_FONTS: (eEnv.resolve("${datadir}/fonts/"), PATH_DONTCREATE),
+               SCOPE_CONFIG: (eEnv.resolve("${sysconfdir}/enigma2/"), PATH_CREATE),
+               SCOPE_PLUGINS: (eEnv.resolve("${libdir}/enigma2/python/Plugins/"), PATH_CREATE),
 
-               SCOPE_LANGUAGE: ("/usr/share/enigma2/po/", PATH_DONTCREATE),
+               SCOPE_LANGUAGE: (eEnv.resolve("${datadir}/enigma2/po/"), PATH_DONTCREATE),
 
-               SCOPE_SKIN: ("/usr/share/enigma2/", PATH_DONTCREATE),
-               SCOPE_SKIN_IMAGE: ("/usr/share/enigma2/", PATH_DONTCREATE),
+               SCOPE_SKIN: (eEnv.resolve("${datadir}/enigma2/"), PATH_DONTCREATE),
+               SCOPE_SKIN_IMAGE: (eEnv.resolve("${datadir}/enigma2/"), PATH_DONTCREATE),
                SCOPE_HDD: ("/hdd/movie/", PATH_DONTCREATE),
                SCOPE_MEDIA: ("/media/", PATH_DONTCREATE),
-               SCOPE_PLAYLIST: ("/etc/enigma2/playlist/", PATH_CREATE),
+               SCOPE_PLAYLIST: (eEnv.resolve("${sysconfdir}/enigma2/playlist/"), PATH_CREATE),
                
                SCOPE_USERETC: ("", PATH_DONTCREATE), # user home directory
                
-               SCOPE_DEFAULTDIR: ("/usr/share/enigma2/defaults/", PATH_CREATE),
-               SCOPE_DEFAULTPARTITION: ("/dev/mtdblock/6", PATH_DONTCREATE),
-               SCOPE_DEFAULTPARTITIONMOUNTDIR: ("/usr/share/enigma2/dealer", PATH_CREATE),
-               SCOPE_METADIR: ("/usr/share/meta", PATH_CREATE),
+               SCOPE_DEFAULTDIR: (eEnv.resolve("${datadir}/enigma2/defaults/"), PATH_CREATE),
+               SCOPE_DEFAULTPARTITION: ("/dev/mtdblock6", PATH_DONTCREATE),
+               SCOPE_DEFAULTPARTITIONMOUNTDIR: (eEnv.resolve("${datadir}/enigma2/dealer"), PATH_CREATE),
+               SCOPE_METADIR: (eEnv.resolve("${datadir}/meta"), PATH_CREATE),
        }
 
 FILE_COPY = 0 # copy files from fallback dir to the basedir
@@ -67,7 +68,7 @@ PATH_COPY = 2 # copy the complete fallback dir to the basedir
 PATH_MOVE = 3 # move the fallback dir to the basedir (can be used for changes in paths)
 fallbackPaths = {
                SCOPE_CONFIG: [("/home/root/", FILE_MOVE),
-                                          ("/usr/share/enigma2/defaults/", FILE_COPY)],
+                                          (eEnv.resolve("${datadir}/enigma2/defaults/"), FILE_COPY)],
                SCOPE_HDD: [("/hdd/movies", PATH_MOVE)]
        }
 
@@ -117,7 +118,11 @@ def resolveFilename(scope, base = "", path_prefix = None):
 
        if flags == PATH_CREATE:
                if not pathExists(path):
-                       mkdir(path)
+                       try:
+                               mkdir(path)
+                       except OSError:
+                               print "resolveFilename: Couldn't create %s" % path
+                               return None
 
        fallbackPath = fallbackPaths.get(scope)
 
@@ -223,12 +228,13 @@ def InitFallbackFiles():
 # returns a list of tuples containing pathname and filename matching the given pattern
 # example-pattern: match all txt-files: ".*\.txt$"
 def crawlDirectory(directory, pattern):
-       expression = compile(pattern)
        list = []
-       for root, dirs, files in walk(directory):
-               for file in files:
-                       if expression.match(file) is not None:
-                               list.append((root, file))
+       if directory:
+               expression = compile(pattern)
+               for root, dirs, files in walk(directory):
+                       for file in files:
+                               if expression.match(file) is not None:
+                                       list.append((root, file))
        return list
 
 def copyfile(src, dst):