Made ocarina.buildLib() to make a library, save, and exit

git-svn-id: file:///home/anna/Desktop/ocarina-legacy/mithos/ocarina@59 1daee41c-8060-4895-b1f0-2197c00d777a
This commit is contained in:
bjschuma 2009-08-06 03:57:35 +00:00
parent a75984f950
commit b9ccbf2012
5 changed files with 79 additions and 40 deletions

View File

@ -224,7 +224,7 @@ class ContentPane(gtk.HBox):
if not (self.status == "pafter") and (loaded==True): if not (self.status == "pafter") and (loaded==True):
self.plause(None,None) self.plause(None,None)
self.data.scrobbler.nowPlaying(self.data.song.info) self.data.scrobbler.nowPlaying(self.data.song.info)
self.gotoCurSong() #self.gotoCurSong()
self.changeImg() self.changeImg()
self.status = "" self.status = ""
self.data.dump() self.data.dump()

View File

@ -8,6 +8,7 @@ class Data:
path = os.path.join(options.user,".ocarina") path = os.path.join(options.user,".ocarina")
#self.updateQ = False #self.updateQ = False
#self.updateList = False #self.updateList = False
self.options = options
self.path = path self.path = path
self.song = None self.song = None
self.quit = None self.quit = None
@ -19,23 +20,23 @@ class Data:
# Dump user data to a file # Dump user data to a file
def dump(self): def dump(self,all):
# Have to clear library.libview before saving, otherwise there are problems # Have to clear library.libview before saving, otherwise there are problems
libview = self.library.libview libview = self.library.libview
self.library.libview = None self.library.libview = None
self.save(self.library,"library") self.save(self.library,"library")
self.library.libview = libview self.library.libview = libview
if all == True:
self.save([self.curList,self.curSong],"playlist") self.save([self.curList,self.curSong],"playlist")
self.save([self.curQ],"queue") self.save([self.curQ],"queue")
self.save([self.size,self.divider,self.colSizes,self.sortedCol,self.random],"preferences") self.save([self.size,self.divider,self.colSizes,self.sortedCol,self.random],"preferences")
self.save([self.lfm,self.lfmuser,self.lfmpass],"last.fm") self.save([self.lfm,self.lfmuser,self.lfmpass],"last.fm")
# Pickle out an object to file # Pickle out an object to file
def save(self,obj,file): def save(self,obj,file):
out = open(os.path.join(self.path,file),'w') out = open(os.path.join(self.path,file),'w')
p = pickle.Pickler(out,1) p = pickle.Pickler(out,0)
p.dump(obj) p.dump(obj)
out.close() out.close()

View File

@ -13,6 +13,7 @@ class Library:
self.reset() self.reset()
#self.scanning = False #self.scanning = False
self.libview = None self.libview = None
self.data = None
#self.notAdded = open("/home/bjschuma/Desktop/notAdded.txt",'w') #self.notAdded = open("/home/bjschuma/Desktop/notAdded.txt",'w')
@ -20,14 +21,18 @@ class Library:
def scan(self,thread,dir): def scan(self,thread,dir):
#self.scanning = True #self.scanning = True
self.reset() self.reset()
self.libview.updates() if self.libview:
self.libview.updates()
self.path = os.path.expanduser(dir) self.path = os.path.expanduser(dir)
if os.path.exists(self.path) == False: if os.path.exists(self.path) == False:
#print "Directory not found: %s" % dir #print "Directory not found: %s" % dir
return return
self.traverse("") self.traverse("")
self.libview.stopUpdates() if self.libview:
self.data.dump() self.libview.stopUpdates()
if self.data.options.verbose == True:
print "Found",self.count,"songs."
self.data.dump(False)
def reset(self): def reset(self):
@ -65,12 +70,12 @@ class Library:
# Hash a file and return list of words # Hash a file and return list of words
def hash(self,file): #def hash(self,file):
return # return
file = file.lower() # file = file.lower()
# Only keep letters and numbers # # Only keep letters and numbers
words = re.sub('[^a-z0-9]',' ',file).split() # words = re.sub('[^a-z0-9]',' ',file).split()
return words # return words
# Add song to library # Add song to library
@ -139,20 +144,23 @@ class Library:
#for i in range(len(album)-1): #for i in range(len(album)-1):
# str = album[i]+album[i+1] # str = album[i]+album[i+1]
# info.double[str] = True # info.double[str] = True
self.libview.insert(info) if self.libview:
self.libview.insert(info)
if self.data.options.verbose == True:
print info.filename
# Return true if file is in the library # Return true if file is in the library
def has(self,file): #def has(self,file):
words = self.hash(file) # words = self.hash(file)
if len(words) == 0: # if len(words) == 0:
return -1 # return -1
if (words[0] in self.data.map.keys()) == False: # if (words[0] in self.data.map.keys()) == False:
return -1 # return -1
indices = set(self.data.map[words[0]]) # indices = set(self.data.map[words[0]])
for word in words[1:]: # for word in words[1:]:
indices = indices & set(self.data.map[word]) # indices = indices & set(self.data.map[word])
# Return first instance # # Return first instance
if len(indices) > 0: # if len(indices) > 0:
return indices.pop() # return indices.pop()
return -1 # return -1

View File

@ -77,20 +77,20 @@ class List(gtk.ScrolledWindow):
# Select a song by double clicking on its row # Select a song by double clicking on its row
def selectSong(self,widgit,iter,path,data,list): def selectSong(self,widgit,iter,path,data,list):
self.loadSong(self.data.library.files[self.sort[iter][0]]) self.loadSong(self.data.library.files[self.sort[iter][0]])
#self.gotoCurSong()
self.plause(None,None) self.plause(None,None)
self.data.scrobbler.nowPlaying(self.data.song.info) self.data.scrobbler.nowPlaying(self.data.song.info)
# Opens a menu on a right click # Opens a menu on a right click
def clicked(self,widgit,data): def clicked(self,widgit,data):
end = self.tree.get_path_at_pos(int(data.x),int(data.y))
# end will be None if no rows are selected.
if end != None:
end = end[0][0]
begin = self.sel.get_selected_rows()[1][0][0]
# This function likes ints for some reason...
self.sel.select_range(int(begin),int(end))
if data.button == 3: if data.button == 3:
end = self.tree.get_path_at_pos(int(data.x),int(data.y))
# end will be None if no rows are selected.
if end != None:
end = end[0][0]
begin = self.sel.get_selected_rows()[1][0][0]
self.sel.select_range(int(begin),int(end))
self.rcmenu.popup(None,None,None,data.button,data.time) self.rcmenu.popup(None,None,None,data.button,data.time)
@ -215,9 +215,10 @@ class List(gtk.ScrolledWindow):
self.data.song.close() self.data.song.close()
self.data.song = Song(file,self.next) self.data.song = Song(file,self.next)
self.data.curSong = file.id self.data.curSong = file.id
self.gotoCurSong()
self.setAlbumArt(file.filename) self.setAlbumArt(file.filename)
self.labels() self.labels()
self.gotoCurSong() #self.gotoCurSong()
# Scroll the window and select the row # Scroll the window and select the row

View File

@ -1,9 +1,11 @@
import sys import sys
import os
import gtk import gtk
import gobject import gobject
from options import Options from options import Options
from data import Data from data import Data
from library import Library
from window import Window from window import Window
@ -16,8 +18,13 @@ class main:
self.options = Options() self.options = Options()
if ("-v" in argv) == True: if ("-v" in argv) == True:
self.options.verbose = True self.options.verbose = True
# Load saved data (or create new data)
self.data = Data(self.options) self.data = Data(self.options)
if ("-l" in argv) == True:
self.buildLib()
return
# Load saved data (or create new data)
#self.data.song = Song(self.quit) #self.data.song = Song(self.quit)
self.data.quit = None self.data.quit = None
@ -39,5 +46,27 @@ class main:
return False return False
def buildLib(self):
path = ""
validPath= False
self.data.options.verbose = True
self.data.library.data = self.data
while validPath == False:
path = raw_input("Input path to library: ")
path = os.path.expanduser(path)
if os.path.exists(path) == True:
validPath = True
else:
print "Invalid path entered:",path
actual = ""
actual = raw_input("Input recorded library path (or none to use scan path): ")
print actual
print "Scanning: ",path
self.data.library.scan(None,path)
if actual != "":
self.data.library.path = actual
self.data.dump(False)
print "Library saved to ~/.ocarina/library"
if __name__=='__main__':main(sys.argv[1:]) if __name__=='__main__':main(sys.argv[1:])