Hi,
I'm currently ripping my CDs with freevo and I encountered some problems when
either the cddb-query failed (my router was powered off and freevo showed
"Unknown CD" or wrong results from cddb) or I had to choose a cover from a
list of amazon-hits and choosed the wrong one (should buy a keyboard with
larger keys...) ;-)....
In both cases I had to ssh my freevo-box, delete the *.mmpython/*.jpg file
manually and restart freevo.
To make this work easier I added the following funcs:
- delete metadata for audio-cd's
- delete image for audio-cd's
and for those working with neither an IR remote or a bluetooth mobile (and
therefore not having an "EJECT" button):
- eject for cd/dvd-drives
All diffs are against 1.5.3 tarball release. These are my first python (and
OO) steps, maybe it's not the best and cleanest solution, but it works for
me. Feel free to integrate.
Regards
Georg
--
Mein oeffentlicher Schluessel fuer PGP/GPG - Verschluesselung:
pub �1024D/63EB55CA 2002-11-27 Georg Kuenzel <[EMAIL PROTECTED]>
Key fingerprint = 8DA9 55C6 91FA D92D 89C3 �7C22 0A1D 790C 63EB 55CA
--- patch/coversearch.py 2005-03-28 13:03:22.000000000 +0200
+++ ../../usr/lib/python2.3/site-packages/freevo/audio/plugins/coversearch.py 2005-03-28 23:22:48.102139880 +0200
@@ -70,7 +70,7 @@
from xml.dom import minidom # ParseError used by amazon module
from gui.PopupBox import PopupBox
-from gui.AlertBox import AlertBox
+from gui.ConfirmBox import ConfirmBox
from util import amazon
@@ -128,7 +128,7 @@
# do don't call this when we have an image
if item.type == 'audiocd' and item.image:
- return []
+ return [ ( self.cover_delete_file, _( 'Delete image' ), '') ]
# do don't call this when we have an image
if item.type == 'audio' and item.filename and \
@@ -168,6 +168,30 @@
String(_( "Unknown CD, cover searching is disabled" ))
return []
+
+ def cover_delete_file(self, arg=None, menuw=None):
+ """
+ confirm metadata deletion
+ """
+ self.menuw = menuw
+ ConfirmBox(text=_('Do you wish to delete cover\n \'%s\'?') % self.item.info['title'],
+ handler=self.delete_file, default_choice=1,
+ handler_message=_('Deleting...')).show()
+
+
+ def delete_file(self):
+ """
+ delete metadata file
+ """
+ menuw=self.menuw
+ filename = '%s/disc/metadata/%s.jpg' % (config.OVERLAY_DIR, self.item.info['id'])
+ try:
+ os.unlink (filename)
+ self.item.image = ''
+ except:
+ print ('cover file not found, check path')
+ menuw.delete_menu()
+
def cover_search_file(self, arg=None, menuw=None):
"""
--- home/georg/patch/audiodiskitem.py 2005-03-28 13:03:39.000000000 +0200
+++ usr/lib/python2.3/site-packages/freevo/audio/audiodiskitem.py 2005-03-27 21:27:03.000000000 +0200
@@ -45,8 +45,9 @@
from audioitem import AudioItem
from playlist import Playlist
from directory import DirItem
+from gui.ConfirmBox import ConfirmBox
-class AudioDiskItem(Playlist):
+class AudioDiskItem(Playlist, DirItem):
"""
class for handling audio disks
"""
@@ -74,10 +75,42 @@
"""
return a list of actions for this item
"""
- items = [ ( self.cwd, _('Browse disc') ) ]
+ items = [ ( self.cwd, _('Browse disc') ),
+ ( self.metadata_delete_file, _('Delete metadata')),
+ ( self.eject, _('Eject drive')) ]
return items
+
+ def metadata_delete_file(self, arg=None, menuw=None):
+ """
+ confirm metadata deletion
+ """
+ self.menuw = menuw
+ ConfirmBox(text=_('Do you wish to delete metadata about\n \'%s\'?') % self.name,
+ handler=self.delete_file, default_choice=1,
+ handler_message=_('Deleting...')).show()
+
+
+ def delete_file(self, arg=None, menuw=None):
+ """
+ delete metadata file
+ """
+ filename = ('%s/disc/metadata/%s.mmpython') % (config.OVERLAY_DIR, self.disc_id)
+ menuw = self.menuw
+ try:
+ os.unlink (filename)
+ except:
+ menuw.delete_menu()
+ return
+ self.name = _('Unknown CD Album')
+ number = len(self.info['tracks'])
+ if hasattr(self.info, 'mixed'):
+ number -= 1
+ for i in range(0, number):
+ self.info['tracks'][i]['title'] = 'Track %s' % (i+1)
+ menuw.delete_menu()
+
def cwd(self, arg=None, menuw=None):
"""
make a menu item for each file in the directory
--- home/georg/patch/directory.py 2005-03-28 13:03:07.000000000 +0200
+++ usr/lib/python2.3/site-packages/freevo/directory.py 2005-03-28 23:58:48.960639456 +0200
@@ -420,6 +420,10 @@
items = [ ( self.cwd, _('Browse directory')) ]
+ if self.media:
+ if not self.media.tray_open:
+ items.append((self.eject, _('Eject drive')))
+
if self['num_%s_items' % display_type]:
items.append((self.play, _('Play all files in directory')))
@@ -441,7 +445,16 @@
self.media.umount()
return items
-
+
+
+ def eject(self, arg=None, menuw=None):
+ """
+ eject the drive
+ """
+ item = self.media
+ item.move_tray(dir='open', notify=0)
+ # go back
+ menuw.delete_menu()
def cwd(self, arg=None, menuw=None):
--- home/georg/patch/videoitem.py 2005-03-28 13:03:54.000000000 +0200
+++ usr/lib/python2.3/site-packages/freevo/video/videoitem.py 2005-03-29 00:02:29.840060680 +0200
@@ -87,11 +87,12 @@
import configure
import plugin
+from directory import DirItem
from gui import PopupBox, AlertBox, ConfirmBox
from item import Item, FileInformation
from event import *
-class VideoItem(Item):
+class VideoItem(DirItem):
def __init__(self, url, parent, info=None, parse=True):
self.autovars = [ ('deinterlace', 0) ]
Item.__init__(self, parent)
@@ -330,7 +331,11 @@
if self.mode == 'file' and not self.variants and not self.subitems and \
(not self.image or not self.image.endswith('raw')):
items.append((self.create_thumbnail, _('Create Thumbnail'), 'create_thumbnail'))
-
+
+ if self.media:
+ if not self.media.tray_open:
+ items.append((self.eject, _('Eject drive')))
+
return items