2.0.1
[clinton/xbmc-groove.git] / default.py
index 9d56556..1c71e7f 100644 (file)
@@ -480,7 +480,6 @@ class Grooveshark:
     def playSong(self, item):
         global playTimer
         global player
-        player.stop()
         if item != None:
             # Get stream as it could have expired
             item.select(True)
@@ -521,7 +520,7 @@ class Grooveshark:
             xbmc.executebuiltin('XBMC.Notification(' + __language__(30008) + ', ' + __language__(30044) + ', 1000, ' + thumbDef + ')')
         
     # Make a song directory item
-    def songItem(self, songid, name, album, artist, coverart, trackLabelFormat=ARTIST_ALBUM_NAME_LABEL):
+    def songItem(self, songid, name, album, artist, coverart, trackLabelFormat=ARTIST_ALBUM_NAME_LABEL, tracknumber=1):
         
         stream = self._getSongStream(songid)
         if stream != False:
@@ -536,7 +535,7 @@ class Grooveshark:
                 trackLabel = artist + " - " + album + " - " + name
             item = xbmcgui.ListItem(label = trackLabel, thumbnailImage=songImg, iconImage=songImg)
             item.setPath(url)
-            item.setInfo( type="music", infoLabels={ "title": name, "album": album, "artist": artist, "duration": duration} )
+            item.setInfo( type="music", infoLabels={ "title": name, "album": album, "artist": artist, "duration": duration, "tracknumber" : tracknumber} )
             item.setProperty('mimetype', 'audio/mpeg')
             item.setProperty("IsPlayable", "true")
             item.setProperty('songid', str(songid))
@@ -705,7 +704,7 @@ class Grooveshark:
     def _get_login(self):
         if (self.username == "" or self.password == ""):
             dialog = xbmcgui.Dialog()
-            dialog.ok(__language__(30008), __language__(30069), __language__(30070))
+            dialog.ok(__language__(30008), __language__(30069), __language__(30070), __language__(30082))
             return 0
         else:
             if self.userid == 0:
@@ -714,7 +713,7 @@ class Grooveshark:
                 return uid
             else:
                 dialog = xbmcgui.Dialog()
-                dialog.ok(__language__(30008), __language__(30069), __language__(30070))
+                dialog.ok(__language__(30008), __language__(30069), __language__(30070), __language__(30082))
                 return 0
     
     # File download            
@@ -766,7 +765,7 @@ class Grooveshark:
             album = song[2]
             artist = song[4]
             coverart = song[6]
-            item = self.songItem(songid, name, album, artist, coverart, trackLabelFormat)
+            item = self.songItem(songid, name, album, artist, coverart, trackLabelFormat, (n+1))
             if item != None:   
                 coverart = item.getProperty('coverart')
                 songname = song[0]
@@ -938,7 +937,7 @@ class Grooveshark:
                     server = song[4]
                     stream = [id, duration, url, key, server]
                     if __debugging__ :
-                        xbmc.log("Found " + str(id) + " in cache")
+                        xbmc.log("Found " + str(id) + " in stream cache")
                     break;
             f.close()
         except:
@@ -953,45 +952,55 @@ class Grooveshark:
                 key = stream['StreamKey']
                 server = stream['StreamServerID']
                 stream = [id, duration, url, key, server]
-                self._addSongStream(stream, streams)
+                self._addSongStream(stream)
 
         return stream
         
-    def _addSongStream(self, stream, streams):            
+    def _addSongStream(self, stream):
+        streams = self._getStreams()           
+        streams.append(stream)                
+        path = os.path.join(cacheDir, 'streams.dmp')
         try:
-            streams.append(stream)                
-            # Create the cache directory if it doesn't exist.
-            if not os.path.exists(cacheDir):
-                os.makedirs(cacheDir)
-            path = os.path.join(cacheDir, 'streams.dmp')
             f = open(path, 'wb')
             pickle.dump(streams, f, protocol=pickle.HIGHEST_PROTOCOL)
             f.close()
+            if __debugging__ :
+                xbmc.log("Added " + str(stream[0]) + " to stream cache")
         except:
-            xbmc.log("An error occurred adding stream")
-            pass
+            xbmc.log("An error occurred adding to stream")
     
     def _setSongStream(self, stream):
         id = int(stream[0])
         stream[1] = self._setDuration(stream[1])
-        streams = []
+        streams = self._getStreams()
         path = os.path.join(cacheDir, 'streams.dmp')
-        try:
-            f = open(path, 'wb')
-            streams = pickle.load(f)
-            i = 0
-            for song in streams:
-                if song[0] == id:
-                    streams[i] = stream
-                    if __debugging__ :
-                        xbmc.log("Added " + str(id) + " to cache")
+        i = 0
+
+        for song in streams:
+            if song[0] == id:
+                streams[i] = stream
+                try:
+                    f = open(path, 'wb')
                     pickle.dump(streams, f, protocol=pickle.HIGHEST_PROTOCOL)
+                    f.close()
+                    if __debugging__ :
+                        xbmc.log("Updated " + str(id) + " in stream cache")
                     break;
-                i = i + 1
+                except:
+                    xbmc.log("An error occurred setting stream")                    
+            i = i + 1
+    
+    def _getStreams(self):
+        path = os.path.join(cacheDir, 'streams.dmp')
+        try:
+            f = open(path, 'rb')
+            streams = pickle.load(f)
             f.close()
         except:
-            xbmc.log("An error occurred setting stream")
-    
+            streams = []
+            pass
+        return streams
+
     
 # Parse URL parameters
 def get_params():