Remove old collection code and files

This commit is contained in:
Bryan Schumaker 2010-11-12 19:40:42 -05:00
parent 3cb1959a7f
commit 2b2cd7e805
6 changed files with 0 additions and 405 deletions

View File

@ -9,11 +9,6 @@ exists = libsaria.path.exists
expand = libsaria.path.expand
FileRef = tagpy.FileRef
LIBRARY = 0
PLAYLIST = 1
QUEUE = 2
import lens
import library
import playlist
@ -47,16 +42,6 @@ def lib_get_cur_id():
def plist_refresh():
return call("PLISTREFRESH")
#def choose_next():
# global playlist
# global cur_lib_id
# if libsaria.prefs["random"] == True:
# next = playlist.random()
# else:
# next = playlist.next_id(cur_lib_id)
# if next != None:
# return call("NEXT", play_id, next)
def change_score():
prcnt = libsaria.audio.get_progress()
if prcnt > 0.75:

View File

@ -1,166 +0,0 @@
# Bryan Schumaker (8/8/2010)
import libsaria
import datetime
timedelta = datetime.timedelta
tag = None
audio = None
ins_table = None
ins_index = None
ins_tree = None
class TrackRecord:
def __init__(self, year, length, lenstr):
self.length = length
if lenstr[0] == "0" and lenstr[1] == ":":
self.lenstr = lenstr[2:]
else:
self.lenstr = lenstr
self.count = 0
self.year = year
self.score = 0
self.fs = None
self.tags = None
class Collection:
def __init__(self, file):
self.file = file
self.load()
self.filtered = False
self.visible = None
def save(self):
libsaria.data.save(
(self.fs_tree, self.tag_tree, self.index, self.records,
self.next_record, self.size),
self.file, ".dl_tree")
def load(self):
objects = libsaria.data.load(self.file, ".dl_tree")
if objects == None or len(objects) != 6:
self.reset()
return
(self.fs_tree, self.tag_tree, self.index, self.records,
self.next_record, self.size) = objects
def reset(self):
from tree import DLTree
from index import Index
self.fs_tree = DLTree()
self.tag_tree = DLTree()
self.index = Index()
self.records = dict()
self.next_record = 0
self.size = 0
def disp(self):
pass
#self.fs_tree.disp()
#print
#print
#self.tag_tree.disp()
def filter(self, text):
if len(text) > 0:
self.visible = self.index.filter(text)
self.filtered = True
else:
self.visible = None
self.filtered = False
def is_visible(self, id):
if self.filtered == False:
return True
return id in self.visible
def num_visible(self):
if self.filtered == True:
return len(self.visible)
else:
return self.size
def walk_tags(self):
for tag in self.tag_tree.walk_forwards():
rec = self.records[tag[3]]
yield tag + [rec.year] + [rec.lenstr]
def walk_ids(self):
for tag in self.tag_tree.walk_forwards():
yield tag[3]
def walk_filtered_ids(self):
for id in self.visible:
yield id
def find_id(self, file):
stripped = file.strip(libsaria.path.sep)
split = stripped.split(libsaria.path.sep)
res = self.fs_tree.walk_path(split)
if res == False:
return None
return res[0]
def has_id(self, id):
return id in self.index
def get_attr(self, id, attr):
rec = self.records[id]
if attr == "filepath":
cmp = rec.fs.walk_backwards()
return libsaria.path.sep.join([""] + cmp)
if attr == "playcount":
return rec.count
if attr == "year":
return rec.year
if attr == "lenstr":
return rec.lenstr
if attr == "score":
return rec.score
tags = rec.tags.walk_backwards()
if attr == "artist":
return tags[0]
if attr == "album":
return tags[1]
if attr == "title":
return tags[2]
def insert_tags(self, artist, album, title, id):
if self.has_id(id) == True:
return
tags = self.tag_tree.insert([artist, album, title, id])
self.index.insert([artist, album, title], id)
self.size += 1
def insert_allocate(self, components, ref):
t = ref.tag()
artist = t.artist
album = t.album
title = t.title
audio = ref.audioProperties()
if artist == "":
artist = u"Unknown Artist"
if album == "":
album = u"Unknown Album"
if title == "":
title = u"Unknown Title"
len = audio.length
record = TrackRecord(t.year, len, "%s" % timedelta(seconds=len))
id = self.next_record
self.next_record += 1
fs = self.fs_tree.insert(components + [id])
tags = self.tag_tree.insert([artist, album, title, id])
self.index.insert([artist, album, title], id)
record.fs = fs
record.tags = tags
self.records[id] = record
self.size += 1

View File

@ -1,130 +0,0 @@
# Bryan Schumaker (10/1/2010)
import libsaria
import collection
import random as rand
from libsaria import data
save = data.save
load = data.load
sep = libsaria.path.sep
walk = libsaria.path.walk
join = libsaria.path.join
splitext = libsaria.path.splitext
badfiles = set()
def set_badfiles():
global badfiles
bf = load("badfiles")
if bf != None:
badfiles = bf
class Library(collection.Collection):
def __init__(self):
collection.Collection.__init__(self, "library")
def scan(self, path):
print "Library scanning %s" % path
set_badfiles()
self.update(path)
self.save()
save(badfiles, "badfiles", "")
self.disp()
def update(self, path):
global badfiles
FileRef = libsaria.collection.FileRef
find_id = self.find_id
for root,dirs,files in walk(path):
stripped_root = root.strip(sep)
split_root = stripped_root.split(sep)
for file in files:
ext = splitext(file)[1]
if ext in badfiles:
continue
path = join(root, file)
if find_id(path) != None:
continue
try:
ref = FileRef(path)
except:
badfiles.add(ext)
continue
try:
self.insert_allocate(split_root + [file], ref)
except UnicodeEncodeError:
pass
class Playlist(collection.Collection):
def __init__(self):
collection.Collection.__init__(self, "playlist")
self.last_tracks = []
def next_id(self, last_id):
return_next = False
first = None
visible = self.is_visible
for id in self.walk_ids():
if visible(id):
if first == None:
first = id
if return_next == True:
return id
if id == last_id:
return_next = True
if first != None:
return first
return None
def random(self):
if self.size == 0:
return
getattr = libsaria.collection.get_attrs
last = self.last_tracks
for i in xrange(15):
id = self.get_rand_candidate()
artist = getattr(id, "artist")[0]
album = getattr(id, "album")[0]
title = getattr(id, "title")[0]
if (artist, title) in last:
print "Skipping %s by %s because it has played recently." % (title, artist)
continue
score = getattr(id, "score")[0]
if score < 0:
play_anyway = rand.randint(0, 100)
if play_anyway < ((20 * score) + 100):
print "Skipping %s by %s because I don't think you want to hear it." % (title, artist)
continue
last.append((artist, title))
if len(last) > 30:
last.pop(0)
if i > 0:
print "Picking a song took %s iterations" % i
return id
return id
def get_rand_candidate(self):
num = self.num_visible()
next_idx = rand.randint(0, num-1)
func = self.walk_filtered_ids
if self.filtered == False:
func = self.walk_ids
for n in func():
if next_idx == 0:
return n
next_idx -= 1
# We shouldn't ever get here, but for some reason we are.
# We return the last value of n, but I would like to figure
# Out why we leave the loop early eventually.
return n

View File

@ -28,7 +28,6 @@ for s in string.lowercase:
def reset():
from libsaria.trees import FSTree, DLFSTree, DLValTree
from tree import DLTree
from index import Index
global index
@ -46,7 +45,6 @@ def reset():
tracks = dict()
size = 0
visible = set()
#save()
def load():
global fs_tree
@ -54,15 +52,11 @@ def load():
global index
global tracks
global sources
#global size
#global songs
objects = libsaria.data.load("library", ".lib")
if objects == None or len(objects) != 5:
#if objects == None or len(objects) != 6:
reset()
return
(sources, tracks, fs_tree, tag_tree, index) = objects
#(fs_tree, tag_tree, index, tracks, next_id, size) = objects
libsaria.event.start("POSTLIBLOAD")
def save():

View File

@ -109,7 +109,6 @@ def rand_next():
def next():
if libsaria.prefs["random"] == True:
id = rand_next()
print id, library.get_attrs(id, "filepath")
else:
id = seq_next()
if id != None:

View File

@ -1,87 +0,0 @@
# Bryan Schumaker (8 / 12 / 2010)
classes = set([str, int, unicode])
class DLTree:
def __init__(self, parent=None):
self.parent = parent
self.child_fwd = dict()
self.child_bck = dict()
def disp(self, level=0):
space = " " * level
children = self.children
if children == None:
return
keys = children.keys()
keys.sort()
for key in keys:
if key.__class__ in classes:#== str or key.__class__ == int or key.__class__ == unicode:
#value = children[key]
yield key
#value.disp(level+1)
#if len(self.children) == 0:
# print self.get_path()
def walk_path(self, path):
if len(path) == 0:
return True
p = path[0]
if p not in self.child_fwd:
return False
child = self.child_fwd[p]
val = child.walk_path(path[1:])
if val == True:
return child.child_fwd.keys()
return val
def walk_backwards(self, child=None):
cmp = self.child_bck.get(child, None)
if self.parent == None:
return [cmp]
child = self
path = self.parent.walk_backwards(child)
if cmp != None:
path.append(cmp)
return path
def walk_forwards(self):
children = self.child_fwd
keys = children.keys()
keys.sort()
for key in keys:
child = children[key]
has_children = False
for result in child.walk_forwards():
has_children = True
res = [key]
if result != None:
res += result
yield res
# A leaf will have no children, but
# still needs to yield a value
if has_children == False:
yield [key]
def insert(self, path):
cmp = path[0]
child = None
try:
child = self.child_fwd[cmp]
except TypeError:
child = DLTree(self)
self.child_fwd[cmp] = child
self.child_bck[child] = cmp
except KeyError:
child = DLTree(self)
self.child_fwd[cmp] = child
self.child_bck[child] = cmp
if len(path) > 1:
return child.insert(path[1:])
return self