~thomas-voss/media-hub/introduce-power-controller-interface

« back to all changes in this revision

Viewing changes to src/core/media/service_implementation.cpp

  • Committer: CI bot
  • Author(s): Justin McPherson
  • Date: 2014-11-11 20:18:36 UTC
  • mfrom: (72.3.5 1239432)
  • Revision ID: ps-jenkins@lists.canonical.com-20141111201836-e6h4pbs5c1n4j3ay
#1239432 Music fails to pause on incoming/outgoing calls Fixes: 1239432
Approved by: Jim Hodapp

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
#include "service_implementation.h"
21
21
 
22
22
#include "indicator_power_service.h"
 
23
#include "call-monitor/call_monitor.h"
23
24
#include "player_configuration.h"
24
25
#include "player_implementation.h"
25
26
 
43
44
    Private()
44
45
        : resume_key(std::numeric_limits<std::uint32_t>::max()),
45
46
          keep_alive(io_service),
46
 
          disp_cookie(0)
 
47
          disp_cookie(0),
 
48
          call_monitor(new CallMonitor)
47
49
    {
48
50
        bus = std::shared_ptr<dbus::Bus>(new dbus::Bus(core::dbus::WellKnownBus::session));
49
51
        bus->install_executor(dbus::asio::make_executor(bus, io_service));
127
129
    int disp_cookie;
128
130
    std::shared_ptr<dbus::Object> uscreen_session;
129
131
    MediaRecorderObserver *observer;
 
132
    std::unique_ptr<CallMonitor> call_monitor;
 
133
    std::list<media::Player::PlayerKey> paused_sessions;
130
134
};
131
135
 
132
136
media::ServiceImplementation::ServiceImplementation() : d(new Private())
148
152
        if (!notifying)
149
153
            resume_multimedia_session();
150
154
    });
 
155
 
 
156
    d->call_monitor->on_change([this](CallMonitor::State state) {
 
157
        switch (state) {
 
158
        case CallMonitor::OffHook:
 
159
            pause_all_multimedia_sessions();
 
160
            break;
 
161
        case CallMonitor::OnHook:
 
162
            resume_paused_multimedia_sessions();
 
163
            break;
 
164
        }
 
165
    });
151
166
}
152
167
 
153
168
media::ServiceImplementation::~ServiceImplementation()
216
231
                          if (player->playback_status() == Player::playing
217
232
                              && player->audio_stream_role() == media::Player::multimedia)
218
233
                          {
219
 
                              d->resume_key = key;
220
 
                              cout << "Will resume playback of Player with key: " << d->resume_key << endl;
 
234
                              d->paused_sessions.push_back(key);
221
235
                              player->pause();
222
236
                          }
223
237
                      });
224
238
}
225
239
 
 
240
void media::ServiceImplementation::resume_paused_multimedia_sessions()
 
241
{
 
242
    std::for_each(d->paused_sessions.begin(), d->paused_sessions.end(), [this](const media::Player::PlayerKey& key) {
 
243
            player_for_key(key)->play();
 
244
        });
 
245
 
 
246
    d->paused_sessions.clear();
 
247
}
 
248
 
226
249
void media::ServiceImplementation::resume_multimedia_session()
227
250
{
228
251
    if (not has_player_for_key(d->resume_key))