diff --git a/design/library.txt b/design/library.txt index 529de853..65baa019 100644 --- a/design/library.txt +++ b/design/library.txt @@ -179,6 +179,10 @@ Library: (lib/library.cpp) Update all library paths. Trigger the on_library_update() callback for each path. + void library :: set_enabled(unsigned int id, bool enabled); + Either enable or disable a library path. Trigger + on_library_track_del() for each track disabled this way. + struct Song library :: lookup(track_id); Fill out a Song structure for the provided track_id. Throw -EEXIST if there is no track mapping to track_id. diff --git a/include/library.h b/include/library.h index 4a26f3c8..f6132ff0 100644 --- a/include/library.h +++ b/include/library.h @@ -121,6 +121,7 @@ namespace library void del_path(unsigned int); void update_path(unsigned int); void update_all(); + void set_enabled(unsigned int, bool); void lookup(unsigned int, library :: Song *); Library *lookup_path(unsigned int); void import(); diff --git a/lib/library.cpp b/lib/library.cpp index 682213c5..3eeffa6f 100644 --- a/lib/library.cpp +++ b/lib/library.cpp @@ -510,6 +510,23 @@ void library :: update_all() update_path(i); } +void library :: set_enabled(unsigned int id, bool enabled) +{ + unsigned int t; + + library_db[id].enabled = enabled; + library_db.save(); + + for (t = track_db.first(); t < track_db.num_rows(); t = track_db.next(t)) { + if (track_db[t].library_id == id) { + if (enabled) + get_callbacks()->on_library_track_add(t); + else + get_callbacks()->on_library_track_del(t); + } + } +} + void library :: lookup(unsigned int id, library :: Song *song) { if (id >= track_db.num_rows()) diff --git a/tests/deck/deck.cpp b/tests/deck/deck.cpp index fd2d650d..8ecd8610 100644 --- a/tests/deck/deck.cpp +++ b/tests/deck/deck.cpp @@ -133,6 +133,15 @@ int main(int argc, char **argv) test_4(); test_5(); + print("Disabling library path\n"); + library :: set_enabled(0, false); + print("Library size: %u\n", deck :: get_library_pq()->size()); + + print("Enabling library path\n"); + library :: set_enabled(0, true); + print("Library size: %u\n", deck :: get_library_pq()->size()); + + print("Deleting library path\n"); library :: del_path(0); while (idle :: run_task()); print("Library size: %u\n", deck :: get_library_pq()->size()); diff --git a/tests/deck/deck.good b/tests/deck/deck.good index 90cc900d..f57d826e 100644 --- a/tests/deck/deck.good +++ b/tests/deck/deck.good @@ -125,4 +125,9 @@ Reading back playqueue deck deck[0] = Playqueue { size = 16, flags = 0 } deck[1] = Playqueue { size = 19, flags = 1 } deck[2] = Playqueue { size = 15, flags = 3 } +Disabling library path +Library size: 0 +Enabling library path +Library size: 150 +Deleting library path Library size: 0 diff --git a/tests/library/library.cpp b/tests/library/library.cpp index f41f015a..17e7ff2e 100644 --- a/tests/library/library.cpp +++ b/tests/library/library.cpp @@ -262,6 +262,24 @@ void test_7() library :: import(); run_idle_tasks(); library :: print_db(library :: DB_LIBRARY); + print("\n"); +} + +/* Test disabling libraries */ +void test_8() +{ + library :: reset(); + + test_add_dir("8a", "/tmp/library/0", true); + print("\n"); + library :: set_enabled(0, false); + library :: print_db(library :: DB_LIBRARY); + library :: set_enabled(0, true); + library :: print_db(library :: DB_LIBRARY); + library :: set_enabled(0, false); + library :: print_db(library :: DB_LIBRARY); + library :: set_enabled(0, true); + library :: print_db(library :: DB_LIBRARY); } @@ -282,5 +300,6 @@ int main(int argc, char **argv) test_5(); test_6(); test_7(); + test_8(); return 0; } diff --git a/tests/library/library.good b/tests/library/library.good index e2a8952d..4bf0b267 100644 --- a/tests/library/library.good +++ b/tests/library/library.good @@ -2668,3 +2668,37 @@ Valid rows: 3 db[0] = /tmp/library/2 (enabled), size = 150 db[1] = /tmp/library/3 (enabled), size = 150 db[2] = /tmp/library/4 (enabled), size = 150 + +Test 8a: Added library 0: /tmp/library/0 +PASSED +Updated library 0: /tmp/library/0 (size: 10) +Updated library 0: /tmp/library/0 (size: 20) +Updated library 0: /tmp/library/0 (size: 30) +Updated library 0: /tmp/library/0 (size: 40) +Updated library 0: /tmp/library/0 (size: 50) +Updated library 0: /tmp/library/0 (size: 60) +Updated library 0: /tmp/library/0 (size: 70) +Updated library 0: /tmp/library/0 (size: 80) +Updated library 0: /tmp/library/0 (size: 90) +Updated library 0: /tmp/library/0 (size: 100) +Updated library 0: /tmp/library/0 (size: 110) +Updated library 0: /tmp/library/0 (size: 120) +Updated library 0: /tmp/library/0 (size: 130) +Updated library 0: /tmp/library/0 (size: 140) +Updated library 0: /tmp/library/0 (size: 150) +Allocated rows: 1 +Valid rows: 1 +db[0] = /tmp/library/0 (enabled), size = 150 + +Allocated rows: 1 +Valid rows: 1 +db[0] = /tmp/library/0 (disabled), size = 150 +Allocated rows: 1 +Valid rows: 1 +db[0] = /tmp/library/0 (enabled), size = 150 +Allocated rows: 1 +Valid rows: 1 +db[0] = /tmp/library/0 (disabled), size = 150 +Allocated rows: 1 +Valid rows: 1 +db[0] = /tmp/library/0 (enabled), size = 150