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

Modified Files:
        cleanup.py directory.py fxditem.py item.py main.py playlist.py 
        plugin.py 
Log Message:
switch to new mediainfo module

Index: directory.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/directory.py,v
retrieving revision 1.153
retrieving revision 1.154
diff -C2 -d -r1.153 -r1.154
*** directory.py        26 Feb 2005 16:53:39 -0000      1.153
--- directory.py        10 Apr 2005 18:08:05 -0000      1.154
***************
*** 35,43 ****
  import copy
  import logging
  
  # freevo imports
  import config
  import util
! import util.mediainfo as mediainfo
  
  import menu
--- 35,44 ----
  import copy
  import logging
+ import time
  
  # freevo imports
  import config
  import util
! import mediadb
  
  import menu
***************
*** 106,115 ****
      """
      def __init__(self, directory, parent, name = '', display_type = None,
!                  add_args = None, create_metainfo=True):
!         self.autovars = [ ('num_dir_items', 0), ('show_all_items', False) ]
          Playlist.__init__(self, parent=parent, display_type=display_type)
          self.type = 'dir'
          self.menu  = None
  
          # store FileInformation for moving/copying
          self.files = FileInformation()
--- 107,125 ----
      """
      def __init__(self, directory, parent, name = '', display_type = None,
!                  add_args = None):
          Playlist.__init__(self, parent=parent, display_type=display_type)
          self.type = 'dir'
          self.menu  = None
  
+         if isinstance(directory, mediadb.ItemInfo):
+             self.info = directory
+             directory = directory.filename
+         else:
+             directory = os.path.abspath(directory)
+             self.info = mediadb.get(directory)
+ 
+         # get cover from cache
+         self.image = self.info['cover']
+         
          # store FileInformation for moving/copying
          self.files = FileInformation()
***************
*** 118,134 ****
          self.files.append(directory)
  
!         self.dir  = os.path.abspath(directory)
!         self.info = mediainfo.get_dir(directory)
! 
          if name:
              self.name = Unicode(name)
-         elif self.info['title:filename']:
-             self.name = self.info['title:filename']
          else:
!             self.name = util.getname(directory, skip_ext=False)
  
          if add_args == None and hasattr(parent, 'add_args'):
              add_args = parent.add_args
- 
          self.add_args = add_args
  
--- 128,140 ----
          self.files.append(directory)
  
!         self.dir = directory
!         
          if name:
              self.name = Unicode(name)
          else:
!             self.name = self.info['title:filename']
  
          if add_args == None and hasattr(parent, 'add_args'):
              add_args = parent.add_args
          self.add_args = add_args
  
***************
*** 165,173 ****
          self.modified_vars = []
  
-         # Check for a cover in current dir
-         image = util.getimage(os.path.join(directory, 'cover'))
-         if image:
-             self.image = image
-             self.files.image = image
          self.folder_fxd = directory+'/folder.fxd'
          if vfs.isfile(self.folder_fxd):
--- 171,174 ----
***************
*** 181,189 ****
              self.DIRECTORY_SORT_BY_DATE = 0
  
-         # create some extra info
-         if create_metainfo:
-             self.create_metainfo()
- 
- 
  
      def set_fxd_file(self, file):
--- 182,185 ----
***************
*** 292,295 ****
--- 288,292 ----
  
          if key == 'num_items':
+             self.create_info()
              display_type = self.display_type or 'all'
              if self.display_type == 'tv':
***************
*** 298,301 ****
--- 295,299 ----
  
          if key == 'num_play_items':
+             self.create_info()
              display_type = self.display_type
              if self.display_type == 'tv':
***************
*** 353,361 ****
      # ======================================================================
  
!     def create_metainfo(self):
          """
          create some metainfo for the directory
          """
!         display_type   = self.display_type
  
          if self.display_type == 'tv':
--- 351,359 ----
      # ======================================================================
  
!     def create_info(self):
          """
          create some metainfo for the directory
          """
!         display_type = self.display_type
  
          if self.display_type == 'tv':
***************
*** 364,412 ****
          name = display_type or 'all'
  
!         # check autovars
!         for var, val in self.autovars:
!             if var == 'num_%s_timestamp' % name:
!                 break
!         else:
!             self.autovars += [ ( 'num_%s_timestamp' % name, 0 ),
!                                ( 'num_%s_items' % name, 0 ) ]
! 
!         try:
!             timestamp     = os.stat(self.dir)[stat.ST_MTIME]
!         except OSError:
!             return
! 
!         num_timestamp = self.info['num_%s_timestamp' % name]
! 
!         if not num_timestamp or num_timestamp < timestamp:
!             log.debug('create metainfo for %s', self.dir)
!             need_umount = False
!             if self.media:
!                 need_umount = not self.media.is_mounted()
!                 self.media.mount()
  
!             num_dir_items  = 0
!             num_play_items = 0
!             files          = vfs.listdir(self.dir, include_overlay=True)
  
!             # play items and playlists
!             for p in plugin.mimetype(display_type):
!                 num_play_items += p.count(self, files)
  
!             # normal DirItems
!             for filename in files:
!                 if os.path.isdir(filename):
!                     num_dir_items += 1
  
!             # store info
!             if num_play_items != self['num_%s_items' % name]:
!                 self['num_%s_items' % name] = num_play_items
!             if self['num_dir_items'] != num_dir_items:
!                 self['num_dir_items'] = num_dir_items
!             self['num_%s_timestamp' % name] = timestamp
  
!             if need_umount:
!                 self.media.umount()
  
  
      # ======================================================================
--- 362,397 ----
          name = display_type or 'all'
  
!         if self.info['num_%s_items' % name] != None:
!             # info is already stored, no new data
!             return False
!         
!         log.info('create metainfo for %s', self.dir)
!         need_umount = False
!         if self.media:
!             need_umount = not self.media.is_mounted()
!             self.media.mount()
  
!         # get listing
!         listing = mediadb.Listing(self.dir)
!         if listing.num_changes:
!             listing.update(quick=True)
  
!         # play items and playlists
!         num_play_items = 0
!         for p in plugin.mimetype(display_type):
!             num_play_items += p.count(self, listing)
  
!         # normal DirItems
!         num_dir_items = len(listing.get_dir())
  
!         # store info
!         self.info.store_with_mtime('num_%s_items' % name, num_play_items)
!         self.info.store_with_mtime('num_dir_items', num_dir_items)
  
!         if need_umount:
!             self.media.umount()
  
+         return True
+     
  
      # ======================================================================
***************
*** 427,431 ****
          items = [ ( self.cwd, _('Browse directory')) ]
  
!         if self['num_%s_items' % display_type]:
              items.append((self.play, _('Play all files in directory')))
  
--- 412,416 ----
          items = [ ( self.cwd, _('Browse directory')) ]
  
!         if self.info['num_%s_items' % display_type]:
              items.append((self.play, _('Play all files in directory')))
  
***************
*** 434,438 ****
              items.reverse()
  
!         if self['num_%s_items' % display_type]:
              items.append((self.play_random, _('Random play all items')))
          if self['num_dir_items']:
--- 419,423 ----
              items.reverse()
  
!         if self.info['num_%s_items' % display_type]:
              items.append((self.play_random, _('Random play all items')))
          if self['num_dir_items']:
***************
*** 443,448 ****
          items.append((self.configure, _('Configure directory'), 'configure'))
  
!         if self.folder_fxd:
!             items += fxditem.mimetype.get(self, [self.folder_fxd])
  
          if self.media:
--- 428,434 ----
          items.append((self.configure, _('Configure directory'), 'configure'))
  
!         # FIXME: add this function again
!         # if self.folder_fxd:
!         #   items += fxditem.mimetype.get(self, [self.folder_fxd])
  
          if self.media:
***************
*** 544,547 ****
--- 530,534 ----
          build the items for the directory
          """
+         t0 = time.time()
          self.playlist   = []
          self.play_items = []
***************
*** 552,558 ****
              self.media.mount()
  
-         if hasattr(self, '__dirwatcher_last_time'):
-             del self.__dirwatcher_last_time
- 
          if arg == 'update':
              if not self.menu.choices:
--- 539,542 ----
***************
*** 568,571 ****
--- 552,556 ----
  
          elif not os.path.exists(self.dir):
+             # FIXME: better handling!!!!!
            AlertBox(text=_('Directory does not exist')).show()
              return
***************
*** 590,622 ****
              return
  
!         # if config.GUI_BUSYICON_TIMER:
!         # osd.get_singleton().busyicon.wait(config.GUI_BUSYICON_TIMER[0])
! 
!         files       = vfs.listdir(self.dir, include_overlay=True)
!         num_changes = mediainfo.check_cache(self.dir)
! 
!         pop = None
!         callback=None
!         if (num_changes > 10) or (num_changes and self.media):
              if self.media:
!                 pop = ProgressBox(text=_('Scanning disc, be patient...'),
!                                   full=num_changes)
              else:
!                 pop = ProgressBox(text=_('Scanning directory, be patient...'),
!                                   full=num_changes)
!             pop.show()
!             callback=pop.tick
! 
! 
!             # elif config.GUI_BUSYICON_TIMER and len(files) > \
!             #    config.GUI_BUSYICON_TIMER[1]:
!             # # many files, just show the busy icon now
!             # osd.get_singleton().busyicon.wait(0)
! 
! 
!         if num_changes > 0:
!             mediainfo.cache_dir(self.dir, callback=callback)
! 
! 
          #
          # build items
--- 575,594 ----
              return
  
!         t1 = time.time()
!         listing = mediadb.Listing(self.dir)
!         t2 = time.time()
!         if listing.num_changes > 5:
!             dirwatcher.cwd(None, None, None)
              if self.media:
!                 text = _('Scanning disc, be patient...')
              else:
!                 text = _('Scanning directory, be patient...')
!             popup = ProgressBox(text, full=listing.num_changes)
!             popup.show()
!             listing.update(popup.tick)
!             popup.destroy()
!         elif listing.num_changes:
!             listing.update()
!         t3 = time.time()
          #
          # build items
***************
*** 624,628 ****
          # build play_items, pl_items and dir_items
          for p in plugin.mimetype(display_type):
!             for i in p.get(self, files):
                  if i.type == 'playlist':
                      self.pl_items.append(i)
--- 596,600 ----
          # build play_items, pl_items and dir_items
          for p in plugin.mimetype(display_type):
!             for i in p.get(self, listing):
                  if i.type == 'playlist':
                      self.pl_items.append(i)
***************
*** 632,643 ****
                      self.play_items.append(i)
  
          # normal DirItems
!         for filename in files:
!             if os.path.split(filename)[1] in ['lost+found',]:
!                 continue
  
!             if os.path.isdir(filename):
!                 d = DirItem(filename, self, display_type = self.display_type)
!                 self.dir_items.append(d)
  
          # remove same beginning from all play_items
--- 604,615 ----
                      self.play_items.append(i)
  
+         t4 = time.time()
          # normal DirItems
!         for item in listing.get_dir():
!             d = DirItem(item, self, display_type = self.display_type)
!             self.dir_items.append(d)
  
!         # remember listing
!         self.listing = listing
  
          # remove same beginning from all play_items
***************
*** 656,659 ****
--- 628,633 ----
                      i.name = util.remove_start_string(i.name, substr)
  
+         t5 = time.time()
+ 
          #
          # sort all items
***************
*** 677,690 ****
                                                    o.sort('advanced').upper()))
          else:
!             self.play_items.sort(lambda l, o: cmp(l.sort().upper(),
!                                                   o.sort().upper()))
  
          if self['num_dir_items'] != len(self.dir_items):
              self['num_dir_items'] = len(self.dir_items)
  
!         if self['num_%s_items' % display_type] != \
                 len(self.play_items) + len(self.pl_items):
!             self['num_%s_items' % display_type] = len(self.play_items) + \
!                                                   len(self.pl_items)
  
          if self.DIRECTORY_REVERSE_SORT:
--- 651,667 ----
                                                    o.sort('advanced').upper()))
          else:
!             self.play_items.sort(lambda l, o: cmp(l.name.upper(),
!                                                   o.name.upper()))
! 
! 
!         t6 = time.time()
  
          if self['num_dir_items'] != len(self.dir_items):
              self['num_dir_items'] = len(self.dir_items)
  
!         if self.info['num_%s_items' % display_type] != \
                 len(self.play_items) + len(self.pl_items):
!             self.info['num_%s_items' % display_type] = len(self.play_items) + 
\
!                                                        len(self.pl_items)
  
          if self.DIRECTORY_REVERSE_SORT:
***************
*** 718,735 ****
  
  
-         if pop:
-             pop.destroy()
-             # closing the poup will rebuild the menu which may umount
-             # the drive
-             if self.media:
-                 self.media.mount()
- 
-             # if config.GUI_BUSYICON_TIMER:
-             # # stop the timer. If the icons is drawn, it will stay there
-             # # until the osd is redrawn, if not, we don't need it to pop
-             # # up the next milliseconds
-             # osd.get_singleton().busyicon.stop()
- 
- 
          #
          # action
--- 695,698 ----
***************
*** 789,796 ****
              menuw.pushmenu(item_menu)
  
!             self.menu  = util.weakref(item_menu)
!             dirwatcher.cwd(menuw, self, self.menu, self.dir)
              self.menuw = menuw
  
  
  
--- 752,762 ----
              menuw.pushmenu(item_menu)
  
!             self.menu = util.weakref(item_menu)
!             dirwatcher.cwd(menuw, self, self.menu)
              self.menuw = menuw
  
+         t7 = time.time()
+         # print t2 - t1, t4 - t3, t5 - t4, t6 - t5, t7 - t6, t7 - t0
+ 
  
  
***************
*** 799,803 ****
          called when we return to this menu
          """
!         dirwatcher.cwd(self.menuw, self, self.menu, self.dir)
          dirwatcher.scan()
  
--- 765,769 ----
          called when we return to this menu
          """
!         dirwatcher.cwd(self.menuw, self, self.menu)
          dirwatcher.scan()
  
***************
*** 987,992 ****
          self.menuw         = None
          self.item_menu     = None
-         self.dir           = None
-         self.files         = None
          self.poll_interval = 1000
  
--- 953,956 ----
***************
*** 994,1078 ****
  
  
!     def listoverlay(self):
!         """
!         Get listing of overlay dir for change checking.
!         Do not count *.cache, directories and *.raw (except videofiles.raw)
!         """
!         if not os.path.isdir(vfs.getoverlay(self.dir)):
!             # dir does not exist. Strange, there should be at least an
!             # mmpython cache file in there
!             return []
!         ret = []
!         for f in os.listdir(vfs.getoverlay(self.dir)):
!             # ignore .raw and .cache files
!             if not f.endswith('.raw') and not f.endswith('.cache') and not \
!                    os.path.isdir(os.path.join(self.dir, f)):
!                 ret.append(f)
!         return ret
! 
! 
!     def cwd(self, menuw, item, item_menu, dir):
          self.menuw     = menuw
          self.item      = item
          self.item_menu = item_menu
-         self.dir       = dir
-         try:
-             self.last_time = item.__dirwatcher_last_time
-             self.files     = item.__dirwatcher_last_files
-         except AttributeError:
-             self.last_time = vfs.mtime(self.dir)
-             self.files     = self.listoverlay()
-             self.item.__dirwatcher_last_time  = self.last_time
-             self.item.__dirwatcher_last_files = self.files
  
  
!     def scan(self):
!         if not self.dir:
!             return
!         try:
!             if vfs.mtime(self.dir) <= self.last_time:
!                 return True
!         except (OSError, IOError):
!             # the directory is gone
!             log.info('Dirwatcher: unable to read directory %s' % self.dir)
! 
!             # send EXIT to go one menu up:
!             eventhandler.post(MENU_BACK_ONE_MENU)
!             self.dir = None
!             return False
! 
!         changed = False
!         if os.stat(self.dir)[stat.ST_MTIME] <= self.last_time:
!             # changes are in overlay dir, just check for new/deleted files,
!             log.info('overlay change')
!             new_files = self.listoverlay()
!             for f in self.files:
!                 if not f in new_files:
!                     # deleted a file
!                     changed = True
!                     break
!             else:
!                 for f in new_files:
!                     if not f in self.files:
!                         # added a file
!                         changed = True
!                         break
          else:
!             changed = True
  
!         self.last_time = vfs.mtime(self.dir)
!         self.item.__dirwatcher_last_time  = self.last_time
!         self.files = self.listoverlay()
  
!         if changed:
!             log.info('directory has changed')
!             self.item.build(menuw=self.menuw, arg='update')
  
!         self.item.__dirwatcher_last_files = self.files
          return True
  
  
      def poll(self):
!         if self.dir and self.menuw and \
                 self.menuw.menustack[-1] == self.item_menu and \
                 eventhandler.is_menu():
--- 958,1014 ----
  
  
!     def cwd(self, menuw, item, item_menu):
          self.menuw     = menuw
          self.item      = item
          self.item_menu = item_menu
  
  
!     def fast_check(self, overlay = False):
!         cache = self.item.listing.cache
!         if overlay:
!             dirname = cache.overlay_file
!             listing = cache.overlay
!             mtime   = 'overlay_mtime'
          else:
!             dirname = cache.dirname
!             listing = cache.items
!             mtime   = 'items_mtime'
  
!         data_mtime = os.stat(dirname)[stat.ST_MTIME]
!         if data_mtime != cache.data[mtime]:
!             return True
  
!         for basename, info in listing.items():
!             if info['ext'] != 'fxd' and not info.has_key('isdir'):
!                 continue
!             filename = dirname + '/' + basename
!             mtime = os.stat(filename)[stat.ST_MTIME]
!             if mtime != info['mtime']:
!                 return True
!             if info.has_key('isdir'):
!                 overlay = vfs.getoverlay(filename)
!                 if os.path.isdir(overlay):
!                     mtime = os.stat(overlay)[stat.ST_MTIME]
!                     if mtime != info['overlay_mtime']:
!                         return True
!         if overlay:
!             return False
!         return self.fast_check(True)
  
!         
!     def scan(self):
!         if not self.item.listing:
!             return
!         if self.fast_check():
!             log.info('directory has changed')
!             item = self.item
!             self.item = None
!             item.build(menuw=self.menuw, arg='update')
!             self.item = item
          return True
  
  
      def poll(self):
!         if self.item and self.item.listing and self.menuw and \
                 self.menuw.menustack[-1] == self.item_menu and \
                 eventhandler.is_menu():

Index: cleanup.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/cleanup.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** cleanup.py  18 Dec 2004 13:39:08 -0000      1.4
--- cleanup.py  10 Apr 2005 18:08:05 -0000      1.5
***************
*** 10,13 ****
--- 10,16 ----
  # -----------------------------------------------------------------------
  # $Log$
+ # Revision 1.5  2005/04/10 18:08:05  dischi
+ # switch to new mediainfo module
+ #
  # Revision 1.4  2004/12/18 13:39:08  dischi
  # wait using the notifier, stop popen children
***************
*** 78,87 ****
      """
      import util.popen
!     import util.mediainfo
      import gui
  
      global _callbacks
      
!     util.mediainfo.sync()
      if not gui.displays.active():
          # this function is called from the signal handler, but
--- 81,90 ----
      """
      import util.popen
!     import mediadb
      import gui
  
      global _callbacks
      
!     mediadb.save()
      if not gui.displays.active():
          # this function is called from the signal handler, but

Index: playlist.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/playlist.py,v
retrieving revision 1.79
retrieving revision 1.80
diff -C2 -d -r1.79 -r1.80
*** playlist.py 20 Nov 2004 18:22:59 -0000      1.79
--- playlist.py 10 Apr 2005 18:08:13 -0000      1.80
***************
*** 10,13 ****
--- 10,16 ----
  # -----------------------------------------------------------------------
  # $Log$
+ # Revision 1.80  2005/04/10 18:08:13  dischi
+ # switch to new mediainfo module
+ #
  # Revision 1.79  2004/11/20 18:22:59  dischi
  # use python logger module for debug
***************
*** 72,78 ****
--- 75,83 ----
  import eventhandler
  import plugin
+ from mediadb import FileListing
  
  from event import *
  from item import Item, MediaItem
+ from gui import ProgressBox
  
  import logging
***************
*** 97,103 ****
          self.name     = Unicode(name)
  
-         if isstring(playlist) and not name:
-             self.name = util.getname(playlist)
-             
          # variables only for Playlist
          self.current_item = None
--- 102,105 ----
***************
*** 250,267 ****
                  
          if isstring(playlist):
-             # it's a filename with a playlist
-             try:
-                 f=open(playlist, "r")
-                 line = f.readline()
-                 f.close
-                 if line.find("[playlist]") > -1:
-                     self.read_pls(playlist)
-                 elif line.find("[Slides]") > -1:
-                     self.read_ssr(playlist)
-                 else:
-                     self.read_m3u(playlist)
-             except (OSError, IOError), e:
-                 log.error('playlist error: %s' % e)
              self.set_url(playlist)
  
          # self.playlist is a list of Items or strings (filenames)
--- 252,276 ----
                  
          if isstring(playlist):
              self.set_url(playlist)
+             if self.info['playlist'] != None:
+                 log.info('use cached playlist for %s' % playlist)
+                 self.playlist = self.info['playlist']
+             else:
+                 log.info('create playlist for %s' % playlist)
+                 # it's a filename with a playlist
+                 try:
+                     f=open(playlist, "r")
+                     line = f.readline()
+                     f.close
+                     if line.find("[playlist]") > -1:
+                         self.read_pls(playlist)
+                     elif line.find("[Slides]") > -1:
+                         self.read_ssr(playlist)
+                     else:
+                         self.read_m3u(playlist)
+                 except (OSError, IOError), e:
+                     log.error('playlist error: %s' % e)
+                 # store the playlist for later use
+                 self.info.store_with_mtime('playlist', self.playlist)
  
          # self.playlist is a list of Items or strings (filenames)
***************
*** 278,284 ****
                      # (directory, recursive=True|False)
                      if i[1]:
!                         self.playlist += util.match_files_recursively(i[0], 
self.suffixlist)
                      else:
!                         self.playlist += util.match_files(i[0], 
self.suffixlist)
                      # set autoplay to True on such big lists
                      self.autoplay = True
--- 287,295 ----
                      # (directory, recursive=True|False)
                      if i[1]:
!                         self.playlist += util.match_files_recursively\
!                                          (i[0], self.suffixlist)
                      else:
!                         self.playlist += util.match_files\
!                                          (i[0], self.suffixlist)
                      # set autoplay to True on such big lists
                      self.autoplay = True
***************
*** 328,337 ****
          """
          self.build()
          items = []
          for item in self.playlist:
              if not callable(item):
                  # get a real item
                  for p in self.get_plugins:
!                     items += p.get(self, [ item ])
              else:
                  items.append(item)
--- 339,368 ----
          """
          self.build()
+ 
+         files = []
+         for item in self.playlist:
+             if not callable(item):
+                 files.append(item)
+ 
+         listing = FileListing(files)
+         if listing.num_changes > 10:
+             text = _('Scanning playlist, be patient...')
+             popup = ProgressBox(text, full=listing.num_changes)
+             popup.show()
+             listing.update(popup.tick)
+             popup.destroy()
+         elif listing.num_changes:
+             listing.update()
+         
          items = []
+ 
          for item in self.playlist:
              if not callable(item):
                  # get a real item
+                 listing = FileListing([item])
+                 if listing.num_changes:
+                     listing.update()
                  for p in self.get_plugins:
!                     items += p.get(self, listing)
              else:
                  items.append(item)
***************
*** 536,540 ****
  
      
!     def get(self, parent, files):
          """
          return a list of items based on the files
--- 567,571 ----
  
      
!     def get(self, parent, listing):
          """
          return a list of items based on the files
***************
*** 545,554 ****
          else:
              display_type = None
-             
-         for filename in util.find_matches(files, self.suffix()):
-             items.append(Playlist(playlist=filename, parent=parent,
-                                   display_type=display_type, build=True))
-             files.remove(filename)
  
          return items
  
--- 576,583 ----
          else:
              display_type = None
  
+         for filename in listing.match_suffix(self.suffix()):
+             items.append(Playlist(playlist=filename.filename, parent=parent,
+                                   display_type=display_type, build=True))
          return items
  

Index: plugin.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/plugin.py,v
retrieving revision 1.81
retrieving revision 1.82
diff -C2 -d -r1.81 -r1.82
*** plugin.py   8 Jan 2005 11:52:53 -0000       1.81
--- plugin.py   10 Apr 2005 18:08:13 -0000      1.82
***************
*** 46,50 ****
  from event import Event
  import eventhandler
! 
  
  # get logging object
--- 46,50 ----
  from event import Event
  import eventhandler
! import util
  
  # get logging object
***************
*** 169,173 ****
          Plugin.__init__(self)
          self.display_type = []
!         self.find_matches = util.find_matches
  
      def suffix(self):
--- 169,173 ----
          Plugin.__init__(self)
          self.display_type = []
! 
  
      def suffix(self):
***************
*** 185,193 ****
  
  
!     def count(self, parent, files):
          """
          return how many items will be build on files
          """
!         return len(self.find_matches(files, self.suffix()))
  
  
--- 185,193 ----
  
  
!     def count(self, parent, listing):
          """
          return how many items will be build on files
          """
!         return len(listing.match_suffix(self.suffix()))
  
  

Index: item.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/item.py,v
retrieving revision 1.90
retrieving revision 1.91
diff -C2 -d -r1.90 -r1.91
*** item.py     31 Jan 2005 20:00:27 -0000      1.90
--- item.py     10 Apr 2005 18:08:13 -0000      1.91
***************
*** 48,52 ****
  from sysconfig import Unicode
  from util import vfs
! import util.mediainfo as mediainfo
  
  # get logging object
--- 48,52 ----
  from sysconfig import Unicode
  from util import vfs
! import mediadb
  
  # get logging object
***************
*** 167,174 ****
      VideoItem, AudioItem and ImageItem
      """
!     def __init__(self, parent=None, info=None):
          """
          Init the item. Sets all needed variables, if parent is given also
!         inherit some settings from there. Set self.info to info if given.
          """
          if not hasattr(self, 'type'):
--- 167,174 ----
      VideoItem, AudioItem and ImageItem
      """
!     def __init__(self, parent=None, info=True):
          """
          Init the item. Sets all needed variables, if parent is given also
!         inherit some settings from there.
          """
          if not hasattr(self, 'type'):
***************
*** 178,185 ****
          self.parent       = parent          # parent item
          self.icon         = None
!         if info and isinstance(info, mediainfo.Info):
!             self.info     = copy.copy(info)
!         else:
!             self.info     = mediainfo.Info(None, None, info)
          self.menuw        = None
          self.description  = ''
--- 178,182 ----
          self.parent       = parent          # parent item
          self.icon         = None
!         self.info         = None
          self.menuw        = None
          self.description  = ''
***************
*** 187,199 ****
          self.eventhandler_plugins = []
  
          if not hasattr(self, 'autovars'):
!             self.autovars = []
! 
          if parent:
-             if info and hasattr(parent, 'DIRECTORY_USE_MEDIAID_TAG_NAMES') \
-                    and parent.DIRECTORY_USE_MEDIAID_TAG_NAMES and \
-                    self.info.has_key('title'):
-                 self.name = self.info['title']
- 
              self.image = parent.image
              if hasattr(parent, 'is_mainmenu_item'):
--- 184,195 ----
          self.eventhandler_plugins = []
  
+         if info:
+             # create a basic info object
+             self.info = mediadb.ItemInfo('', '', {})
+             
          if not hasattr(self, 'autovars'):
!             self.autovars = {}
!             
          if parent:
              self.image = parent.image
              if hasattr(parent, 'is_mainmenu_item'):
***************
*** 214,226 ****
          set the value of 'key' to 'val'
          """
-         for var, val in self.autovars:
-             if key == var:
-                 if val == value:
-                     if not self.delete_info(key):
-                         log.warning( u'unable to store info for \'%s\'' % \
-                                      self.name )
-                 else:
-                     self.store_info(key, value)
-                 return
          self.info[key] = value
  
--- 210,213 ----
***************
*** 230,238 ****
          store the key/value in metadata
          """
!         if isinstance(self.info, mediainfo.Info):
!             if not self.info.store(key, value):
!                 log.warning( u'unable to store info for \'%s\'' % self.name)
!         else:
!             log.warning( u'unable to store info for item \'%s\'' % self.name)
  
  
--- 217,222 ----
          store the key/value in metadata
          """
!         if not self.info.store(key, value):
!             log.warning( u'unable to store info for \'%s\'' % self.name)
  
  
***************
*** 241,248 ****
          delete entry for metadata
          """
!         if isinstance(self.info, mediainfo.Info):
!             return self.info.delete(key)
!         else:
!             log.warning('unable to delete info for that kind of item')
  
  
--- 225,229 ----
          delete entry for metadata
          """
!         return self.info.delete(key)
  
  
***************
*** 373,380 ****
              if r != None:
                  return r
-             if hasattr(self, 'autovars'):
-                 for var, val in self.autovars:
-                     if var == attr:
-                         return val
          return ''
  
--- 354,357 ----
***************
*** 403,428 ****
      def __init__(self, type, parent):
          self.type = type
!         Item.__init__(self, parent)
  
  
!     def set_url(self, url, info=True, search_image=True):
          """
          Set a new url to the item and adjust all attributes depending
          on the url. Each MediaItem has to call this function. If info
!         is True, search for additional information in mediainfo.
          """
!         self.url = url                  # the url itself
! 
!         if not url:
!             self.network_play = True    # network url, like http
!             self.filename     = ''      # filename if it's a file:// url
!             self.mode         = ''      # the type (file, http, dvd...)
!             self.files        = None    # FileInformation
!             self.mimetype     = ''      # extention or mode
!             return
  
!         if url.find('://') == -1:
!             self.url = 'file://' + url
  
          self.files = FileInformation()
          if self.media:
--- 380,412 ----
      def __init__(self, type, parent):
          self.type = type
!         Item.__init__(self, parent, False)
  
  
!     def set_url(self, url, search_cover=True):
          """
          Set a new url to the item and adjust all attributes depending
          on the url. Each MediaItem has to call this function. If info
!         is True, search for additional information in mediadb.
          """
!         if isinstance(url, mediadb.ItemInfo):
!             self.info = url
!             url = url.url
!         else:
!             if url:
!                 log.error('please fix this for %s' % url)
!                 self.info = mediadb.get(url[url.find('://')+3:])
!             else:
!                 self.info = mediadb.ItemInfo('', '', {})
  
!                 self.url = url              # the url itself
!                 self.network_play = True    # network url, like http
!                 self.filename     = ''      # filename if it's a file:// url
!                 self.mode         = ''      # the type (file, http, dvd...)
!                 self.files        = None    # FileInformation
!                 self.mimetype     = ''      # extention or mode
!                 self.name         = u''
!                 return
  
+         self.url = url
          self.files = FileInformation()
          if self.media:
***************
*** 437,465 ****
              self.filename     = self.url[7:]
              self.files.append(self.filename)
!             if search_image:
!                 image = 
util.getimage(self.filename[:self.filename.rfind('.')])
!                 if image:
!                     # there is an image with the same filename except
!                     # the suffix is an image
!                     self.image = image
!                     self.files.image = image
!                 elif self.parent and self.parent.type != 'dir':
!                     # search for cover.[png|jpg] the the current dir
!                     cover = os.path.dirname(self.filename) + '/cover'
!                     self.image = util.getimage(cover, self.image)
              # set the suffix of the file as mimetype
              self.mimetype = self.filename[self.filename.rfind('.')+1:].lower()
!             if info:
!                 self.info = mediainfo.get(self.filename)
!                 try:
!                     if self.parent.DIRECTORY_USE_MEDIAID_TAG_NAMES:
!                         self.name = self.info['title'] or self.name
!                 except:
!                     pass
!                 if not self.name:
!                     self.name = self.info['title:filename']
!             # Set a name for the item based on the filename
              if not self.name:
!                 self.name = util.getname(self.filename)
  
          else:
--- 421,445 ----
              self.filename     = self.url[7:]
              self.files.append(self.filename)
! 
              # set the suffix of the file as mimetype
              self.mimetype = self.filename[self.filename.rfind('.')+1:].lower()
! 
!             self.info.set_permanent_variables(self.autovars)
!             try:
!                 if self.parent.DIRECTORY_USE_MEDIAID_TAG_NAMES:
!                     self.name = self.info['title'] or self.name
!             except:
!                 pass
              if not self.name:
!                 self.name = self.info['title:filename']
! 
!             if search_cover:
!                 cover = self.info['cover']
!                 if cover:
!                     self.image = cover
!                     if cover != self.filename and \
!                            cover[cover.rfind('/')+1:] == \
!                            self.filename[self.filename.rfind('/')+1:]:
!                         self.files.image = cover
  
          else:
***************
*** 470,474 ****
              self.mimetype     = self.type
              if not self.name:
!                 self.name     = Unicode(self.url)
  
  
--- 450,457 ----
              self.mimetype     = self.type
              if not self.name:
!                 self.name = self.info['title:filename']
!             if not self.name:
!                 self.name = Unicode(self.url)
!             self.image = self.info['cover']
  
  

Index: fxditem.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/fxditem.py,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** fxditem.py  22 Jan 2005 12:35:00 -0000      1.17
--- fxditem.py  10 Apr 2005 18:08:13 -0000      1.18
***************
*** 54,57 ****
--- 54,58 ----
  import plugin
  import os
+ import mediadb
  
  # get logging object
***************
*** 63,91 ****
      class to handle fxd files in directories
      """
!     def get(self, parent, files):
          """
!         return a list of items based on the files
          """
!         # get the list of fxd files
!         fxd_files = util.find_matches(files, ['fxd'])
! 
!         # removed covered files from the list
!         for f in fxd_files:
!             try:
!                 files.remove(f)
!             except:
!                 pass
! 
!         # check of directories with a fxd covering it
!         for d in copy.copy(files):
!             if os.path.isdir(d):
!                 f = os.path.join(d, os.path.basename(d) + '.fxd')
!                 if vfs.isfile(f):
!                     fxd_files.append(f)
!                     files.remove(d)
  
          # return items
          if fxd_files:
!             return self.parse(parent, fxd_files, files)
          else:
              return []
--- 64,79 ----
      class to handle fxd files in directories
      """
!     def get(self, parent, listing):
          """
!         return a list of items based on the listing
          """
!         # Get the list of fxd files. Get by extention (.fxd) and
!         # by type (fxd file with the same name as the dir inside it)
!         fxd_files = listing.match_suffix(['fxd']) + \
!                     listing.match_type('fxd')
  
          # return items
          if fxd_files:
!             return self.parse(parent, fxd_files, listing)
          else:
              return []
***************
*** 99,110 ****
  
  
!     def count(self, parent, files):
          """
          return how many items will be build on files
          """
!         return len(self.get(parent, files))
  
  
!     def parse(self, parent, fxd_files, duplicate_check=[], display_type=None):
          """
          return a list of items that belong to a fxd files
--- 87,98 ----
  
  
!     def count(self, parent, listing):
          """
          return how many items will be build on files
          """
!         return len(self.get(parent, listing))
  
  
!     def parse(self, parent, fxd_files, listing, display_type=None):
          """
          return a list of items that belong to a fxd files
***************
*** 120,130 ****
              try:
                  # create a basic fxd parser
!                 parser = util.fxdparser.FXD(fxd_file)
  
                  # create items attr for return values
                  parser.setattr(None, 'items', [])
                  parser.setattr(None, 'parent', parent)
!                 parser.setattr(None, 'filename', fxd_file)
!                 parser.setattr(None, 'duplicate_check', duplicate_check)
                  parser.setattr(None, 'display_type', display_type)
  
--- 108,118 ----
              try:
                  # create a basic fxd parser
!                 parser = util.fxdparser.FXD(fxd_file.filename)
  
                  # create items attr for return values
                  parser.setattr(None, 'items', [])
                  parser.setattr(None, 'parent', parent)
!                 parser.setattr(None, 'filename', fxd_file.filename)
!                 parser.setattr(None, 'listing', listing)
                  parser.setattr(None, 'display_type', display_type)
  
***************
*** 140,144 ****
  
              except:
!                 log.exception("fxd file %s corrupt" % fxd_file)
          return items
  
--- 128,132 ----
  
              except:
!                 log.exception("fxd file %s corrupt" % fxd_file.filename)
          return items
  

Index: main.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/main.py,v
retrieving revision 1.162
retrieving revision 1.163
diff -C2 -d -r1.162 -r1.163
*** main.py     30 Jan 2005 12:07:42 -0000      1.162
--- main.py     10 Apr 2005 18:08:13 -0000      1.163
***************
*** 148,152 ****
  import gui
  import util
- import util.mediainfo
  import plugin
  import mcomm
--- 148,151 ----
***************
*** 272,298 ****
      plugin.init(splash.progress)
  
-     # Fire up splashscreen and load the cache
-     if config.MEDIAINFO_USE_MEMORY == 2:
-         # delete previous splash screen object
-         splash.destroy()
-         splash = Splashscreen(_('Reading cache, please wait ...'), 1)
- 
-         cachefiles = []
-         for type in ('video', 'audio', 'image', 'games'):
-             if plugin.is_active(type):
-                 n = 'config.%s_ITEMS' % type.upper()
-                 x = eval(n)
-                 for item in x:
-                     if os.path.isdir(item[1]):
-                         cachefiles += [ item[1] ] + \
-                                       util.get_subdirs_recursively(item[1])
- 
-         cachefiles = util.unique(cachefiles)
-         splash.bar.set_max_value(len(cachefiles))
- 
-         for f in cachefiles:
-             splash.progress()
-             util.mediainfo.load_cache(f)
- 
      # fade out the splash screen
      splash.hide()
--- 271,274 ----



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