import os import cPickle as pickle from library import Library class Data: def __init__(self,options): path = os.path.join(options.user,".ocarina") #self.updateQ = False #self.updateList = False self.options = options self.path = path self.song = None self.quit = None self.scrobbler = None if os.path.exists(self.path) == False: os.mkdir(self.path) self.load(path,options) #gobject.timeout_add(600000,self.dump) # Dump user data to a file def dump(self,all): # Have to clear library.libview before saving, otherwise there are problems libview = self.library.libview self.library.libview = None self.save(self.library,"library") self.library.libview = libview if all == True: self.save([self.curList,self.curSong],"playlist") self.save([self.curQ],"queue") self.save([self.size,self.divider,self.colSizes,self.sortedCol,self.random],"preferences") self.save([self.lfm,self.lfmuser,self.lfmpass],"last.fm") # Pickle out an object to file def save(self,obj,file): out = open(os.path.join(self.path,file),'w') p = pickle.Pickler(out,0) p.dump(obj) out.close() # Read user data from the file # Create values if files do not exist def load(self,path,options): self.library = self.load2("library") if self.library == None: self.library = Library() # Load saved playlist plist = self.load2("playlist") if plist == None: self.curList = [] self.curSong = 0 else: self.curList = plist[0] self.curSong = plist[1] # Load saved queue queue = self.load2("queue") if queue == None: self.curQ = [] else: self.curQ = queue[0] # Load user preferences prefs = self.load2("preferences") if prefs == None: self.size = (800,600) self.divider = 150 self.colSizes = [0,0,0,0,0] self.sortedCol = 3 self.random = False else: self.size = prefs [0] self.divider = prefs[1] self.colSizes = prefs[2] self.sortedCol = prefs[3] self.random = prefs[4] # Load last.fm data lfm = self.load2("last.fm") if lfm == None: self.lfm = "" self.lfmuser = "" self.lfmpass = "" else: self.lfm = lfm[0] self.lfmuser = lfm[1] self.lfmpass = lfm[2] # Read in a pickled saved data file def load2(self,file): path = os.path.join(self.path,file) if os.path.exists(path): p = pickle.Unpickler(open(path)) data = p.load() return data return None