Added primitive playlist viewer (allows for deleting playlists)
[jamaendo] / jamaui / settings.py
index 04dce11..db1a6aa 100644 (file)
@@ -23,6 +23,8 @@
 #
 import cPickle, os
 import logging
+import jamaendo
+import datetime
 
 from postoffice import postoffice
 
@@ -33,7 +35,8 @@ class Settings(object):
     defaults = {
         'volume':0.1,
         'user':None,
-        'favorites':set([]) # local favorites - until we can sync back
+        'favorites':set([]), # local favorites - until we can sync back
+        'playlists':{},
         }
 
     def __init__(self):
@@ -52,6 +55,32 @@ class Settings(object):
     def favorite(self, album):
         self.favorites.add(('album', album.ID))
         self.save()
+        postoffice.notify('settings-changed', 'favorites', self.favorites)
+
+    def get_playlist(self, playlist, get_track_objects=True):
+        entry = self.playlists.get(playlist)
+        if entry:
+            if get_track_objects:
+                return [jamaendo.Track(item['id'], item['data']) for item in entry]
+            return entry
+        return None
+
+    def add_to_playlist(self, playlist, track):
+        if isinstance(track, jamaendo.Track):
+            track = {'id':track.ID, 'data':track.get_data()}
+        assert(isinstance(track, dict))
+        lst = self.playlists.get(playlist)
+        if not lst:
+            lst = []
+            self.playlists[playlist] = lst
+        lst.append(track)
+        postoffice.notify('settings-changed', 'playlists', self.playlists)
+        log.debug("playlists is now %s", self.playlists)
+
+    def delete_playlist(self, name):
+        if name in self.playlists:
+            del self.playlists[name]
+            postoffice.notify('settings-changed', 'playlists', self.playlists)
 
     def load(self):
         if not os.path.isfile(self.__savename):
@@ -67,7 +96,11 @@ class Settings(object):
 
             for k in self.defaults.keys():
                 if k in settings:
-                    setattr(self, k, settings[k])
+                    val = settings[k]
+                    if k == 'playlists' and not isinstance(val, dict):
+                        continue
+                    setattr(self, k, val)
+            log.debug("Loaded settings: %s", settings)
         except Exception, e:
             log.exception('failed to load settings')
 
@@ -81,6 +114,7 @@ class Settings(object):
             f = open(self.__savename, 'w')
             cPickle.dump(settings, f)
             f.close()
+            log.debug("Saved settings: %s", settings)
         except Exception, e:
             log.exception('failed to save settings')