diff --git a/include/libsaria/library.h b/include/libsaria/library.h index 05ab83f0..04c382ed 100644 --- a/include/libsaria/library.h +++ b/include/libsaria/library.h @@ -26,7 +26,7 @@ namespace libsaria void add_path(string); void remove_path(string); void play_id(ino_t &); - void get_info(ino_t &, void(*)(Track &)); + bool get_info(ino_t &, void(*)(Track &)); void for_each(SourceModel *); void for_each_path(void (*)(struct PathInfo &)); diff --git a/libsaria/current.cpp b/libsaria/current.cpp index 27a13efb..b69b7d8d 100644 --- a/libsaria/current.cpp +++ b/libsaria/current.cpp @@ -18,12 +18,18 @@ namespace libsaria void current_track(void (*func)(Track &)) { ino_t inode; + if (current_inode(inode) < 0) { Track blank; func(blank); return; } - library::get_info(inode, func); + + if (!library::get_info(inode, func)) { + TrackTag tag(libsaria::audio::get_current_file()); + Track track(inode, &tag); + func(track); + } } }; diff --git a/libsaria/library/library.cpp b/libsaria/library/library.cpp index 017c03cf..354469e8 100644 --- a/libsaria/library/library.cpp +++ b/libsaria/library/library.cpp @@ -98,13 +98,17 @@ namespace libsaria } } - void library::get_info(ino_t &id, void (*func)(Track &)) + bool library::get_info(ino_t &id, void (*func)(Track &)) { + bool found = false; map::iterator it; for (it = path_map.begin(); it != path_map.end(); it++) { - if (it->second.get_info_id(id, func) == true) + if (it->second.get_info_id(id, func) == true) { + found = true; break; + } } + return found; } unsigned int library::size()