diff --git a/libsaria/__init__.py b/libsaria/__init__.py index bdfa1ad6..694cdb1f 100644 --- a/libsaria/__init__.py +++ b/libsaria/__init__.py @@ -1,6 +1,6 @@ # Bryan Schumaker (8/7/2010) -__all__ = [ "collection", "audio", +__all__ = [ "audio", "sources", "data", "event", "map", "path", "plugin"] __major__ = 1 diff --git a/libsaria/backup.py b/libsaria/backup.py index 516f5658..f784ae8a 100644 --- a/libsaria/backup.py +++ b/libsaria/backup.py @@ -1,7 +1,7 @@ # Bryan Schumaker (11/12/2010) from libsaria import path -from libsaria.collection import library +from libsaria.sources import library import xm as xml add_child = xml.add_child diff --git a/libsaria/collection/__init__.py b/libsaria/collection/__init__.py deleted file mode 100644 index f1f621d7..00000000 --- a/libsaria/collection/__init__.py +++ /dev/null @@ -1,63 +0,0 @@ -# Bryan Schumaker (8/8/2010) - -__all__ = ["collection"] - -import libsaria -import tagpy -call = libsaria.event.call -exists = libsaria.path.exists -expand = libsaria.path.expand -FileRef = tagpy.FileRef - -import library -import playlist - -file_to_id = library.file_to_id -play_id = library.play_id -get_attrs = library.get_attrs -reset = library.reset -inc_score = library.inc_score -inc_count = library.inc_count - -def init(): - libsaria.init_pref("random", False) -libsaria.event.invite("POSTINIT", init) - -def toggle_rand(): - libsaria.prefs["random"] = not libsaria.prefs["random"] - -cur_lib_id = -1 - -def new_source(path, bg=True): - global library - path = expand(path) - if not exists(path): - return 0 - return call("NEWSOURCE", library.scan, path) - -def lib_get_cur_id(): - global cur_lib_id - return cur_lib_id - -def plist_refresh(): - return call("PLISTREFRESH") - -def change_score(): - prcnt = libsaria.audio.get_progress() - if prcnt > 0.75: - inc_count(cur_lib_id) - inc_score(cur_lib_id) - if prcnt < 0.33: - inc_score(cur_lib_id, -1) - -def plist_next(): - change_score() - playlist.next() - -def catch_eos(*args): - inc_count(cur_lib_id) - inc_score(cur_lib_id) - playlist.next() -libsaria.event.invite("POSTEOS", catch_eos) - - diff --git a/libsaria/collection/index.py b/libsaria/collection/index.py deleted file mode 100644 index e0307149..00000000 --- a/libsaria/collection/index.py +++ /dev/null @@ -1,70 +0,0 @@ -# Bryan Schumaker (8/10/2010) - -import re - -translate = unicode.translate -split = unicode.split -space_ord = ord(" ") -stripc = u"\"#$%&'*+<=>@[]^`{|}~.?!" -splitc = u"-\/,:;()_~+" - -ttable = None - -def format_once(text): - import string - global ttable - upper = string.uppercase - lower = string.lowercase - - ttable = dict((ord(c),None) for c in stripc) - splitt = dict((ord(c),space_ord) for c in splitc) - lowert = dict((ord(c),ord(lower[i])) for i,c in enumerate(upper)) - for t in (splitt, lowert): - for c in t: - ttable[c] = t[c] - format = format_rest - return format_rest(text) -def format_rest(text): - return text.translate(ttable).split() -format = format_once - - -class Index(dict): - def __init__(self): - dict.__init__(self) - - def insert(self, id, tags): - get = self.get - for tag in tags: - for word in format(tag): - ids = get(word, None) - if ids == None: - self[word] = set([id]) - else: - ids.add(id) - - def filter(self, text): - text = unicode(text) - terms = format(text) - results = dict() - - search = re.search - get = self.get - - for t in terms: - results[t] = set() - - for key in self.keys(): - for term in terms: - if search(term, key): - results[term].update(get(key)) - - visible = set() - for i,t in enumerate(terms): - if i == 0: - visible.update(results[t]) - else: - visible.intersection_update(results[t]) - return visible - - diff --git a/libsaria/collection/library.py b/libsaria/collection/library.py deleted file mode 100644 index fcf6f69d..00000000 --- a/libsaria/collection/library.py +++ /dev/null @@ -1,195 +0,0 @@ -# Bryan Schumaker (11/05/2010) - -import os -import tagpy -import libsaria -import string -from track import Track -splitext = libsaria.path.splitext - -fs_tree = None -tag_tree = None -index = None -tracks = None -sources = None -size = None -visible = None - -FileRef = tagpy.FileRef - -filtered = False -badfiles = set() - -ttable = dict() -for s in string.punctuation: - ttable[ord(s)] = u"" -for s in string.lowercase: - ttable[ord(s)] = ord(s) - 32 - -def reset(): - from libsaria.trees import FSTree, DLFSTree, DLValTree - from index import Index - - global index - global tracks - global fs_tree - global tag_tree - global sources - global visible - - sources = FSTree() - - fs_tree = DLFSTree() - tag_tree = DLValTree() - index = Index() - tracks = dict() - size = 0 - visible = set() - -def load(): - global fs_tree - global tag_tree - global index - global tracks - global sources - objects = libsaria.data.load("library", ".lib") - if objects == None or len(objects) != 5: - reset() - return - (sources, tracks, fs_tree, tag_tree, index) = objects - libsaria.event.start("POSTLIBLOAD") - -def save(): - global sources - libsaria.data.save( (sources, tracks, fs_tree, tag_tree, index), - "library", ".lib") - -def walk(): - for tag in tag_tree.walk(): - yield tag[3] - -def file_to_id(file): - return os.stat(file).st_ino - -def get_attrs(id, *attrs): - res = [] - rec = tracks.get(id, None) - if rec == None: - return [0] * len(attrs) - - get = rec.__dict__.get - tags = rec.tags.walk_vals_backwards() - for attr in attrs: - if attr == "id": - res += [id] - elif attr == "filepath": - res += [rec.fs.walk_path_backwards()] - elif attr == "art": - from libsaria import lastfm - res += [lastfm.get_artwork_id(id)] - elif attr == "artist": - res += [tags[0]] - elif attr == "album": - res += [tags[1]] - elif attr == "title": - res += [tags[2]] - else: - res += [get(attr, None)] - return res - -def inc_score(id, amount=1): - rec = tracks.get(id, None) - if rec: - rec.score += amount - save() - -def inc_count(id): - rec = tracks.get(id, None) - if rec: - rec.count += 1 - save() - -def play_id(id): - libsaria.collection.cur_lib_id = id - libsaria.audio.load(get_attrs(id, "filepath")[0]) - libsaria.audio.play() - -def filter(text): - global visible - global index - global filtered - - if len(text) > 0: - visible = index.filter(text) - filtered = True - else: - visible = None - filtered = False - -def test_filter(text): - return index.filter(text) - -def is_visible(id): - global filtered - global visible - if filtered == False: - return True - else: - return id in visible - -def add_source(path): - global sources - sources.insert_path(path) - -def scan(path): - add_source(path) - update() - save() - -def insert_track(path, ref): - global tracks - global ttable - global fs_tree - global tag_tree - global index - tags = ref.tag() - audio = ref.audioProperties() - ino = os.stat(path).st_ino - track = Track(tags, audio) - artist = tags.artist or u"Unknown Artist" - album = tags.album or u"Unknown Album" - title = tags.title or u"Unknown Title" - fs = fs_tree.insert_path(path) - tag = tag_tree.insert( [artist.translate(ttable), - album.translate(ttable), - title.translate(ttable), ino], - [artist, album, title, ino] - ) - - index.insert(ino, (artist, album, title)) - track.fs = fs - track.tags = tag - tracks[ino] = track - -def update_path(path): - global badfiles - tree = libsaria.path.make_tree(path) - for path in tree.walk_paths(): - ext = splitext(path)[1] - if ext in badfiles: - continue - try: - ref = FileRef(path) - except: - badfiles.add(ext) - continue - try: - insert_track(path, ref) - except Exception, e: - print e - -def update(): - global sources - sep = libsaria.path.sep - for path in sources.walk_paths(): - update_path(path) diff --git a/libsaria/collection/playlist.py b/libsaria/collection/playlist.py deleted file mode 100644 index 97630216..00000000 --- a/libsaria/collection/playlist.py +++ /dev/null @@ -1,115 +0,0 @@ -# Bryan Schumaker (11/07/2010) - -import random as rand - -import libsaria -from libsaria.collection import library -call = libsaria.event.call - -song_list = None -song_set = None - -filtered = False -visible = None -recent = [] -recent_msg = "Skipping %s by %s because it has played recently" -skip_msg = "Skipping %s by %s because I don't think you like it" -cur_index = -1 - -def add_id(id): - global song_list - global song_set - song_list.append(id) - song_set.add(id) - -def reset(): - global song_list - global song_set - song_list = [] - song_set = set() - -def load(): - global song_list - global song_set - global visible - song_list = libsaria.data.load("playlist", ".list") - if song_list == None: - reset() - return - song_set = set(song_list) - -def save(): - libsaria.data.save(song_list, "playlist", ".list") - -def walk(): - global song_list - for id in song_list: - yield id - -def filter(text): - global visible - global song_set - global filtered - if len(text) > 0: - visible = song_set.intersection(library.test_filter(text)) - filtered = True - else: - visible = song_set - filtered = False - -def is_visible(id): - global visible - global filtered - if filtered == True: - return id in visible - return True - -def num_visible(): - if filtered == True: - return len(visible) - return len(song_list) - -def seq_next(): - global cur_index - global song_list - cur_index += 1 - while is_visible(song_list[cur_index]) == False: - cur_index += 1 - return song_list[cur_index] - -def rand_candidate(max): - index = rand.randint(0, max-1) - if filtered == False: - return song_list[index] - return list(visible)[index] - -def rand_next(): - n = num_visible() - if n == 0: - return - get_attrs = library.get_attrs - for i in xrange(15): - id = rand_candidate(n) - (artist, title, score) = get_attrs(id, "artist", "title", "score") - if (artist, title) in recent: - print recent_msg % (artist, title) - continue - if score < 0: - do_play = rand.randint(0, 100) - if do_play < ((20 * score) + 100): - print skip_msg % (artist, title) - continue - recent.append((artist, title)) - if len(recent) > 50: - recent.pop(0) - if i > 0: - print "Picking a song took %s iterations" % i - return id - -def next(): - if libsaria.prefs["random"] == True: - id = rand_next() - else: - id = seq_next() - if id != None: - return call("NEXT", library.play_id, id) diff --git a/libsaria/collection/table.py b/libsaria/collection/table.py deleted file mode 100644 index 1a2ff56b..00000000 --- a/libsaria/collection/table.py +++ /dev/null @@ -1,13 +0,0 @@ -# Bryan Schumaker (8/8/2010) - -class Table(dict): - def __init__(self): - dict.__init__(self) - self.next_id = 0 - - - def insert(self, tags): - id = self.next_id - self[id] = tags - self.next_id += 1 - return id diff --git a/libsaria/collection/track.py b/libsaria/collection/track.py deleted file mode 100644 index f3de3970..00000000 --- a/libsaria/collection/track.py +++ /dev/null @@ -1,24 +0,0 @@ -# Bryan Schumaker (11/09/2010) - -import datetime -timedelta = datetime.timedelta - -class Track: - def __init__(self, tags, audio): - self.score = 0 - self.count = 0 - self.genre = tags.genre or u"Unknown Genre" - self.track = tags.track - self.year = tags.year - self.rate = audio.bitrate - self.channel = audio.channels - self.seconds = audio.length - self.sample = audio.sampleRate - lenstr = "%s" % timedelta(seconds=self.seconds) - if lenstr[0] == "0" and lenstr[1] == ":": - self.lenstr = lenstr[2:] - else: - self.lenstr = lenstr - - self.fs = None - self.tags = None diff --git a/libsaria/data.py b/libsaria/data.py index db98ece6..6bb3bb92 100644 --- a/libsaria/data.py +++ b/libsaria/data.py @@ -44,7 +44,7 @@ def universal_open(file): file = file.replace("%20", " ") file = file.replace("%22", "\"") if path.is_dir(file): - libsaria.collection.new_source(file) + libsaria.sources.new_source(file) return split = path.splitext(file) ext = split[1] @@ -55,9 +55,9 @@ def universal_open(file): plugin.install(file) return try: - id = libsaria.collection.file_to_id(file) + id = libsaria.sources.file_to_id(file) if id: - libsaria.collection.play_id(id) + libsaria.sources.play_id(id) else: libsaria.audio.load(file) except Exception,e: diff --git a/libsaria/lastfm.py b/libsaria/lastfm.py index 7a19bf77..a1be010c 100644 --- a/libsaria/lastfm.py +++ b/libsaria/lastfm.py @@ -4,7 +4,7 @@ import libsaria import web import xm -file_to_id = libsaria.collection.file_to_id +file_to_id = libsaria.sources.file_to_id cache = libsaria.cache pref_attr = xm.find_preferred_attribute @@ -62,7 +62,7 @@ def lfm_cache_album(file, artist, album): return False def get_artwork_id(id): - artist, album = libsaria.collection.get_attrs(id, "artist", "album") + artist, album = libsaria.sources.get_attrs(id, "artist", "album") cached = cache[artist] file = cached.get("%s.jpg" % album, lfm_cache_album, artist, album) return file diff --git a/ocarina/button.py b/ocarina/button.py index 091f7c27..7b8ae44e 100644 --- a/ocarina/button.py +++ b/ocarina/button.py @@ -72,7 +72,7 @@ class NextButton(Button): def __init__(self): Button.__init__(self, gtk.STOCK_MEDIA_NEXT) def clicked(self, button): - LS.collection.plist_next() + LS.sources.plist_next() class ForwardButton(Button): @@ -121,7 +121,7 @@ class RandomButton(gtk.ToggleButton): self.show() def toggle(self, button): - LS.collection.toggle_rand() + LS.sources.toggle_rand() class UpButton(Button): diff --git a/ocarina/collection.py b/ocarina/collection.py index f2452f09..24b6f49c 100644 --- a/ocarina/collection.py +++ b/ocarina/collection.py @@ -5,9 +5,9 @@ import list import menu libsaria = ocarina.libsaria -from libsaria import collection -library = collection.library -playlist = collection.playlist +from libsaria import sources +library = sources.library +playlist = sources.playlist event = ocarina.libsaria.event gtk = ocarina.gtk @@ -46,7 +46,7 @@ class Collection(gtk.ScrolledWindow): def add_selected_to_playlist(self, *args): self.list.for_each_selected(playlist.add_id) playlist.save() - collection.plist_refresh() + sources.plist_refresh() class Library(Collection): @@ -76,13 +76,13 @@ class Library(Collection): #self.populate() def reset(self): - collection.reset() + sources.reset() self.clear() def select_row(self, row): - collection.change_score() - collection.play_id(row[0]) - collection.inc_score(row[0], 1) + sources.change_score() + sources.play_id(row[0]) + sources.inc_score(row[0], 1) def filter(self, text): library.filter(text) @@ -122,9 +122,9 @@ class Playlist(Collection): #print "Populating took: %s" % (after - before) def select_row(self, row): - collection.change_score() - collection.play_id(row[0]) - collection.inc_score(row[0], 1) + sources.change_score() + sources.play_id(row[0]) + sources.inc_score(row[0], 1) def filter(self, text): playlist.filter(text) diff --git a/ocarina/info.py b/ocarina/info.py index 4199e1cf..2a56c2ec 100644 --- a/ocarina/info.py +++ b/ocarina/info.py @@ -10,9 +10,9 @@ pbar = None label = None image = None -lib_get_cur_id = libsaria.collection.lib_get_cur_id -get_attrs = libsaria.collection.get_attrs -file_to_id = libsaria.collection.file_to_id +lib_get_cur_id = libsaria.sources.lib_get_cur_id +get_attrs = libsaria.sources.get_attrs +file_to_id = libsaria.sources.file_to_id filter = None info = None diff --git a/ocarina/label.py b/ocarina/label.py index 2256293c..bd270245 100644 --- a/ocarina/label.py +++ b/ocarina/label.py @@ -18,8 +18,8 @@ def set_fns(): global file_to_id #update = ocarina.libsaria.audio.get_progress get_time = ocarina.libsaria.audio.get_time - get_attrs = libsaria.collection.get_attrs - file_to_id = libsaria.collection.file_to_id + get_attrs = libsaria.sources.get_attrs + file_to_id = libsaria.sources.file_to_id invite("POSTSTART", set_fns) diff --git a/ocarina/list.py b/ocarina/list.py index 61fbf9f8..d99a2c7a 100644 --- a/ocarina/list.py +++ b/ocarina/list.py @@ -6,7 +6,7 @@ libsaria = ocarina.libsaria gtk = ocarina.gtk gobject = ocarina.gobject -from libsaria.collection import library +from libsaria.sources import library get_attrs = library.get_attrs #UNI = gobject.TYPE_UNICHAR diff --git a/plugins/remote.py b/plugins/remote.py index 75008e31..335a6b7c 100644 --- a/plugins/remote.py +++ b/plugins/remote.py @@ -9,7 +9,7 @@ server = None def play_id(arg): id = int(arg[0]) print "Trying to play id: %s" % id - libsaria.collection.library.play_id(id) + libsaria.sources.library.play_id(id) def play(*args): libsaria.audio.play() @@ -21,8 +21,8 @@ def stop(*args): libsaria.audio.stop() def next(*args): - print libsaria.collection - libsaria.collection.plist_next() + print libsaria.sources + libsaria.sources.plist_next() procs = {"play_id":play_id, "play":play, "pause":pause, "stop":stop, "next":next} diff --git a/plugins/wm_tweaks.py b/plugins/wm_tweaks.py index 7691236f..5382088c 100644 --- a/plugins/wm_tweaks.py +++ b/plugins/wm_tweaks.py @@ -3,8 +3,8 @@ import ocarina gdk = ocarina.gdk libsaria = ocarina.libsaria -file_to_id = libsaria.collection.file_to_id -get_attrs = libsaria.collection.get_attrs +file_to_id = libsaria.sources.file_to_id +get_attrs = libsaria.sources.get_attrs invite = libsaria.event.invite diff --git a/remote/__init__.py b/remote/__init__.py index f5f537a3..8a6e5c72 100644 --- a/remote/__init__.py +++ b/remote/__init__.py @@ -7,7 +7,8 @@ win = None def send(text): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect( ("localhost", 4242) ) + #s.connect( ("localhost", 4242) ) + s.connect( ("192.168.1.100", 4242) ) total_sent = 0 length = len(text) while total_sent < length: diff --git a/remote/gui/buttons.py b/remote/gui/buttons.py index cab304d3..14d343c2 100644 --- a/remote/gui/buttons.py +++ b/remote/gui/buttons.py @@ -16,7 +16,7 @@ def set_state_paused(): from remote import procs class Button(gtk.Button): - def __init__(self, stock, size=gtk.ICON_SIZE_DIALOG, func=None, show=True): + def __init__(self, stock, size=gtk.ICON_SIZE_LARGE_TOOLBAR, func=None, show=True): gtk.Button.__init__(self) self.func = func img = gtk.image_new_from_stock(stock, size) diff --git a/tests/backup.py b/tests/backup.py index 0363c795..fa48b8c9 100644 --- a/tests/backup.py +++ b/tests/backup.py @@ -2,9 +2,9 @@ import libsaria from libsaria import data -from libsaria import collection +from libsaria import sources from libsaria import backup -library = libsaria.collection.library +library = libsaria.sources.library library.load() backup.backup() diff --git a/tests/collection.py b/tests/collection.py index a4590210..75e8d1bb 100644 --- a/tests/collection.py +++ b/tests/collection.py @@ -1,6 +1,6 @@ # Bryan Schumaker (8/8/2010) -from libsaria import collection +from libsaria import sources #src = "~/Music" #src = "~/Music/Foo Fighters" @@ -8,5 +8,5 @@ from libsaria import collection src = "/media/Music" -collection.new_source(src, bg=False) +sources.new_source(src, bg=False) #print collection.source.index diff --git a/tests/dl_tree.py b/tests/dl_tree.py index 57448fe6..7d89f6d0 100644 --- a/tests/dl_tree.py +++ b/tests/dl_tree.py @@ -1,10 +1,10 @@ # Bryan Schumaker (10/1/2010) -from libsaria import collection +from libsaria import sources -#collection.new_source("~/Desktop") -collection.new_source("~/Music/") -#collection.new_source("/media/Music") -print collection.library.size +#sources.new_source("~/Desktop") +sources.new_source("~/Music/") +#sources.new_source("/media/Music") +print sources.library.size diff --git a/tests/treewalk.py b/tests/treewalk.py index 99ec5359..2cab420f 100644 --- a/tests/treewalk.py +++ b/tests/treewalk.py @@ -1,12 +1,12 @@ # Bryan Schumaker (8/17/2010) -from libsaria import collection +from libsaria import sources count = 0 list = [] append = list.append -for track in collection.walk_library(): +for track in sources.walk_library(): get = track.__getitem__ append([get("id"), get("title"), get("length"), get("artist"),