Ας γράψω και για το record σε δικτυακό δίσκο...
Ανοίγουμε το αρχείο Directories.py και αλλάζουμε την δεύτερη και τρίτη εγγραφή SCOPE_HDD που βρίσκουμε στο αρχείο μας. Βάζουμε το path που θέλουμε να γράφει
π.χ: /Movies
Αντικαθιστούμε το Directories.py με αυτό που βρίσκεται στο path
/usr/lib/enigma2/python/Tools/Directories.py
Reboot and Ready…
Το αρχείο Directories.py:
# -*- coding: utf-8 -*-
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
try:
from os import chmod
have_chmod = True
except:
have_chmod = False
try:
from os import utime
have_utime = True
except:
have_utime = False
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
SCOPE_PLAYLIST = 11
SCOPE_CURRENT_SKIN = 12
SCOPE_DEFAULTDIR = 13
SCOPE_DEFAULTPARTITION = 14
SCOPE_DEFAULTPARTITIONMOUNTDIR = 15
SCOPE_METADIR = 16
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_DONTCREATE),
SCOPE_SKIN: ("/usr/share/enigma2/", PATH_DONTCREATE),
SCOPE_SKIN_IMAGE: ("/usr/share/enigma2/", PATH_DONTCREATE),
SCOPE_HDD: ("/media/hdd/Records/", PATH_DONTCREATE),
SCOPE_MEDIA: ("/media/", PATH_DONTCREATE),
SCOPE_PLAYLIST: ("/etc/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/lib/enigma2/python/Plugins/meta", PATH_CREATE),
}
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: [("/media/hdd/Records/", PATH_MOVE)]
}
def resolveFilename(scope, base = "", path_prefix = None):
if base[0:2] == "~/":
# you can only use the ~/ if we have a prefix directory
assert path_prefix is not None
base = os_path.join(path_prefix, base[2:])
# don't resolve absolute paths
if base[0:1] == '/':
return base
if scope == SCOPE_CURRENT_SKIN:
from Components.config import config
tmp = defaultPaths[SCOPE_SKIN]
pos = config.skin.primary_skin.value.rfind('/')
if pos != -1:
path = tmp[0]+config.skin.primary_skin.value[

os+1]
else:
path = tmp[0]
else:
tmp = defaultPaths[scope]
path = tmp[0]
flags = tmp[1]
if flags == PATH_CREATE:
if not pathExists(path):
mkdir(path)
fallbackPath = fallbackPaths.get(scope)
if fallbackPath and not fileExists(path + base):
for x in fallbackPath:
if x[1] == FILE_COPY:
if fileExists(x[0] + base):
system("cp " + x[0] + base + " " + path + base)
break
elif x[1] == FILE_MOVE:
if fileExists(x[0] + base):
system("mv " + x[0] + base + " " + path + base)
break
elif x[1] == PATH_COPY:
if pathExists(x[0]):
if not pathExists(defaultPaths[scope][0]):
mkdir(path)
system("cp -a " + x[0] + "* " + path)
break
elif x[1] == PATH_MOVE:
if pathExists(x[0]):
system("mv " + x[0] + " " + path)
break
# FIXME: we also have to handle DATADIR etc. here.
return path + base
# this is only the BASE - an extension must be added later.
def pathExists(path):
return os_path.exists(path)
def isMount(path):
return os_path.ismount(path)
def createDir(path, makeParents = False):
try:
if makeParents:
makedirs(path)
else:
mkdir(path)
except:
ret = 0
else:
ret = 1
return ret
def removeDir(path):
try:
rmdir(path)
except:
ret = 0
else:
ret = 1
return ret
def fileExists(f, mode='r'):
if mode == 'r':
acc_mode = R_OK
elif mode == 'w':
acc_mode = W_OK
else:
acc_mode = F_OK
return access(f, acc_mode)
def getRecordingFilename(basename, dirname = None):
# 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 or ord(c) < 32:
c = "_"
filename += c
if dirname is not None:
filename = ''.join((dirname, filename))
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")
resolveFilename(SCOPE_CONFIG, "userbouquet.favourites.radio")
resolveFilename(SCOPE_CONFIG, "bouquets.radio")
# 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))
return list
def copyfile(src, dst):
try:
f1 = open(src, "rb")
if os_path.isdir(dst):
dst = os_path.join(dst, os_path.basename(src))
f2 = open(dst, "w+b")
while True:
buf = f1.read(16*1024)
if not buf:
break
f2.write(buf)
st = os_stat(src)
mode = S_IMODE(st.st_mode)
if have_chmod:
chmod(dst, mode)
if have_utime:
utime(dst, (st.st_atime, st.st_mtime))
except:
print "copy", src, "to", dst, "failed!"
return -1
return 0
def copytree(src, dst, symlinks=False):
names = listdir(src)
if os_path.isdir(dst):
dst = os_path.join(dst, os_path.basename(src))
if not os_path.isdir(dst):
mkdir(dst)
else:
makedirs(dst)
for name in names:
srcname = os_path.join(src, name)
dstname = os_path.join(dst, name)
try:
if symlinks and os_path.islink(srcname):
linkto = readlink(srcname)
symlink(linkto, dstname)
elif os_path.isdir(srcname):
copytree(srcname, dstname, symlinks)
else:
copyfile(srcname, dstname)
except:
print "dont copy srcname (no file or link or folder)"
try:
st = os_stat(src)
mode = S_IMODE(st.st_mode)
if have_chmod:
chmod(dst, mode)
if have_utime:
utime(dst, (st.st_atime, st.st_mtime))
except:
print "copy stats for", src, "failed!"