From 6398b3dd9abc1ae9780090e698b516a42d3eaecb Mon Sep 17 00:00:00 2001 From: Bryan Schumaker Date: Thu, 26 May 2011 09:18:43 -0400 Subject: [PATCH] libsaria: Find attributes for songs not in library I use the same Track() class that the library does. I have to create an instance of this class each time the function is called, but this is ok since it is not the case I am trying to optimize for. --- libsaria/audio/__init__.py | 6 +++ libsaria/audio/pipeline.py | 3 ++ libsaria/path/files.py | 3 +- libsaria/sources/__init__.py | 25 ++++++++++- libsaria/sources/file.py | 87 ------------------------------------ 5 files changed, 33 insertions(+), 91 deletions(-) delete mode 100644 libsaria/sources/file.py diff --git a/libsaria/audio/__init__.py b/libsaria/audio/__init__.py index a895aeeb..8050f4c3 100644 --- a/libsaria/audio/__init__.py +++ b/libsaria/audio/__init__.py @@ -24,6 +24,12 @@ def load_file(file): unlock_audio() callbacks.load_file(file) +def get_cur_file(): + lock_audio() + file = pipeline.get_cur_file() + unlock_audio() + return file + def get_state(): lock_audio() state = pipeline.get_state() diff --git a/libsaria/audio/pipeline.py b/libsaria/audio/pipeline.py index 66a6c5d4..5b8b3790 100644 --- a/libsaria/audio/pipeline.py +++ b/libsaria/audio/pipeline.py @@ -23,6 +23,9 @@ def load_file(type, file): cur_file = file player.set_property("uri", "%s://%s" % (type, file)) +def get_cur_file(): + return cur_file + def has_file(): return cur_file != None diff --git a/libsaria/path/files.py b/libsaria/path/files.py index b4cdc827..e395cb7e 100644 --- a/libsaria/path/files.py +++ b/libsaria/path/files.py @@ -24,8 +24,7 @@ def open_xml(file): def open_music(file): try: - from libsaria.sources import file as file_source - file_source.load_file(file) + libsaria.controls.load(file) except Exception, e: print e diff --git a/libsaria/sources/__init__.py b/libsaria/sources/__init__.py index eba5b14a..3b27f507 100644 --- a/libsaria/sources/__init__.py +++ b/libsaria/sources/__init__.py @@ -37,14 +37,35 @@ def inc_count(): # This will eventually increment a play count... pass +def find_attrs(file, *attrs): + if file == None: + return + track = library.track.Track(file) + if track == None: + return + get = track.__dict__.get + res = [] + for attr in attrs: + if attr == "id": + res.append(library.update.song_id(file)) + else: + res.append(get(attr)) + return res + # Function pointer to avoid unnecessary lookups for a common function get_attrs_id = library.get_attrs def get_attrs(*attrs): # I should probably get a lock here... + res = None if cur_id: - return get_attrs_id(cur_id, *attrs) - return -1 + res = get_attrs_id(cur_id, *attrs) + if res == None: + file = libsaria.audio.get_cur_file() + res = find_attrs(file, *attrs) + if res == None: + res = [None] * len(attrs) + return res def filter(text): visible = library.filter(text) diff --git a/libsaria/sources/file.py b/libsaria/sources/file.py deleted file mode 100644 index 569aeb2a..00000000 --- a/libsaria/sources/file.py +++ /dev/null @@ -1,87 +0,0 @@ -# Bryan Schumaker (12/7/2010) - -import datetime -import libsaria -path = libsaria.path -tagpy = None - -timedelta = datetime.timedelta - -source = None -cur_file = None -file_ref = None -tags = None -audio = None - -def init(): - global source - global tagpy - - import tagpy - - source = libsaria.sources.Source() - source.get_attrs = get_attrs - source.set_attr = set_attr - source.get_cur_id = get_cur_file - source.save = save - - load_file = source.load_file - print load_file - -def load_file(file): - global file_ref - global tags - global audio - global cur_file - file_ref = tagpy.FileRef(file) - tags = file_ref.tag() - audio = file_ref.audioProperties() - cur_file = file - source.load_file(file) - -def get_cur_file(): - return cur_file - -def get_attrs(file, *attrs): - print "Getting attributes for: %s" % file - #print " Requested attributes: %s" % attrs - - res = [] - id = libsaria.path.file_id(file) - seconds = audio.length - for attr in attrs: - if attr == "id": - res += [id] - elif attr == "filepath": - res += [file] - elif attr == "art": - from libsaria import lastfm - res += [id] - elif attr == "artist": - res += [tags.artist] - elif attr == "album": - res += [tags.album] - elif attr == "title": - res += [tags.title] - elif attr == "year": - res += [tags.year] - elif attr == "seconds": - res += [seconds] - elif attr == "lenstr": - lenstr = "%s" % timedelta(seconds=seconds) - if lenstr[0] == "0" and lenstr[1] == ":": - lenstr = lenstr[2:] - res += [lenstr] - else: - return "???" - if len(res) == 1: - return res[0] - return res - -def set_attr(*args): - pass - -def save(): - pass - -init()