summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-11-25 08:51:14 +1100
committerjacqueline <me@jacqueline.id.au>2023-11-25 08:51:14 +1100
commite6844a68b61477d1c0a1d225d75c04c7e6678495 (patch)
treec3b81ab0f5d540edddf39ea62d8786942bc799b2 /src
parentf3e4210f24fe27701d29f0ab0735333202622a89 (diff)
downloadtangara-fw-e6844a68b61477d1c0a1d225d75c04c7e6678495.tar.gz
implement play/pause
Diffstat (limited to 'src')
-rw-r--r--src/lua/include/property.hpp2
-rw-r--r--src/lua/property.cpp2
-rw-r--r--src/ui/include/ui_fsm.hpp1
-rw-r--r--src/ui/ui_fsm.cpp16
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);
}