fixed UnicodeDecodeError : no more unicode errors while parsing id3tags, hopefully ;)
authorDr.Best <dr_best@users.schwerkraft.elitedvb.net>
Tue, 2 Mar 2010 21:50:48 +0000 (21:50 +0000)
committerDr.Best <dr_best@users.schwerkraft.elitedvb.net>
Tue, 2 Mar 2010 21:50:48 +0000 (21:50 +0000)
merlinmusicplayer/src/plugin.py

index 52ab0b8..96e624d 100644 (file)
@@ -351,6 +351,17 @@ def OpenDatabase():
                                connection.execute('CREATE TABLE IF NOT EXISTS CurrentSongList (ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, song_id INTEGER, filename TEXT NOT NULL, title TEXT, artist TEXT, album TEXT, genre TEXT, bitrate TEXT, length TEXT, track TEXT, date TEXT, PTS INTEGER);')
                return connection
 
+def getEncodedString(value):
+       returnValue = ""
+       try:
+               returnValue = value.encode("utf-8", 'ignore')
+       except UnicodeDecodeError:
+               try:
+                       returnValue = value.encode("iso8859-1", 'ignore')
+               except UnicodeDecodeError:
+                       returnValue = "n/a"
+       return returnValue
+
 def getID3Tags(root,filename):
        audio = None
        isFlac = False
@@ -381,22 +392,24 @@ def getID3Tags(root,filename):
        else:
                isAudio = False
        if audio:
-               title = audio.get('title', [filename])[0]
+               title = getEncodedString(audio.get('title', [filename])[0])
                try:
                        # list index out of range workaround
-                       genre = audio.get('genre', ['n/a'])[0]
+                       genre = getEncodedString(audio.get('genre', ['n/a'])[0])
                except:
                        genre = "n/a"
-               artist = audio.get('artist', ['n/a'])[0]
-               album = audio.get('album', ['n/a'])[0]
+               artist = getEncodedString(audio.get('artist', ['n/a'])[0])
+               album = getEncodedString(audio.get('album', ['n/a'])[0])
                try:
                        tracknr = int(audio.get('tracknumber', ['-1'])[0].split("/")[0])
                except:
                        tracknr = -1
-               track = audio.get('tracknumber', [None])[0]
-               date = audio.get('date', [None])[0]
-               
-               length = str(datetime_timedelta(seconds=int(audio.info.length)))
+               track = getEncodedString(audio.get('tracknumber', ['n/a'])[0])
+               date = getEncodedString(audio.get('date', ['n/a'])[0])
+               try:
+                       length = str(datetime_timedelta(seconds=int(audio.info.length))).encode("utf-8", 'ignore')
+               except:
+                       length = -1
                if not isFlac:
                        bitrate = audio.info.bitrate / 1000
                else:
@@ -413,8 +426,8 @@ def getID3Tags(root,filename):
                        length = ""
                        bitrate = None
 
-       return audio, isAudio, title.encode("utf-8", 'ignore'), genre.encode("utf-8", 'ignore'),artist.encode("utf-8", 'ignore'),album.encode("utf-8", 'ignore'),tracknr,track,date,length.encode("utf-8", 'ignore'),bitrate
-
+       return audio, isAudio, title, genre ,artist, album, tracknr, track, date, length, bitrate
+       
 class MerlinMusicPlayerScreenSaver(Screen):
 
        sz_w = getDesktop(0).size().width()
@@ -531,7 +544,7 @@ class MerlinMusicPlayerTV(MerlinMusicPlayerScreenSaver):
                {
                        "cancel": self.close,
                        "ok": self.showHide,
-                       "right": self.nextService,\r
+                       "right": self.nextService,
                        "left": self.prevService,
                        "nextBouquet": self.nextBouquet,
                        "prevBouquet": self.prevBouquet,
@@ -813,8 +826,8 @@ class MerlinMusicPlayerScreen(Screen, InfoBarBase, InfoBarSeek, InfoBarNotificat
        else:
                skin = """
                        <screen name="MerlinMusicPlayerScreen" position="0,0" size="720,576" flags="wfNoBorder" backgroundColor="#00000000" title="iDream">
-                       <eLabel backgroundColor="#999999" position="50,50" size="620,2" zPosition="1"/>\r
-                       <eLabel backgroundColor="#999999" font="Regular;16" foregroundColor="#0f0f0f" halign="center" position="50,40" size="250,20" text="MERLIN  MUSIC  PLAYER" valign="center" zPosition="2"/>\r
+                       <eLabel backgroundColor="#999999" position="50,50" size="620,2" zPosition="1"/>
+                       <eLabel backgroundColor="#999999" font="Regular;16" foregroundColor="#0f0f0f" halign="center" position="50,40" size="250,20" text="MERLIN  MUSIC  PLAYER" valign="center" zPosition="2"/>
                        <eLabel backgroundColor="#999999" font="Regular;16" foregroundColor="#0f0f0f" halign="center" position="420,40" size="250,20" text="WWW.DREAMBOX-TOOLS.INFO" valign="center" zPosition="2"/>
                        <ePixmap alphatest="on" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MerlinMusicPlayer/images/mmp3p.png" position="120,350" size="33,162"/>
                        <widget name="coverArt" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MerlinMusicPlayer/images/no_coverArt.png" position="106,130" size="180,180" transparent="1" alphatest="blend" />
@@ -1420,8 +1433,8 @@ class MerlinMusicPlayerLyrics(Screen):
        else:
                skin = """
                        <screen name="MerlinMusicPlayerLyrics" position="0,0" size="720,576" flags="wfNoBorder" backgroundColor="#00000000" title="Merlin Music Player Lyrics">
-                       <eLabel backgroundColor="#999999" position="50,50" size="620,2" zPosition="1"/>\r
-                       <eLabel backgroundColor="#999999" font="Regular;16" foregroundColor="#0f0f0f" halign="center" position="50,40" size="250,20" text="MERLIN  MUSIC  PLAYER" valign="center" zPosition="2"/>\r
+                       <eLabel backgroundColor="#999999" position="50,50" size="620,2" zPosition="1"/>
+                       <eLabel backgroundColor="#999999" font="Regular;16" foregroundColor="#0f0f0f" halign="center" position="50,40" size="250,20" text="MERLIN  MUSIC  PLAYER" valign="center" zPosition="2"/>
                        <eLabel backgroundColor="#999999" font="Regular;16" foregroundColor="#0f0f0f" halign="center" position="420,40" size="250,20" text="WWW.DREAMBOX-TOOLS.INFO" valign="center" zPosition="2"/>
                        <widget name="headertext" position="50,73" zPosition="1" size="620,23" font="Regular;20" transparent="1"  foregroundColor="#fcc000" backgroundColor="#00000000"/>
                        <widget name="resulttext" position="50,100" zPosition="1" size="620,20" font="Regular;16" transparent="1"   backgroundColor="#00000000"/>
@@ -1515,8 +1528,8 @@ class MerlinMusicPlayerSongList(Screen):
        else:
                skin = """
                        <screen name="MerlinMusicPlayerSongList" position="0,0" size="720,576" flags="wfNoBorder" backgroundColor="#00000000" title="Songlist">
-                       <eLabel backgroundColor="#999999" position="50,50" size="620,2" zPosition="1"/>\r
-                       <eLabel backgroundColor="#999999" font="Regular;16" foregroundColor="#0f0f0f" halign="center" position="50,40" size="250,20" text="MERLIN  MUSIC  PLAYER" valign="center" zPosition="2"/>\r
+                       <eLabel backgroundColor="#999999" position="50,50" size="620,2" zPosition="1"/>
+                       <eLabel backgroundColor="#999999" font="Regular;16" foregroundColor="#0f0f0f" halign="center" position="50,40" size="250,20" text="MERLIN  MUSIC  PLAYER" valign="center" zPosition="2"/>
                        <eLabel backgroundColor="#999999" font="Regular;16" foregroundColor="#0f0f0f" halign="center" position="420,40" size="250,20" text="WWW.DREAMBOX-TOOLS.INFO" valign="center" zPosition="2"/>
                        <widget name="headertext" position="50,73" zPosition="1" size="620,23" font="Regular;20" transparent="1"  foregroundColor="#fcc000" backgroundColor="#00000000"/>
                        <widget name="list" position="50,110" zPosition="2" size="620,350" scrollbarMode="showOnDemand" transparent="0"  backgroundColor="#00000000"/>
@@ -2814,8 +2827,8 @@ class MerlinMusicPlayerFileList(Screen):
        else:
                skin = """
                        <screen name="MerlinMusicPlayerFileList" position="0,0" size="720,576" flags="wfNoBorder" backgroundColor="#00000000" title="iDream">
-                       <eLabel backgroundColor="#999999" position="50,50" size="620,2" zPosition="1"/>\r
-                       <eLabel backgroundColor="#999999" font="Regular;16" foregroundColor="#0f0f0f" halign="center" position="50,40" size="250,20" text="MERLIN  MUSIC  PLAYER" valign="center" zPosition="2"/>\r
+                       <eLabel backgroundColor="#999999" position="50,50" size="620,2" zPosition="1"/>
+                       <eLabel backgroundColor="#999999" font="Regular;16" foregroundColor="#0f0f0f" halign="center" position="50,40" size="250,20" text="MERLIN  MUSIC  PLAYER" valign="center" zPosition="2"/>
                        <eLabel backgroundColor="#999999" font="Regular;16" foregroundColor="#0f0f0f" halign="center" position="420,40" size="250,20" text="WWW.DREAMBOX-TOOLS.INFO" valign="center" zPosition="2"/>
 
                        <widget name="headertext" position="50,73" zPosition="1" size="620,23" font="Regular;20" transparent="1"  foregroundColor="#fcc000" backgroundColor="#00000000"/>