Ticket #11922: 0011-VolumeControl-and-Media-preferences-add-support-for-.patch

File 0011-VolumeControl-and-Media-preferences-add-support-for-.patch, 6.4 KB (added by Barrett, 9 years ago)
  • src/bin/desklink/VolumeControl.cpp

    From 87d773ab6154f9da24d021c09568b8ef709773f7 Mon Sep 17 00:00:00 2001
    From: Dario Casalinuovo <b.vitruvio@gmail.com>
    Date: Mon, 23 Mar 2015 12:48:50 +0100
    Subject: [PATCH 11/13] VolumeControl and Media preferences: add support for
     the new notification mechanism provided by BMediaRoster.
    
    ---
     src/bin/desklink/VolumeControl.cpp    | 57 +++++++++++------------------------
     src/preferences/media/Media.cpp       |  9 ------
     src/preferences/media/MediaWindow.cpp | 32 ++++++--------------
     3 files changed, 27 insertions(+), 71 deletions(-)
    
    diff --git a/src/bin/desklink/VolumeControl.cpp b/src/bin/desklink/VolumeControl.cpp
    index 8983830..aa77632 100644
    a b  
    1919#include <Catalog.h>
    2020#include <ControlLook.h>
    2121#include <Dragger.h>
     22#include <MediaRoster.h>
    2223#include <MessageRunner.h>
    23 #include <Roster.h>
    2424
    2525#include <AppMisc.h>
    2626
     
    3535#define B_TRANSLATION_CONTEXT "VolumeControl"
    3636
    3737
    38 static const char* kMediaServerSignature = "application/x-vnd.Be.media-server";
    39 static const char* kAddOnServerSignature = "application/x-vnd.Be.addon-host";
    4038
    4139static const uint32 kMsgReconnectVolume = 'rcms';
    4240
    VolumeControl::AttachedToWindow()  
    130128    else
    131129        SetEventMask(B_POINTER_EVENTS, B_NO_POINTER_HISTORY);
    132130
    133     be_roster->StartWatching(this, B_REQUEST_LAUNCHED | B_REQUEST_QUIT);
     131    BMediaRoster* roster = BMediaRoster::Roster();
     132    roster->StartWatching(BMessenger(this), B_MEDIA_SERVER_STARTED);
     133    roster->StartWatching(BMessenger(this), B_MEDIA_SERVER_QUIT);
    134134
    135135    _ConnectVolume();
    136136
    VolumeControl::DetachedFromWindow()  
    149149{
    150150    _DisconnectVolume();
    151151
    152     be_roster->StopWatching(this);
     152    BMediaRoster* roster = BMediaRoster::CurrentRoster();
     153    roster->StopWatching(BMessenger(this), B_MEDIA_SERVER_STARTED);
     154    roster->StopWatching(BMessenger(this), B_MEDIA_SERVER_QUIT);
    153155}
    154156
    155157
    VolumeControl::MessageReceived(BMessage* msg)  
    293295            SetValue((int32)fMixerControl->Volume());
    294296            break;
    295297
    296         case B_SOME_APP_LAUNCHED:
    297         case B_SOME_APP_QUIT:
     298        case B_MEDIA_SERVER_STARTED:
    298299        {
    299             const char* signature;
    300             if (msg->FindString("be:signature", &signature) != B_OK)
    301                 break;
    302 
    303             bool isMediaServer = !strcmp(signature, kMediaServerSignature);
    304             bool isAddOnServer = !strcmp(signature, kAddOnServerSignature);
    305             if (isMediaServer)
    306                 fMediaServerRunning = msg->what == B_SOME_APP_LAUNCHED;
    307             if (isAddOnServer)
    308                 fAddOnServerRunning = msg->what == B_SOME_APP_LAUNCHED;
    309 
    310            if (isMediaServer || isAddOnServer) {
    311                 if (!fMediaServerRunning && !fAddOnServerRunning) {
    312                     // No media server around
    313                     SetLabel(B_TRANSLATE("No media server running"));
    314                     SetEnabled(false);
    315                 } else if (fMediaServerRunning && fAddOnServerRunning) {
    316                     // HACK!
    317                     // quit our now invalid instance of the media roster
    318                     // so that before new nodes are created,
    319                     // we get a new roster
    320                     BMediaRoster* roster = BMediaRoster::CurrentRoster();
    321                     if (roster != NULL) {
    322                         roster->Lock();
    323                         roster->Quit();
    324                     }
    325 
    326                     BMessage reconnect(kMsgReconnectVolume);
    327                     BMessageRunner::StartSending(this, &reconnect, 1000000LL, 1);
    328                     fConnectRetries = 3;
    329                 }
    330             }
     300            BMessage reconnect(kMsgReconnectVolume);
     301            BMessageRunner::StartSending(this, &reconnect, 1000000LL, 1);
     302            fConnectRetries = 3;
     303            break;
     304        }
     305        case B_MEDIA_SERVER_QUIT:
     306        {
     307            // No media server around
     308            SetLabel(B_TRANSLATE("No media server running"));
     309            SetEnabled(false);
    331310            break;
    332311        }
    333312
  • src/preferences/media/Media.cpp

    diff --git a/src/preferences/media/Media.cpp b/src/preferences/media/Media.cpp
    index fae66ac..80284bf 100644
    a b  
    1414
    1515#include <Catalog.h>
    1616#include <Locale.h>
    17 #include <Roster.h>
    1817#include <StorageKit.h>
    1918#include <String.h>
    2019
    Media::Media()  
    5958
    6059    MediaListItem::SetIcons(&fIcons);
    6160    fWindow = new MediaWindow(rect);
    62 
    63     be_roster->StartWatching(BMessenger(this));
    6461}
    6562
    6663
    6764Media::~Media()
    6865{
    69     be_roster->StopWatching(BMessenger(this));
    7066}
    7167
    7268
    void  
    8379Media::MessageReceived(BMessage* message)
    8480{
    8581    switch (message->what) {
    86         case B_SOME_APP_LAUNCHED:
    87         case B_SOME_APP_QUIT:
    88             fWindow->PostMessage(message);
    89             break;
    90 
    9182        default:
    9283            BApplication::MessageReceived(message);
    9384            break;
  • src/preferences/media/MediaWindow.cpp

    diff --git a/src/preferences/media/MediaWindow.cpp b/src/preferences/media/MediaWindow.cpp
    index a2d031d..6565bca 100644
    a b MediaWindow::MediaWindow(BRect frame)  
    167167    fInitCheck(B_OK)
    168168{
    169169    _InitWindow();
     170
     171    BMediaRoster* roster = BMediaRoster::Roster();
     172    roster->StartWatching(BMessenger(this, this), B_MEDIA_SERVER_STARTED);
    170173}
    171174
    172175
    MediaWindow::~MediaWindow()  
    188191        if (file.InitCheck() == B_OK)
    189192            file.Write(buffer, strlen(buffer));
    190193    }
     194    BMediaRoster* roster = BMediaRoster::CurrentRoster();
     195    roster->StopWatching(BMessenger(this, this), B_MEDIA_SERVER_STARTED);
    191196}
    192197
    193198
    MediaWindow::MessageReceived(BMessage* message)  
    313318            item->AlterWindow(this);
    314319            break;
    315320        }
    316         case B_SOME_APP_LAUNCHED:
     321        case B_MEDIA_SERVER_STARTED:
    317322        {
    318323            PRINT_OBJECT(*message);
    319324
    320             BString mimeSig;
    321             if (message->FindString("be:signature", &mimeSig) == B_OK
    322                 && (mimeSig == "application/x-vnd.Be.addon-host"
    323                     || mimeSig == "application/x-vnd.Be.media-server")) {
    324                 _Notify(0.75, B_TRANSLATE("Starting media server"
    325                     B_UTF8_ELLIPSIS));
    326             }
    327             break;
    328         }
    329         case B_SOME_APP_QUIT:
    330         {
    331             PRINT_OBJECT(*message);
    332             BString mimeSig;
    333             if (message->FindString("be:signature", &mimeSig) == B_OK) {
    334                 if (mimeSig == "application/x-vnd.Be.addon-host"
    335                     || mimeSig == "application/x-vnd.Be.media-server") {
    336                     BMediaRoster* roster = BMediaRoster::CurrentRoster();
    337                     if (roster != NULL && roster->Lock())
    338                         roster->Quit();
    339                 }
    340             }
     325            _Notify(0.75, B_TRANSLATE("Starting media server"
     326                B_UTF8_ELLIPSIS));
    341327            break;
    342328        }
    343329        default:
    status_t  
    633619MediaWindow::_RestartMediaServices(void* data)
    634620{
    635621    MediaWindow* window = (MediaWindow*)data;
    636    
     622
    637623    shutdown_media_server(B_INFINITE_TIMEOUT, MediaWindow::_UpdateProgress,
    638624        data);
    639625