From e8dc8edad7cdf194091f0479b70b154e872f57ef Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Mon, 20 Oct 2025 21:29:01 +0200 Subject: bt & main: Add optional player for device --- src/main.cc | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'src/main.cc') 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)> callback) override { -- cgit v1.2.3-70-g09d2