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