diff options
| author | Joel Klinghed <the_jk@spawned.biz> | 2025-10-20 21:29:01 +0200 |
|---|---|---|
| committer | Joel Klinghed <the_jk@spawned.biz> | 2025-10-20 21:29:01 +0200 |
| commit | e8dc8edad7cdf194091f0479b70b154e872f57ef (patch) | |
| tree | 5431680ce100812b9b3bea32a7847e7dcfdcf29d /src/main.cc | |
| parent | 0687ec31d1d75500beaee0e983ebf73d7c4517f7 (diff) | |
bt & main: Add optional player for device
Diffstat (limited to 'src/main.cc')
| -rw-r--r-- | src/main.cc | 54 |
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 { |
