diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-11-25 08:51:14 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-11-25 08:51:14 +1100 |
| commit | e6844a68b61477d1c0a1d225d75c04c7e6678495 (patch) | |
| tree | c3b81ab0f5d540edddf39ea62d8786942bc799b2 /src | |
| parent | f3e4210f24fe27701d29f0ab0735333202622a89 (diff) | |
| download | tangara-fw-e6844a68b61477d1c0a1d225d75c04c7e6678495.tar.gz | |
implement play/pause
Diffstat (limited to 'src')
| -rw-r--r-- | src/lua/include/property.hpp | 2 | ||||
| -rw-r--r-- | src/lua/property.cpp | 2 | ||||
| -rw-r--r-- | src/ui/include/ui_fsm.hpp | 1 | ||||
| -rw-r--r-- | src/ui/ui_fsm.cpp | 16 |
4 files changed, 19 insertions, 2 deletions
diff --git a/src/lua/include/property.hpp b/src/lua/include/property.hpp index 207696bd..c1dcf44b 100644 --- a/src/lua/include/property.hpp +++ b/src/lua/include/property.hpp @@ -26,6 +26,8 @@ class Property { Property(const LuaValue&); Property(const LuaValue&, std::function<bool(const LuaValue&)>); + auto Get() -> const LuaValue& { return value_; } + auto IsTwoWay() -> bool { return cb_.has_value(); } auto PushValue(lua_State& s) -> int; diff --git a/src/lua/property.cpp b/src/lua/property.cpp index 3e492237..b424a866 100644 --- a/src/lua/property.cpp +++ b/src/lua/property.cpp @@ -221,7 +221,7 @@ auto Property::PopValue(lua_State& s) -> bool { } break; case LUA_TBOOLEAN: - new_val = lua_toboolean(&s, 2); + new_val = static_cast<bool>(lua_toboolean(&s, 2)); break; case LUA_TSTRING: new_val = lua_tostring(&s, 2); diff --git a/src/ui/include/ui_fsm.hpp b/src/ui/include/ui_fsm.hpp index 9f530d71..a8291a46 100644 --- a/src/ui/include/ui_fsm.hpp +++ b/src/ui/include/ui_fsm.hpp @@ -136,6 +136,7 @@ class Lua : public UiState { private: auto PushLuaScreen(lua_State*) -> int; auto PopLuaScreen(lua_State*) -> int; + auto SetPlaying(const lua::LuaValue&) -> bool; std::shared_ptr<lua::Property> battery_pct_; std::shared_ptr<lua::Property> battery_mv_; diff --git a/src/ui/ui_fsm.cpp b/src/ui/ui_fsm.cpp index 557dc1a3..539cbc9b 100644 --- a/src/ui/ui_fsm.cpp +++ b/src/ui/ui_fsm.cpp @@ -7,6 +7,7 @@ #include "ui_fsm.hpp" #include <memory> +#include <variant> #include "lua.h" #include "lua.hpp" @@ -179,7 +180,8 @@ void Lua::entry() { queue_position_ = std::make_shared<lua::Property>(0); queue_size_ = std::make_shared<lua::Property>(0); - playback_playing_ = std::make_shared<lua::Property>(false); + playback_playing_ = std::make_shared<lua::Property>( + false, [&](const lua::LuaValue& val) { return SetPlaying(val); }); playback_track_ = std::make_shared<lua::Property>(); playback_position_ = std::make_shared<lua::Property>(); @@ -250,6 +252,18 @@ auto Lua::PopLuaScreen(lua_State* s) -> int { return 0; } +auto Lua::SetPlaying(const lua::LuaValue& val) -> bool { + bool current_val = std::get<bool>(playback_playing_->Get()); + if (!std::holds_alternative<bool>(val)) { + return false; + } + bool new_val = std::get<bool>(val); + if (current_val != new_val) { + events::Audio().Dispatch(audio::TogglePlayPause{}); + } + return true; +} + void Lua::exit() { lv_group_set_default(NULL); } |
