summaryrefslogtreecommitdiff
path: root/src/tangara/lua/lua_queue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tangara/lua/lua_queue.cpp')
-rw-r--r--src/tangara/lua/lua_queue.cpp30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/tangara/lua/lua_queue.cpp b/src/tangara/lua/lua_queue.cpp
index bc393aa5..7eb32c62 100644
--- a/src/tangara/lua/lua_queue.cpp
+++ b/src/tangara/lua/lua_queue.cpp
@@ -4,6 +4,7 @@
* SPDX-License-Identifier: GPL-3.0-only
*/
+#include "audio/audio_events.hpp"
#include "lua/lua_database.hpp"
#include <memory>
@@ -39,6 +40,14 @@ static auto queue_add(lua_State* state) -> int {
audio::TrackQueue& queue = instance->services().track_queue();
queue.append(id);
});
+ } else if (lua_isstring(state, 1)) {
+ size_t len;
+ const char* str = luaL_checklstring(state, 1, &len);
+ std::string path{str, len};
+ instance->services().bg_worker().Dispatch<void>([=]() {
+ audio::TrackQueue& queue = instance->services().track_queue();
+ queue.append(path);
+ });
} else {
database::Iterator* it = db_check_iterator(state, 1);
instance->services().bg_worker().Dispatch<void>([=]() {
@@ -57,9 +66,24 @@ static auto queue_clear(lua_State* state) -> int {
return 0;
}
-static const struct luaL_Reg kQueueFuncs[] = {{"add", queue_add},
- {"clear", queue_clear},
- {NULL, NULL}};
+static auto queue_open_playlist(lua_State* state) -> int {
+ Bridge* instance = Bridge::Get(state);
+ audio::TrackQueue& queue = instance->services().track_queue();
+ size_t len = 0;
+ const char* str = luaL_checklstring(state, 1, &len);
+ if (!str) {
+ return 0;
+ }
+ queue.clear();
+ queue.openPlaylist(str);
+ return 0;
+}
+
+static const struct luaL_Reg kQueueFuncs[] = {
+ {"add", queue_add},
+ {"clear", queue_clear},
+ {"open_playlist", queue_open_playlist},
+ {NULL, NULL}};
static auto lua_queue(lua_State* state) -> int {
luaL_newlib(state, kQueueFuncs);