Update of /cvsroot/freevo/kaa/vfs/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28677/src

Added Files:
        mediadb.py 
Log Message:
add mediadb wrapper

--- NEW FILE: mediadb.py ---
import os

import kaa.metadata

from db import *

class MediaDB(Database):

    def __init__(self, dbfile = None):
        Database.__init__(self, dbfile)
        self.register_object_type_attrs("file", ())

        self.register_object_type_attrs("video", (
            ("title", str, ATTR_KEYWORDS),
            ("width", int, ATTR_SIMPLE),
            ("height", int, ATTR_SIMPLE),
            ("length", int, ATTR_SIMPLE)))

        self.register_object_type_attrs("audio", (
            ("title", str, ATTR_KEYWORDS),
            ("artist", str, ATTR_KEYWORDS | ATTR_INDEXED),
            ("album", str, ATTR_KEYWORDS),
            ("genre", str, ATTR_INDEXED),
            ("samplerate", int, ATTR_SIMPLE),
            ("length", int, ATTR_SIMPLE),
            ("bitrate", int, ATTR_SIMPLE),
            ("trackno", int, ATTR_SIMPLE)))
        
        self.register_object_type_attrs("image", (
            ("width", int, ATTR_SEARCHABLE),
            ("height", int, ATTR_SEARCHABLE),
            ("date", int, ATTR_SEARCHABLE)))
        
        root = self.query_normalized(type="dir", name="/")
        if not root:
            root = self.add_object(("dir", "/"))
        else:
            root = root[0]
        self.dir = { '/': root }


    def __get_dir(self, dirname):
        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)
        current = self.query_normalized(type="dir", name=name, parent=parent)
        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



-------------------------------------------------------
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

Reply via email to