From 92ab0a8c3a3f94681c84dd86a1259df27e5ba625 Mon Sep 17 00:00:00 2001 From: Dario Casalinuovo Date: Thu, 23 Jul 2015 18:10:56 +0200 Subject: [PATCH] VolumeControl: Add support for media services notifications --- src/bin/desklink/VolumeControl.cpp | 60 +++++++++--------------------- 1 file changed, 18 insertions(+), 42 deletions(-) diff --git a/src/bin/desklink/VolumeControl.cpp b/src/bin/desklink/VolumeControl.cpp index 85e3764815..a7a0fe565c 100644 --- a/src/bin/desklink/VolumeControl.cpp +++ b/src/bin/desklink/VolumeControl.cpp @@ -19,8 +19,8 @@ #include #include #include +#include #include -#include #include @@ -29,15 +29,10 @@ #include "VolumeWindow.h" - - #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "VolumeControl" -static const char* kMediaServerSignature = "application/x-vnd.Be.media-server"; -static const char* kAddOnServerSignature = "application/x-vnd.Be.addon-host"; - static const uint32 kMsgReconnectVolume = 'rcms'; @@ -131,7 +126,9 @@ VolumeControl::AttachedToWindow() else SetEventMask(B_POINTER_EVENTS, B_NO_POINTER_HISTORY); - be_roster->StartWatching(this, B_REQUEST_LAUNCHED | B_REQUEST_QUIT); + BMediaRoster* roster = BMediaRoster::Roster(); + roster->StartWatching(BMessenger(this), B_MEDIA_SERVER_STARTED); + roster->StartWatching(BMessenger(this), B_MEDIA_SERVER_QUIT); _ConnectVolume(); @@ -150,7 +147,9 @@ VolumeControl::DetachedFromWindow() { _DisconnectVolume(); - be_roster->StopWatching(this); + BMediaRoster* roster = BMediaRoster::CurrentRoster(); + roster->StopWatching(BMessenger(this), B_MEDIA_SERVER_STARTED); + roster->StopWatching(BMessenger(this), B_MEDIA_SERVER_QUIT); } @@ -294,42 +293,19 @@ VolumeControl::MessageReceived(BMessage* msg) SetValue((int32)fMixerControl->Volume()); break; - case B_SOME_APP_LAUNCHED: - case B_SOME_APP_QUIT: + case B_MEDIA_SERVER_STARTED: { - const char* signature; - if (msg->FindString("be:signature", &signature) != B_OK) - break; + BMessage reconnect(kMsgReconnectVolume); + BMessageRunner::StartSending(this, &reconnect, 1000000LL, 1); + fConnectRetries = 3; + break; + } - bool isMediaServer = !strcmp(signature, kMediaServerSignature); - bool isAddOnServer = !strcmp(signature, kAddOnServerSignature); - if (!isMediaServer && !isAddOnServer) - break; - - if (isMediaServer) - fMediaServerRunning = msg->what == B_SOME_APP_LAUNCHED; - if (isAddOnServer) - fAddOnServerRunning = msg->what == B_SOME_APP_LAUNCHED; - - if (!fMediaServerRunning && !fAddOnServerRunning) { - // No media server around - SetLabel(B_TRANSLATE("No media server running")); - SetEnabled(false); - } else if (fMediaServerRunning && fAddOnServerRunning) { - // HACK! - // quit our now invalid instance of the media roster - // so that before new nodes are created, - // we get a new roster - BMediaRoster* roster = BMediaRoster::CurrentRoster(); - if (roster != NULL) { - roster->Lock(); - roster->Quit(); - } - - BMessage reconnect(kMsgReconnectVolume); - BMessageRunner::StartSending(this, &reconnect, 1000000LL, 1); - fConnectRetries = 3; - } + case B_MEDIA_SERVER_QUIT: + { + // No media server around + SetLabel(B_TRANSLATE("No media server running")); + SetEnabled(false); break; }