58 lines
1.1 KiB
Python
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)
|