1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
import os
SCOPE_TRANSPONDERDATA = 0
SCOPE_SYSETC = 1
SCOPE_FONTS = 2
SCOPE_SKIN = 3
SCOPE_SKIN_IMAGE = 4
SCOPE_USERETC = 5
SCOPE_CONFIG = 6
SCOPE_LANGUAGE = 7
SCOPE_HDD = 8
SCOPE_PLUGINS = 9
SCOPE_MEDIA = 10
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_LANGUAGE: ("/usr/share/enigma2/po/", PATH_CREATE),
SCOPE_SKIN: ("/usr/share/enigma2/", PATH_DONTCREATE),
SCOPE_SKIN_IMAGE: ("/usr/share/enigma2/", PATH_DONTCREATE),
SCOPE_HDD: ("/hdd/movie/", PATH_DONTCREATE),
SCOPE_MEDIA: ("/media/", PATH_DONTCREATE),
SCOPE_USERETC: ("", PATH_DONTCREATE) # user home directory
}
FILE_COPY = 0 # copy files from fallback dir to the basedir
FILE_MOVE = 1 # move files
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)],
SCOPE_HDD: [("/hdd/movies", PATH_MOVE)]
}
def resolveFilename(scope, base = ""):
# don't resolve absolute paths
if len(base) and base[0] == '/':
return base
path = defaultPaths[scope]
if path[1] == PATH_CREATE:
if (not pathExists(defaultPaths[scope][0])):
os.mkdir(path[0])
#if len(base) > 0 and base[0] == '/':
#path = ("", None)
if not fileExists(path[0] + base):
#try:
if fallbackPaths.has_key(scope):
for x in fallbackPaths[scope]:
if x[1] == FILE_COPY:
if fileExists(x[0] + base):
os.system("cp " + x[0] + base + " " + path[0] + base)
break
elif x[1] == FILE_MOVE:
if fileExists(x[0] + base):
os.system("mv " + x[0] + base + " " + path[0] + base)
break
elif x[1] == PATH_COPY:
if pathExists(x[0]):
if not pathExists(defaultPaths[scope][0]):
os.mkdir(path[0])
os.system("cp -a " + x[0] + "* " + path[0])
break
elif x[1] == PATH_MOVE:
if pathExists(x[0]):
os.system("mv " + x[0] + " " + path[0])
break
# FIXME: we also have to handle DATADIR etc. here.
return path[0] + base
# this is only the BASE - an extension must be added later.
def pathExists(path):
return os.path.exists(path)
def fileExists(f):
try:
file = open(f)
except IOError:
exists = 0
else:
exists = 1
return exists
def getRecordingFilename(basename):
# filter out non-allowed characters
non_allowed_characters = "/.\\:*?<>|\""
filename = ""
basename = basename.replace('\xc2\x86', '').replace('\xc2\x87', '')
for c in basename:
if c in non_allowed_characters:
c = "_"
filename += c
i = 0
while True:
path = resolveFilename(SCOPE_HDD, filename)
if i > 0:
path += "_%03d" % i
try:
open(path + ".ts")
i += 1
except IOError:
return path
# this is clearly a hack:
def InitFallbackFiles():
resolveFilename(SCOPE_CONFIG, "userbouquet.favourites.tv")
resolveFilename(SCOPE_CONFIG, "bouquets.tv")
|