diff --git a/libsaria/callbacks.py b/libsaria/callbacks.py index 5637466d..2960b878 100644 --- a/libsaria/callbacks.py +++ b/libsaria/callbacks.py @@ -15,7 +15,8 @@ def pause(): on_load = null_cb def load_file(file): - on_load(file) + attrs = libsaria.sources.all_attrs() + on_load(file, attrs) on_like = null_cb def like_song(like): diff --git a/libsaria/sources/__init__.py b/libsaria/sources/__init__.py index 5f1593a4..644bb10f 100644 --- a/libsaria/sources/__init__.py +++ b/libsaria/sources/__init__.py @@ -36,6 +36,16 @@ def find_attrs(file, *attr_list): res.append(get(attr)) return res +def find_all_attrs(file, attrs): + if file == None: + return False + track = library.track.Track(file) + if track == None: + return False + id = library.update.song_id(file) + attrs.update(track.__dict__) + attrs["id"] = id + # Function pointer to avoid unnecessary lookups for a common function get_attrs_id = library.get_attrs @@ -53,6 +63,21 @@ def get_attrs(*attrs): res = [None] * len(attrs) return res +def all_attrs(): + global cur_id + res = {} + found = True + if cur_id: + found = library.all_attrs(cur_id, res) + if found == False: + cur_id = None + file = libsaria.audio.get_cur_file() + found = find_all_attrs(file, res) + if found != False: + res["like"] = attrs.get_like("like") + res["count"] = attrs.get_count("count") + return res + def filter(text): visible = library.filter(text) playlist.set_visible(visible) diff --git a/libsaria/sources/attrs.py b/libsaria/sources/attrs.py index 31752748..f53a3e30 100644 --- a/libsaria/sources/attrs.py +++ b/libsaria/sources/attrs.py @@ -36,6 +36,9 @@ def set_dattr(id, attribute, value): save_dattrs() unlock_dattrs() +def get_like(id): + return get_dattr(id, "like") + def get_count(id): count = get_dattr(id, "count") if count != None: diff --git a/libsaria/sources/library/__init__.py b/libsaria/sources/library/__init__.py index a6dbf0d4..307ad8ab 100644 --- a/libsaria/sources/library/__init__.py +++ b/libsaria/sources/library/__init__.py @@ -9,6 +9,7 @@ import index # Function pointers for conveniance add_path = library.add_path get_attrs = library.get_attrs +all_attrs = library.all_attrs list_ids = tree.list_ids filter = index.filter is_visible = index.is_visible diff --git a/libsaria/sources/library/library.py b/libsaria/sources/library/library.py index af734559..054a7b18 100644 --- a/libsaria/sources/library/library.py +++ b/libsaria/sources/library/library.py @@ -74,3 +74,13 @@ def get_attrs(id, *attrs): unlock_library() return res +def all_attrs(id, attrs): + lock_library() + found = False + track = find_id(id) + if track != None: + attrs.update(track.__dict__) + attrs["id"] = id + found = True + unlock_library() + return found diff --git a/ocarina/callbacks.py b/ocarina/callbacks.py index 0c1c3212..35b9ad8e 100644 --- a/ocarina/callbacks.py +++ b/ocarina/callbacks.py @@ -16,7 +16,7 @@ def on_pause(): footer.on_pause() callbacks.on_pause = on_pause -def on_load(file): +def on_load(file, attrs): footer.on_load() queue.refresh() body.cur_page_goto()