addr_player_changed_ = Notification(true, label);
media_interface_->GetMediaPlayerList(
base::Bind(&Device::AddressedPlayerNotificationResponse,
- weak_ptr_factory_.GetWeakPtr(), label, false));
+ weak_ptr_factory_.GetWeakPtr(), label, true));
} break;
case Event::UIDS_CHANGED: {
auto response =
RegisterNotificationResponseBuilder::MakeAddressedPlayerBuilder(
- true, curr_player, 0x0000);
+ interim, curr_player, 0x0000);
send_message_cb_.Run(label, false, std::move(response));
if (!interim) {
active_labels_.erase(label);
addr_player_changed_ = Notification(false, 0);
+ RejectNotification();
+ }
+}
+
+void Device::RejectNotification() {
+ DEVICE_VLOG(1) << __func__;
+ Notification* rejectNotification[] = {&play_status_changed_, &track_changed_,
+ &play_pos_changed_,
+ &now_playing_changed_};
+ for (int i = 0; i < 4; i++) {
+ uint8_t label = rejectNotification[i]->second;
+ auto response = RejectBuilder::MakeBuilder(
+ CommandPdu::REGISTER_NOTIFICATION, Status::ADDRESSED_PLAYER_CHANGED);
+ send_message_cb_.Run(label, false, std::move(response));
+ active_labels_.erase(label);
+ rejectNotification[i] = new Notification(false, 0);
}
}
DEVICE_VLOG(4) << __func__;
if (available_players) {
- // TODO (apanicke): Right now this isn't needed since we only show one
- // player. Implement this in the future for a more complete
- // implementation though.
+ HandleAvailablePlayerUpdate();
}
if (addressed_player) {
- // TODO (apanicke): See above TODO.
+ HandleAddressedPlayerUpdate();
}
-
- CHECK(false) << "NEED TO IMPLEMENT";
}
void Device::HandleTrackUpdate() {
play_pos_changed_.second, false));
}
+void Device::HandleAvailablePlayerUpdate() {
+ DEVICE_VLOG(1) << __func__;
+
+ if (!avail_players_changed_.first) {
+ LOG(WARNING) << "Device is not registered for available player updates";
+ return;
+ }
+
+ auto response =
+ RegisterNotificationResponseBuilder::MakeAvailablePlayersBuilder(false);
+ send_message_cb_.Run(avail_players_changed_.second, false,
+ std::move(response));
+
+ if (!avail_players_changed_.first) {
+ active_labels_.erase(avail_players_changed_.second);
+ avail_players_changed_ = Notification(false, 0);
+ }
+}
+
+void Device::HandleAddressedPlayerUpdate() {
+ DEVICE_VLOG(1) << __func__;
+ if (!addr_player_changed_.first) {
+ DEVICE_LOG(WARNING)
+ << "Device is not registered for addressed player updates";
+ return;
+ }
+ media_interface_->GetMediaPlayerList(base::Bind(
+ &Device::AddressedPlayerNotificationResponse,
+ weak_ptr_factory_.GetWeakPtr(), addr_player_changed_.second, false));
+}
+
void Device::DeviceDisconnected() {
DEVICE_LOG(INFO) << "Device was disconnected";
play_pos_update_cb_.Cancel();