ocarina/libsaria/collection/collection.py

125 lines
2.4 KiB
Python

# 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
def reset(self):
from tree import DLTree
self.fs_tree = DLTree()
self.tag_tree = DLTree()
def disp(self):
pass
#self.fs_tree.disp()
#print
#print
#self.tag_tree.disp()