summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/test_mpg.py2
-rw-r--r--tests/test_nfo.py2
-rw-r--r--tests/test_path_to_node_mapping.py6
-rw-r--r--vdrnfofs/filesystemnodes.py71
-rw-r--r--vdrnfofs/vdrnfofs.py2
5 files changed, 59 insertions, 24 deletions
diff --git a/tests/test_mpg.py b/tests/test_mpg.py
index cebfec9..68d68d8 100644
--- a/tests/test_mpg.py
+++ b/tests/test_mpg.py
@@ -47,11 +47,13 @@ class TestMpg(unittest.TestCase):
def test_mpg(self):
node = get_node(self.video, '/sample_2008-03-28.20.13.99.99.rec.mpg')
+ self.assertEqual('sample_2008-03-28.20.13.99.99.rec.mpg', node.file_system_name())
self.assertEqual(40, node.size())
self.assertEqual('1234567890abcdefghij1234567890abcdefghij', node.read(0, 4096))
def test_mpg_new(self):
node = get_node(self.video, '/sample-vdr1.7_2008-03-28.20.13.10-1.rec.mpg')
+ self.assertEqual('sample-vdr1.7_2008-03-28.20.13.10-1.rec.mpg', node.file_system_name())
self.assertEqual(40, node.size())
self.assertEqual('1234567890abcdefghij1234567890abcdefghij', node.read(0, 4096))
diff --git a/tests/test_nfo.py b/tests/test_nfo.py
index 71c352d..7fa915b 100644
--- a/tests/test_nfo.py
+++ b/tests/test_nfo.py
@@ -48,11 +48,13 @@ class TestNfo(unittest.TestCase):
def test_nfo(self):
node = get_node(self.video, '/sample_2008-03-28.20.13.99.99.rec.nfo')
nfo = xml.etree.ElementTree.fromstring(node.read(0, 4096))
+ self.assertEqual('sample_2008-03-28.20.13.99.99.rec.nfo', node.file_system_name())
self.assertEqual('Movie Title', nfo.find('title').text)
self.assertEqual('A movie about something', nfo.find('plot').text)
def test_nfo_new(self):
node = get_node(self.video, '/sample-vdr1.7_2008-03-28.20.13.10-1.rec.nfo')
nfo = xml.etree.ElementTree.fromstring(node.read(0, 4096))
+ self.assertEqual('sample-vdr1.7_2008-03-28.20.13.10-1.rec.nfo', node.file_system_name())
self.assertEqual('Movie Title', nfo.find('title').text)
self.assertEqual('A movie about something', nfo.find('plot').text)
diff --git a/tests/test_path_to_node_mapping.py b/tests/test_path_to_node_mapping.py
index 51e7852..917c462 100644
--- a/tests/test_path_to_node_mapping.py
+++ b/tests/test_path_to_node_mapping.py
@@ -42,15 +42,15 @@ class TestPathToNodeMapping(unittest.TestCase):
def test_root(self):
node = get_node(self.video, '/')
- self.assertEqual('', node.file_system_name)
+ self.assertEqual('', node.file_system_name())
self.assertEqual(self.video + '/', node.path)
def test_subdir(self):
node = get_node(self.video, '/folder')
- self.assertEqual('folder', node.file_system_name)
+ self.assertEqual('folder', node.file_system_name())
self.assertEqual(self.video + '/folder', node.path)
def test_mpg(self):
node = get_node(self.video, '/sample_2008-03-28.20.13.99.99.rec.mpg')
- self.assertEqual('sample_2008-03-28.20.13.99.99.rec.mpg', node.file_system_name)
+ self.assertEqual('sample_2008-03-28.20.13.99.99.rec.mpg', node.file_system_name())
self.assertEqual(self.video + '/sample/2008-03-28.20.13.99.99.rec', node.path)
diff --git a/vdrnfofs/filesystemnodes.py b/vdrnfofs/filesystemnodes.py
index 758a1e4..07eec7e 100644
--- a/vdrnfofs/filesystemnodes.py
+++ b/vdrnfofs/filesystemnodes.py
@@ -54,24 +54,40 @@ class NodeAttributes(fuse.Stat):
class MpgNode:
def __init__(self, path):
self.path = path
- self.mpeg_files = glob.glob(path + '/[0-9]*.vdr')
- if not self.mpeg_files:
- self.mpeg_files = glob.glob(path + '/[0-9]*.ts')
- self.mpeg_files.sort()
- self.file_system_name = '_'.join(path.rsplit('/', 3)[-2:]) + '.mpg'
- self.reader = ConcatenatedFileReader(self.mpeg_files)
+ self._file_system_name = None
+ self._mpeg_files = None
+ self._reader = None
+
+ def file_system_name(self):
+ if not self._file_system_name:
+ self._file_system_name = '_'.join(self.path.rsplit('/', 3)[-2:]) + '.mpg'
+ return self._file_system_name
+
+ def mpeg_files(self):
+ if not self._mpeg_files:
+ self._mpeg_files = glob.glob(self.path + '/[0-9]*.vdr')
+ if not self._mpeg_files:
+ self._mpeg_files = glob.glob(self.path + '/[0-9]*.ts')
+ self._mpeg_files.sort()
+ return self._mpeg_files
+
+ def reader(self):
+ if not self._reader:
+ self._reader = ConcatenatedFileReader(self.mpeg_files())
+ return self._reader
def size(self):
size = 0
- for file in self.mpeg_files:
+ for file in self.mpeg_files():
size += os.path.getsize(file)
return size
def read(self, offset, size):
- return self.reader.read(offset, size)
+ return self.reader().read(offset, size)
def release(self):
- self.reader.release()
+ if self._reader:
+ self._reader.release()
def get_stat(self):
attr = NodeAttributes()
@@ -85,26 +101,36 @@ class MpgNode:
class NfoNode:
def __init__(self, path):
+ self._file_system_name = None
self.path = path
- self.file_system_name = '_'.join(path.rsplit('/', 3)[-2:]) + '.nfo'
- if os.path.exists(path + '/info.vdr'):
- info_vdr = InfoVdr(path + '/info.vdr')
- elif os.path.exists(path + '/info'):
- info_vdr = InfoVdr(path + '/info')
- else:
- info_vdr = InfoVdr()
- self.nfo_content = """<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+ self._nfo_content = None
+
+ def file_system_name(self):
+ if not self._file_system_name:
+ self._file_system_name = '_'.join(self.path.rsplit('/', 3)[-2:]) + '.nfo'
+ return self._file_system_name
+
+ def nfo_content(self):
+ if not self._nfo_content:
+ if os.path.exists(self.path + '/info.vdr'):
+ info_vdr = InfoVdr(self.path + '/info.vdr')
+ elif os.path.exists(self.path + '/info'):
+ info_vdr = InfoVdr(self.path + '/info')
+ else:
+ info_vdr = InfoVdr()
+ self._nfo_content = """<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<movie>
<title>%s</title>
<plot>%s</plot>
</movie>
""" % (info_vdr['T'], info_vdr['D'])
+ return self._nfo_content
def size(self):
- return len(self.nfo_content)
+ return len(self.nfo_content())
def read(self, offset, size):
- return self.nfo_content[offset:offset+size]
+ return self.nfo_content()[offset:offset+size]
def get_stat(self):
attr = NodeAttributes()
@@ -121,8 +147,13 @@ class NfoNode:
class DirNode:
def __init__(self, path):
self.path = path
- self.file_system_name = path.rsplit('/',1)[1]
self.cache = []
+ self._file_system_name = None
+
+ def file_system_name(self):
+ if not self._file_system_name:
+ self._file_system_name = self.path.rsplit('/',1)[1]
+ return self._file_system_name
def content(self):
if not self.cache:
diff --git a/vdrnfofs/vdrnfofs.py b/vdrnfofs/vdrnfofs.py
index 8e32a79..9053bb3 100644
--- a/vdrnfofs/vdrnfofs.py
+++ b/vdrnfofs/vdrnfofs.py
@@ -123,7 +123,7 @@ class VdrNfoFs(fuse.Fuse):
node = get_node(self.video, path)
if node:
for item in node.content():
- yield fuse.Direntry(item.file_system_name)
+ yield fuse.Direntry(item.file_system_name())
except:
logging.error('VdrFuseFs: Unexpected error for readdir(%s): %s' % (path, format_exception_info()))