Update of /cvsroot/freevo/kaa/vfs/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6508/src
Modified Files:
mediadb.py
Log Message:
more playing with the db, but it does not save the data :-(
Index: mediadb.py
===================================================================
RCS file: /cvsroot/freevo/kaa/vfs/src/mediadb.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** mediadb.py 28 Aug 2005 11:36:57 -0000 1.1
--- mediadb.py 28 Aug 2005 15:35:34 -0000 1.2
***************
*** 1,3 ****
--- 1,4 ----
import os
+ import stat
import kaa.metadata
***************
*** 5,8 ****
--- 6,125 ----
from db import *
+ class Listing(object):
+ def __init__(self):
+ self.items = []
+
+ def __str__(self):
+ ret = 'Listing\n'
+ for i in self.items:
+ ret += ' %s\n' % i
+ return ret
+
+ def update(self):
+ for i in self.items:
+ i._parse()
+
+
+ class Item(object):
+ def __init__(self, data, dir, db):
+ self.data = data
+ self.dir = dir
+ self.db = db
+ if isinstance(self.data, dict) and not self.data.has_key('path'):
+ self.data['path'] = self.dir['path'] + '/' + self.data['name']
+
+ def _parse(self):
+ if isinstance(self.data, dict):
+ if os.stat(self.data['path'])[stat.ST_MTIME] ==
self.data['mtime']:
+ return False
+ fname = self.data['name']
+ update = True
+ else:
+ fname = self.data
+ update = False
+
+ if self.dir:
+ dirname = self.dir['path']
+ path = dirname + '/' + fname
+ parent = ("dir", self.dir["id"])
+
+ else:
+ dirname = ''
+ path = '/'
+ parent = None
+
+ attributes = { 'mtime': os.stat(path)[stat.ST_MTIME] }
+ metadata = kaa.metadata.parse(path)
+ type = ''
+ if metadata and metadata['media'] and \
+ self.db._object_types.has_key(metadata['media']):
+ type = metadata['media']
+ elif os.path.isdir(path):
+ type = 'dir'
+ else:
+ type = 'file'
+
+ type_list = self.db._object_types[type]
+ for key in type_list[1].keys():
+ if metadata and metadata.has_key(key) and metadata[key] != None:
+ attributes[key] = metadata[key]
+
+ if update:
+ id = self.data['id']
+ self.db.update_object((type, id), **attributes)
+ else:
+ id = self.db.add_object((type, fname), parent=parent,
**attributes)['id']
+
+ # FIXME: get current data from database
+ self.data = self.db.query_normalized(type=type, id=id)[0]
+ self.data['path'] = path
+ return True
+
+
+ def __str__(self):
+ if isinstance(self.data, (str, unicode)):
+ return 'new file %s' % self.data
+ return self.data['name']
+
+
+ def __getitem__(self, key):
+ return self.data[key]
+
+
+ class Directory(Item):
+ def list(self):
+ self._parse()
+
+ dirname = os.path.normpath(self.data['path'])
+ files = self.db.query_normalized(parent = ("dir", self.data["id"]))
+ fs_listing = os.listdir(dirname)
+
+ ret = Listing()
+ for f in files[:]:
+ if f['name'] in fs_listing:
+ # file still there
+ fs_listing.remove(f['name'])
+ ret.items.append(Item(f, self, self.db))
+ else:
+ # file deleted
+ files.remove(f)
+ # FIXME: remove from database
+
+ for f in fs_listing:
+ # new files
+ if os.path.isdir(dirname + '/' + f):
+ ret.items.append(Directory(f, self, self.db))
+ else:
+ ret.items.append(Item(f, self, self.db))
+
+ return ret
+
+
+ def __str__(self):
+ if isinstance(self.data, (str, unicode)):
+ return 'new dir %s' % self.data
+ return 'dir ' + self.data['name']
+
+
class MediaDB(Database):
***************
*** 35,41 ****
if not root:
root = self.add_object(("dir", "/"))
else:
root = root[0]
! self.dir = { '/': root }
--- 152,161 ----
if not root:
root = self.add_object(("dir", "/"))
+ # FIXME: get current data from database
+ root = self.query_normalized(type='dir', name='/')[0]
else:
root = root[0]
! root['path'] = '/'
! self.dir = { '/': Directory(root, None, self) }
***************
*** 43,48 ****
if dirname in self.dir:
return self.dir[dirname]
! parent = self.__get_dir(os.path.dirname(dirname))
! parent = ("dir", parent["id"])
name = os.path.basename(dirname)
--- 163,168 ----
if dirname in self.dir:
return self.dir[dirname]
! pdir = self.__get_dir(os.path.dirname(dirname))
! parent = ("dir", pdir["id"])
name = os.path.basename(dirname)
***************
*** 50,93 ****
if not current:
current = self.add_object(("dir", name), parent=parent)
! else:
! current = current[0]
self.dir[dirname] = current
return current
- def scan_dir(self, dirname):
- dirname = os.path.normpath(os.path.abspath(dirname))
- dir = self.__get_dir(dirname)
- files = self.query_normalized(parent = ("dir", dir["id"]))
- listing = os.listdir(dirname)
- for f in files:
- if f['name'] in listing:
- # file still there
- listing.remove(f['name'])
- else:
- # file deleted
- print 'deleted'
-
- # new files
- for fname in listing:
- metadata = kaa.metadata.parse(dirname + '/' + fname)
- if metadata and metadata['media'] and \
- self._object_types.has_key(metadata['media']):
- type_list = self._object_types[metadata['media']]
- attributes = {}
- for key in type_list[1].keys():
- if metadata.has_key(key) and metadata[key] != None:
- attributes[key] = metadata[key]
- self.add_object((metadata['media'], fname), parent=("dir",
dir["id"]),
- **attributes)
- elif os.path.isdir('/home/dmeyer/mp3/' + fname):
- self.add_object(("dir", fname), parent=("dir", dir["id"]))
- else:
- self.add_object(("file", fname), parent=("dir", dir["id"]))
-
-
def listdir(self, dirname):
! dirname = os.path.normpath(os.path.abspath(dirname))
! dir = self.__get_dir(dirname)
! files = self.query_normalized(parent = ("dir", dir["id"]))
! return dir, files
--- 170,185 ----
if not current:
current = self.add_object(("dir", name), parent=parent)
! # FIXME: get current data from database
! current = self.query_normalized(type='dir', name=name,
parent=parent)
! current = current[0]
! current['path'] = dirname
! current = Directory(current, pdir, self)
self.dir[dirname] = current
return current
def listdir(self, dirname):
! """
! List directory.
! """
! return
self.__get_dir(os.path.normpath(os.path.abspath(dirname))).list()
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog