summaryrefslogtreecommitdiff
path: root/src/main.cc
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@spawned.biz>2025-10-20 21:29:01 +0200
committerJoel Klinghed <the_jk@spawned.biz>2025-10-20 21:29:01 +0200
commite8dc8edad7cdf194091f0479b70b154e872f57ef (patch)
tree5431680ce100812b9b3bea32a7847e7dcfdcf29d /src/main.cc
parent0687ec31d1d75500beaee0e983ebf73d7c4517f7 (diff)
bt & main: Add optional player for device
Diffstat (limited to 'src/main.cc')
-rw-r--r--src/main.cc54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/main.cc b/src/main.cc
index ce20aee..83fd905 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -41,6 +41,7 @@ class Api {
};
const std::string_view kSignalUpdateAdapter("controller/update");
+const std::string kSignalUpdateDevicePrefix("device/update/");
class Signaler {
public:
@@ -173,10 +174,44 @@ class HttpServerDelegate : public http::Server::Delegate {
json_writer_->start_object();
json_writer_->key("name");
json_writer_->value(device.name());
+ json_writer_->key("address");
+ json_writer_->value(device.address());
json_writer_->key("paired");
json_writer_->value(device.paired());
json_writer_->key("connected");
json_writer_->value(device.connected());
+
+ json_writer_->key("playing");
+ if (auto* player = device.player()) {
+ json_writer_->start_object();
+ json_writer_->key("status");
+ switch (player->status()) {
+ case bt::Player::Status::kPlaying:
+ case bt::Player::Status::kForwardSeek:
+ case bt::Player::Status::kReverseSeek:
+ json_writer_->value("playing");
+ break;
+ case bt::Player::Status::kStopped:
+ json_writer_->value("stopped");
+ break;
+ case bt::Player::Status::kPaused:
+ json_writer_->value("paused");
+ break;
+ case bt::Player::Status::kError:
+ json_writer_->value("error");
+ break;
+ }
+ json_writer_->key("title");
+ json_writer_->value(player->track_title());
+ json_writer_->key("album");
+ json_writer_->value(player->track_album());
+ json_writer_->key("artist");
+ json_writer_->value(player->track_artist());
+ json_writer_->end_object();
+ } else {
+ json_writer_->value(nullptr);
+ }
+
json_writer_->end_object();
}
@@ -240,6 +275,25 @@ class BluetoothManagerDelegate : public bt::Manager::Delegate, public Api {
signaler_.send(kSignalUpdateAdapter);
}
+ void added_player(bt::Device& device, bt::Player& /* player */) override {
+ logger_.info(std::format("New player for {}", device.name()));
+
+ if (adapter_)
+ signaler_.send(kSignalUpdateDevicePrefix + device.address());
+ }
+
+ void removed_player(bt::Device& device) override {
+ logger_.info(std::format("Remove player for {}", device.name()));
+
+ if (adapter_)
+ signaler_.send(kSignalUpdateDevicePrefix + device.address());
+ }
+
+ void updated_player(bt::Device& device, bt::Player& /* player */) override {
+ if (adapter_)
+ signaler_.send(kSignalUpdateDevicePrefix + device.address());
+ }
+
void agent_request_pincode(
bt::Device& device,
std::function<void(std::optional<std::string>)> callback) override {