# Bryan Schumaker (8/8/2010) import libsaria tag = None audio = None ins_table = None ins_index = None ins_tree = None class Collection: def __init__(self): self.tree = None def __iter__(self): if not self.tree: self.load() for track in self.tree.walk(): yield track def get_attr(self, id, attr): node = self.tree tags = self.table[id] for tag in tags: node = node[tag] return node[attr] def scan(self, path): print "Scanning path:", path global ins_table global ins_index global ins_tree self.reset() ins_table = self.table.insert ins_index = self.index.insert ins_tree = self.tree. insert self.update(path) self.save() def reset(self): print "Resetting collection ... " from table import Table from index import Index from tree import Tree self.table = Table() self.index = Index() self.tree = Tree() def save(self): from libsaria import data data.save((self.table, self.index, self.tree), "library", "") def load(self): from libsaria import data objects = data.load("library", "") if objects == None: self.reset() return (self.table, self.index, self.tree) = objects def insert(self, file, filepath): global tag global audio global ins_table global ins_index global ins_tree tags = tag(file) audio_prop = audio(file) if tags.artist == u"": tags.artist = "Unknown Artist" if tags.album == u"": tags.album = "Unknown Album" if tags.title == u"": tags.title = "Unknown Title" list = [tags.artist, tags.album, tags.title] id = ins_table(list) ins_index(id, list) list.append(id) ins_tree(list, tags, audio_prop, filepath) def update(self, path): global tag global audio FileRef = libsaria.collection.FileRef join = libsaria.path.join insert = self.insert tag = FileRef.tag audio = FileRef.audioProperties for root,dirs,files in libsaria.path.walk(path): for file in files: file = join(root,file) try: insert(FileRef(file), file) except Exception,e: pass class TrackRecord: def __init__(self, year, length): self.length = 0 self.count = 0 self.year = 0 #self.like = None self.fs = None self.tags = None class Collection2: def __init__(self): self.fs_tree = None self.tag_tree = None self.records = None self.next_record = 0 def save(self, file): libsaria.data.save( [self.fs_tree, self.tag_tree, self.records, self.next_record], file, "") def reset(self): from tree import DLTree self.fs_tree = DLTree() self.tag_tree = DLTree() self.records = dict() def disp(self): pass #self.fs_tree.disp() #print #print #self.tag_tree.disp() def insert_allocate(self, components, ref): t = ref.tag() artist = str(t.artist) album = str(t.album) title = str(t.title) audio = ref.audioProperties() if artist == "": artist = "Unknown Artist" if album == "": album = "Unknown Album" if title == "": title = "Unknown Title" record = TrackRecord(t.year, audio.length) id = self.next_record self.next_record += 1 fs = self.fs_tree.insert(components + [id]) tags = self.tag_tree.insert([artist, album, title, id]) record.fs = fs record.tags = tags self.records[id] = record