ocarina/libsaria/sources/library/tree.py

58 lines
1.1 KiB
Python

# Bryan Schumaker (2 / 12 / 2011)
import string
import library
ttable = dict()
for s in string.punctuation:
ttable[ord(s)] = u""
for s in string.lowercase:
ttable[ord(s)] = ord(s) - 32
class Tree(dict):
def __init__(self):
dict.__init__(self)
def walk(self):
keys = self.keys()
keys.sort()
for key in keys:
child = self[key]
if len(child.keys()) == 0:
yield key
continue
for res in child.walk():
yield res
def __insert__(self, path):
path_part = path[0]
child = self.get(path_part, None)
if child == None:
child = self.__class__()
self[path_part] = child
return child
def insert(self, path):
child = self.__insert__(path)
if len(path) > 1:
child.insert(path[1:])
lib_tree = None
def list_ids():
for id in lib_tree.walk():
yield id
def add_tracks(tracks):
for id, track in tracks.iteritems():
artist = track.artist.translate(ttable)
album = track.album.translate(ttable)
lib_tree.insert([artist, album, track.track, id])
def make_tree():
global lib_tree
lib_tree = Tree()
for src, tracks in library.lib_dict.iteritems():
add_tracks(tracks)