Update of /cvsroot/freevo/freevo/src/mediadb
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16882

Modified Files:
        audio_parser.py cache.py db.py item.py listing.py parser.py 
        video_parser.py 
Log Message:
add fast cache option

Index: parser.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/mediadb/parser.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** parser.py   5 Apr 2005 18:48:18 -0000       1.2
--- parser.py   7 Apr 2005 20:42:11 -0000       1.3
***************
*** 12,15 ****
--- 12,18 ----
  import util.vfs as vfs
  
+ # mediadb imports
+ import db
+ 
  # list of external parser
  _parser = []
***************
*** 105,114 ****
  
  
! def parse(filename, object):
      """
      Add additional informations to filename, object.
      """
      mminfo = None
!     if not object['ext'] in [ 'xml', 'fxd' ]:
          mminfo = mmpython.parse(filename)
      title = getname(filename)
--- 108,120 ----
  
  
! def parse(basename, filename, object, quick=False):
      """
      Add additional informations to filename, object.
      """
+     if object.has_key('type'):
+         del object['url']
+         del object['type']
      mminfo = None
!     if not quick and not object['ext'] in [ 'xml', 'fxd' ]:
          mminfo = mmpython.parse(filename)
      title = getname(filename)
***************
*** 130,160 ****
      if os.path.isdir(filename):
          object['isdir'] = True
!         listing = vfs.listdir(filename, include_overlay=True)
!         # get directory cover
!         for l in listing:
!             if l.endswith('/cover.png') or l.endswith('/cover.jpg') or \
!                    l.endswith('/cover.gif'):
!                 object['cover'] = l
!                 break
!         else:
!             if object.has_key('cover'):
!                 del object['cover']
!             if object.has_key('audiocover'):
!                 del object['audiocover']
!             files = util.find_matches(listing, ('jpg', 'gif', 'png' ))
!             if len(files) == 1:
!                 object['audiocover'] = files[0]
!             elif len(files) > 1 and len(files) < 10:
!                 files = filter(cover_filter, files)
!                 if files:
                      object['audiocover'] = files[0]
  
!         # save directory overlay mtime
!         overlay = vfs.getoverlay(filename)
!         if os.path.isdir(overlay):
!             mtime = os.stat(overlay)[stat.ST_MTIME]
!             object['overlay_mtime'] = mtime
!         else:
!             object['overlay_mtime'] = 0
      else:
          if object.has_key('isdir'):
--- 136,181 ----
      if os.path.isdir(filename):
          object['isdir'] = True
!         if vfs.abspath(filename + '/' + basename + '.fxd'):
!             # directory is covering a fxd file
!             object['type'] = 'fxd'
!         if not quick:
!             # Create a simple (quick) cache of subdirs to get some basic idea
!             # about the files inside the directory
!             c = db.Cache(filename)
!             if c.num_changes():
!                 c.add_missing()
!             listing = vfs.listdir(filename, include_overlay=True)
!             # get directory cover
!             for l in listing:
!                 if l.endswith('/cover.png') or l.endswith('/cover.jpg') or \
!                        l.endswith('/cover.gif'):
!                     object['cover'] = l
!                     break
!             else:
!                 if object.has_key('cover'):
!                     del object['cover']
!                 if object.has_key('audiocover'):
!                     del object['audiocover']
!                 files = util.find_matches(listing, ('jpg', 'gif', 'png' ))
!                 if len(files) == 1:
                      object['audiocover'] = files[0]
+                 elif len(files) > 1 and len(files) < 10:
+                     files = filter(cover_filter, files)
+                     if files:
+                         object['audiocover'] = files[0]
  
!             # check for fxd files in the directory
!             fxd = vfs.abspath(filename + '/folder.fxd')
!             if fxd:
!                 object['fxd'] = fxd
!             elif object.has_key('fxd'):
!                 del object['fxd']
!             # save directory overlay mtime
!             overlay = vfs.getoverlay(filename)
!             if os.path.isdir(overlay):
!                 mtime = os.stat(overlay)[stat.ST_MTIME]
!                 object['overlay_mtime'] = mtime
!             else:
!                 object['overlay_mtime'] = 0
      else:
          if object.has_key('isdir'):

Index: video_parser.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/mediadb/video_parser.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** video_parser.py     5 Apr 2005 18:48:18 -0000       1.2
--- video_parser.py     7 Apr 2005 20:42:11 -0000       1.3
***************
*** 3,11 ****
      Parse additional data for video files.
      """
-     if object.has_key('type') and object['type'] in ('DVD',):
-         del object['url']
-         del object['type']
      if mminfo and mminfo.type == 'DVD':
!         object['url'] = 'dvd://' + filename
          object['type'] = 'dvd'
  
--- 3,8 ----
      Parse additional data for video files.
      """
      if mminfo and mminfo.type == 'DVD':
!         object['url']  = 'dvd://' + filename
          object['type'] = 'dvd'
  

Index: cache.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/mediadb/cache.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** cache.py    5 Apr 2005 18:48:18 -0000       1.2
--- cache.py    7 Apr 2005 20:42:11 -0000       1.3
***************
*** 76,82 ****
  sys.__stdout__.flush()
  
! # config.AUDIO_ITEMS = [ ( 'foo', '/local/mp3/Artists/Dixie Chicks' ) ]
! # config.VIDEO_ITEMS = [ ( 'foo', '/local/video/movie' ) ]
! # config.IMAGE_ITEMS = [ ( 'foo', '/local/images/fotos/misc' ) ]
  
  directories = []
--- 76,82 ----
  sys.__stdout__.flush()
  
! config.AUDIO_ITEMS = [ ( 'foo', '/local/mp3/Artists/Dixie Chicks' ) ]
! config.VIDEO_ITEMS = [ ( 'foo', '/local/video/incoming' ) ]
! config.IMAGE_ITEMS = [ ( 'foo', '/local/images/fotos/misc' ) ]
  
  directories = []

Index: item.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/mediadb/item.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** item.py     4 Apr 2005 18:28:15 -0000       1.2
--- item.py     7 Apr 2005 20:42:11 -0000       1.3
***************
*** 47,50 ****
--- 47,52 ----
          if not attr:
              attr = {}
+             if basename:
+                 attr['ext'] = basename[basename.rfind('.')+1:].lower()
          self.attr = attr
          self.basename = basename

Index: db.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/mediadb/db.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** db.py       5 Apr 2005 18:48:18 -0000       1.3
--- db.py       7 Apr 2005 20:42:11 -0000       1.4
***************
*** 40,44 ****
  
  # freevo imports
- import config
  import util.vfs as vfs
  import util.cache as cache
--- 40,43 ----
***************
*** 111,115 ****
          # 'normal' files
          self.items   = self.data['items']
!         # file sin the overlay dir
          self.overlay = self.data['overlay']
          # internal stuff about changes
--- 110,114 ----
          # 'normal' files
          self.items   = self.data['items']
!         # files in the overlay dir
          self.overlay = self.data['overlay']
          # internal stuff about changes
***************
*** 250,254 ****
                       'mtime_dep': []
                       }
!             parser.parse(filename, info)
  
              prefix = basename[:-len(ext)]
--- 249,253 ----
                       'mtime_dep': []
                       }
!             parser.parse(basename, filename, info)
  
              prefix = basename[:-len(ext)]
***************
*** 277,281 ****
              # check changed files
              log.debug('changed: %s' % filename)
!             parser.parse(filename, info)
              log.debug(info['mtime_dep'])
              for key in info['mtime_dep']:
--- 276,280 ----
              # check changed files
              log.debug('changed: %s' % filename)
!             parser.parse(basename, filename, info)
              log.debug(info['mtime_dep'])
              for key in info['mtime_dep']:
***************
*** 326,329 ****
--- 325,351 ----
  
  
+     def add_missing(self):
+         """
+         Add the new files still missing in the databse with
+         basic attributes.
+         """
+         if not self.__added:
+             return
+ 
+         for basename, filename in self.__added:
+             ext = basename[basename.rfind('.')+1:].lower()
+             if ext == basename:
+                 ext = ''
+             info = { 'ext'      : ext,
+                      'mtime'    : 1,
+                      'mtime_dep': []
+                      }
+             parser.parse(basename, filename, info, True)
+             if vfs.isoverlay(filename):
+                 self.overlay[basename] = info
+             else:
+                 self.items[basename] = info
+ 
+ 
      def list(self):
          """
***************
*** 378,382 ****
              # is saved to a new file.
              self.changed = True
!             parser.parse(filename, self.data)
              self.save()
  
--- 400,405 ----
              # is saved to a new file.
              self.changed = True
!             basename = filename[filename.rfind('/'):]
!             parser.parse(basename, filename, self.data)
              self.save()
  

Index: audio_parser.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/mediadb/audio_parser.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** audio_parser.py     5 Apr 2005 18:56:28 -0000       1.3
--- audio_parser.py     7 Apr 2005 20:42:11 -0000       1.4
***************
*** 91,96 ****
              return False
  
!     # get a new listing again
!     listing = Listing(dirinfo.filename)
  
      # variables to scan
--- 91,96 ----
              return False
  
!     # reset listing
!     listing.reset()
  
      # variables to scan

Index: listing.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/mediadb/listing.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** listing.py  5 Apr 2005 18:48:18 -0000       1.3
--- listing.py  7 Apr 2005 20:42:11 -0000       1.4
***************
*** 63,70 ****
  
  
!     def update(self, callback=None):
          if self.num_changes == 0:
              return
!         self.cache.parse(callback)
          dirname = self.dirname
          cache = self.cache
--- 63,73 ----
  
  
!     def update(self, callback=None, quick=False):
          if self.num_changes == 0:
              return
!         if quick:
!             self.cache.add_missing()
!         else:
!             self.cache.parse(callback)
          dirname = self.dirname
          cache = self.cache
***************
*** 110,114 ****
  
  
!     def match_type(self, type_list):
          visible = self.visible
          self.visible = []
--- 113,117 ----
  
  
!     def match_type(self, type):
          visible = self.visible
          self.visible = []
***************
*** 122,125 ****
--- 125,133 ----
          return ret
  
+ 
+     def reset(self):
+         self.visible = self.data
+ 
+         
      def __iter__(self):
          return self.visible.__iter__()



-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to