diff --git a/src/module/module_qt_window.c b/src/module/module_qt_window.c index b542f099adddd9ce1e0b312a714e2e9a1fe0c70f..4eb1356553b68f2545afcd2992b02f9690e0a4da 100644 --- a/src/module/module_qt_window.c +++ b/src/module/module_qt_window.c @@ -62,6 +62,93 @@ mod_free(va_list *va) return 0; } +static int +mod_toggle_pause(va_list *va) +{ + va_list copy; + struct module_qt_window_s **win; + va_copy(copy, *va); + win = (struct module_qt_window_s **)va_arg(copy, void **); + bool ret = ___module_qt_window_toggle_pause(*win); + va_end(copy); + return !ret; +} + +static int +mod_load_file(va_list *va) +{ + va_list copy; + struct module_qt_window_s **win; + va_copy(copy, *va); + win = (struct module_qt_window_s **)va_arg(copy, void **); + const char *file = va_arg(copy, const char *); + const bool ret = ___module_qt_window_load_file(*win, file); + va_end(copy); + return !ret; +} + +static int +mod_set_volume(va_list *va) +{ + va_list copy; + va_copy(copy, *va); + struct module_qt_window_s **win = (struct module_qt_window_s **)va_arg(copy, void **); + const int volume = va_arg(copy, int); + const bool ret = ___module_qt_window_set_volume(*win, volume); + va_end(copy); + return !ret; +} + +static int +mod_set_paused(va_list *va) +{ + va_list copy; + va_copy(copy, *va); + struct module_qt_window_s **win = (struct module_qt_window_s **)va_arg(copy, void **); + const int state = va_arg(copy, int); + const bool ret = ___module_qt_window_set_paussed(*win, state); + va_end(copy); + return !ret; +} + +static int +mod_set_position(va_list *va) +{ + va_list copy; + va_copy(copy, *va); + struct module_qt_window_s **win = (struct module_qt_window_s **)va_arg(copy, void **); + const int seconds = va_arg(copy, int); + const bool ret = ___module_qt_window_set_position(*win, seconds); + va_end(copy); + return !ret; +} + +static int +mod_get_duration(va_list *va) +{ + va_list copy; + struct module_qt_window_s **win; + va_copy(copy, *va); + win = (struct module_qt_window_s **)va_arg(copy, void **); + int *duration = va_arg(copy, int *); + bool ret = ___module_qt_window_get_duration(*win, duration); + va_end(copy); + return !ret; +} + +static int +mod_get_elapsed(va_list *va) +{ + va_list copy; + struct module_qt_window_s **win; + va_copy(copy, *va); + win = (struct module_qt_window_s **)va_arg(copy, void **); + int *elapsed = va_arg(copy, int *); + const bool ret = ___module_qt_window_get_elapsed(*win, elapsed); + va_end(copy); + return !ret; +} + /******************** * The module stuff * ********************/ @@ -70,6 +157,13 @@ REG_BEGIN(qt_window_reg) REG_ADD_NAMED("new", mod_new) REG_ADD_NAMED("free", mod_free) REG_ADD_NAMED("close", mod_close) +REG_ADD_NAMED("toggle", mod_toggle_pause) +REG_ADD_NAMED("load", mod_load_file) +REG_ADD_NAMED("set_paused", mod_set_paused) +REG_ADD_NAMED("set_position", mod_set_position) +REG_ADD_NAMED("set_volume", mod_set_volume) +REG_ADD_NAMED("get_duration", mod_get_duration) +REG_ADD_NAMED("get_elapsed", mod_get_elapsed) REG_END() #if !defined(LKT_STATIC_MODULE) REG_EXPORT(qt_window_reg) diff --git a/src/module/mpv.h b/src/module/mpv.h index cac89ac8e0f8fb25f057f69b17a09b4abb18a271..438986eea0079d6a4e8dd7573daf5fa040c76eed 100644 --- a/src/module/mpv.h +++ b/src/module/mpv.h @@ -1,5 +1,9 @@ #pragma once +#if defined( __cplusplus) +extern "C" { +#endif + #include <mpv/client.h> #include <lektor/common.h> #include <lektor/queue.h> @@ -34,3 +38,7 @@ enum { #define SET_STATE_FLAG(sta, STATUS) \ (LOG_DEBUG("WINDOW", "Set status flag to " #STATUS), (sta) = STATE_##STATUS) + +#if defined(__cplusplus) +} +#endif diff --git a/src/module/qt_window/mpvwidget.cpp b/src/module/qt_window/mpvwidget.cpp index 201bfa3dc117ff6b7f5c1bbdb2019956369470c5..64c89e590e3f35c63d56aed0b2144ce5915e68fb 100644 --- a/src/module/qt_window/mpvwidget.cpp +++ b/src/module/qt_window/mpvwidget.cpp @@ -5,6 +5,7 @@ #include <QtCore/QMetaObject> #include "qthelper.cpp" +#include "../mpv.h" static void wakeup(void *ctx) { @@ -158,3 +159,60 @@ void MpvWidget::on_update(void *ctx) { QMetaObject::invokeMethod((MpvWidget*)ctx, "maybeUpdate"); } + +bool +MpvWidget::get_elapsed(int * elapsed_sec) +{ + (void)elapsed_sec; + return true; +} + +bool +MpvWidget::get_duration(int * dur_sec) +{ + (void)dur_sec; + return true; +} + +bool +MpvWidget::set_paussed(int paused) +{ + (void)paused; + return true; +} + +bool +MpvWidget::set_volume(int vol) +{ + (void)vol; + return true; +} + +bool +MpvWidget::set_position(int sec) +{ + (void)sec; + return true; +} + +bool +MpvWidget::load_file(const char * filepath) +{ + const bool ret = !lmpv_load_file(mpv, filepath); + + if (ret) { + LOG_DEBUG("WINDOW", "Loaded file: %s", filepath); + //set_window_title(win); + } else { + LOG_ERROR("WINDOW", "Failed to load kara with path: %s", filepath); + } + + //LOG_DEBUG("WINDOW", "Hinib flag at %d", win->hinib); + return ret; +} + +bool +MpvWidget::toggle_pause() +{ + return true; +} diff --git a/src/module/qt_window/mpvwidget.hh b/src/module/qt_window/mpvwidget.hh index 92b2ab99189b2af7171fd34af797bf6a7da830f9..0c0f91d6fa1fea76321d8b0abcc5460cfa92e39d 100644 --- a/src/module/qt_window/mpvwidget.hh +++ b/src/module/qt_window/mpvwidget.hh @@ -39,6 +39,15 @@ public: private: struct queue *m_queue; lkt_db *m_db; + +public: + bool get_elapsed(int *); + bool get_duration(int *); + bool set_paussed(int); + bool set_volume(int); + bool set_position(int); + bool load_file(const char *); + bool toggle_pause(); }; #endif // __LKT_MODULE_QT_WINDOW__ diff --git a/src/module/qt_window/mpvwidget_interface.cpp b/src/module/qt_window/mpvwidget_interface.cpp index a257c610cb3f6e2b293758daf757b587cc6d2639..56c9af81043859c5129ed8e303006722f83ab2ef 100644 --- a/src/module/qt_window/mpvwidget_interface.cpp +++ b/src/module/qt_window/mpvwidget_interface.cpp @@ -17,3 +17,45 @@ ___create_mpv_widget(struct poller_thread_arg *arg){ a.exec(); return NULL; } + +bool +___module_qt_window_get_elapsed(struct module_qt_window_s * win, int * elapsed_sec) +{ + return win->mpv_widget->get_elapsed(elapsed_sec); +} + +bool +___module_qt_window_get_duration(struct module_qt_window_s * win, int * dur_sec) +{ + return win->mpv_widget->get_duration(dur_sec); +} + +bool +___module_qt_window_set_paussed(struct module_qt_window_s * win, int paused) +{ + return win->mpv_widget->set_paussed(paused); +} + +bool +___module_qt_window_set_volume(struct module_qt_window_s * win, int vol) +{ + return win->mpv_widget->set_volume(vol); +} + +bool +___module_qt_window_set_position(struct module_qt_window_s * win, int sec) +{ + return win->mpv_widget->set_position(sec); +} + +bool +___module_qt_window_load_file(struct module_qt_window_s * win, const char * filepath) +{ + return win->mpv_widget->load_file(filepath); +} + +bool +___module_qt_window_toggle_pause(struct module_qt_window_s * win) +{ + return win->mpv_widget->toggle_pause(); +} diff --git a/src/module/qt_window/mpvwidget_interface.h b/src/module/qt_window/mpvwidget_interface.h index 2d85855ea88c16a6fdd68ff228bc8eb436028792..9964c70bc2db903d579517005d7f95123ab57d9f 100644 --- a/src/module/qt_window/mpvwidget_interface.h +++ b/src/module/qt_window/mpvwidget_interface.h @@ -10,6 +10,14 @@ extern "C" { void * ___create_mpv_widget(struct poller_thread_arg *arg); +bool ___module_qt_window_get_elapsed(struct module_qt_window_s *, int *); +bool ___module_qt_window_get_duration(struct module_qt_window_s *, int *); +bool ___module_qt_window_set_paussed(struct module_qt_window_s *, int); +bool ___module_qt_window_set_volume(struct module_qt_window_s *, int); +bool ___module_qt_window_set_position(struct module_qt_window_s *, int); +bool ___module_qt_window_load_file(struct module_qt_window_s *, const char *); +bool ___module_qt_window_toggle_pause(struct module_qt_window_s *); + #if defined(__cplusplus) } #endif