1
#include "mediahub_player_shim.h"
5
#include <core/media/service.h>
6
#include <core/media/player.h>
8
using namespace core::ubuntu::media;
12
std::map<int, std::shared_ptr<Player> > g_mediahub_players;
14
void setup_delegate(MediaHubDelegate *delegate, std::shared_ptr<Player>& player)
16
player->seeked_to().connect([delegate](int64_t pos) {
17
delegate->seeked_to(pos);
20
player->end_of_stream().connect([delegate]() {
21
delegate->end_of_stream();
24
player->playback_status_changed().connect([player, delegate](Player::PlaybackStatus status) {
25
delegate->playback_status_changed(
26
static_cast<MediaHubDelegate::Status>(status),
27
player->duration().get()
35
mediahub_create_player(int player_id, MediaHubDelegate *delegate)
39
return MediaHubClientHandle();
42
if (g_mediahub_players.find(player_id) != g_mediahub_players.end()) {
43
return MediaHubClientHandle();
46
std::shared_ptr<Player> player =
47
Service::Client::instance()->create_session(
48
Player::Client::default_configuration());
50
if (delegate != NULL) {
51
setup_delegate(delegate, player);
54
g_mediahub_players[player_id] = player;
56
return MediaHubClientHandle(static_cast<void*>(player.get()));
57
} catch (std::runtime_error& error) {
58
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
60
return MediaHubClientHandle();
64
mediahub_create_fixed_player(int player_id, const std::string& domain, MediaHubDelegate *delegate)
68
return MediaHubClientHandle();
71
if (g_mediahub_players.find(player_id) != g_mediahub_players.end()) {
72
return MediaHubClientHandle();
75
std::shared_ptr<Player> player =
76
Service::Client::instance()->create_fixed_session(domain,
77
Player::Client::default_configuration());
79
if (delegate != NULL) {
80
setup_delegate(delegate, player);
82
delegate->playback_status_changed(
83
MediaHubDelegate::Status(player->playback_status().get()),
84
player->duration().get()
88
g_mediahub_players[player_id] = player;
90
return MediaHubClientHandle(static_cast<void*>(player.get()));
91
} catch (std::runtime_error& error) {
92
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
94
return MediaHubClientHandle();
98
mediahub_resume_player(int player_id, int player_key)
102
return MediaHubClientHandle();
105
if (g_mediahub_players.find(player_id) != g_mediahub_players.end()) {
106
return MediaHubClientHandle();
109
std::shared_ptr<Player> player =
110
Service::Client::instance()->resume_session(player_key);
112
g_mediahub_players[player_id] = player;
114
return MediaHubClientHandle(static_cast<void*>(player.get()));
115
} catch (std::runtime_error& error) {
116
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
118
return MediaHubClientHandle();
122
mediahub_open_uri(MediaHubClientHandle handle,
123
const std::string& uri,
124
const std::string& cookies,
125
const std::string& user_agent)
128
Player* player = static_cast<Player*>(handle);
130
if (player->playback_status().get() == Player::playing);
133
core::ubuntu::media::Player::HeadersType headers;
134
if (!cookies.empty()) {
135
headers["Cookie"] = cookies;
137
if (!user_agent.empty()) {
138
headers["User-Agent"] = user_agent;
140
return player->open_uri(uri, headers);
142
} catch (std::runtime_error& error) {
143
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
150
mediahub_play(MediaHubClientHandle handle)
153
Player* player = static_cast<Player*>(handle);
157
} catch (std::runtime_error& error) {
158
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
163
mediahub_pause(MediaHubClientHandle handle)
166
Player* player = static_cast<Player*>(handle);
170
} catch (std::runtime_error& error) {
171
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
176
mediahub_stop(MediaHubClientHandle handle)
179
Player* player = static_cast<Player*>(handle);
183
} catch (std::runtime_error& error) {
184
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
189
mediahub_get_duration(MediaHubClientHandle handle)
192
Player* player = static_cast<Player*>(handle);
194
return player->duration().get();
196
} catch (std::runtime_error& error) {
197
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
203
mediahub_get_position(MediaHubClientHandle handle)
206
Player* player = static_cast<Player*>(handle);
208
return player->position().get();
210
} catch (std::runtime_error& error) {
211
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
217
mediahub_release(MediaHubClientHandle handle)
220
auto it = g_mediahub_players.begin();
221
for (; it != g_mediahub_players.end(); it++) {
222
if (it->second.get() == handle) {
226
if (it != g_mediahub_players.end()) {
227
g_mediahub_players.erase(it);
229
} catch (std::runtime_error& error) {
230
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
235
mediahub_is_playing(MediaHubClientHandle handle)
238
Player* player = static_cast<Player*>(handle);
240
return player->playback_status().get() != Player::playing;
242
} catch (std::runtime_error& error) {
243
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
249
mediahub_can_seek_forward(MediaHubClientHandle handle)
252
Player* player = static_cast<Player*>(handle);
254
return player->can_seek().get();
256
} catch (std::runtime_error& error) {
257
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
263
mediahub_can_seek_backward(MediaHubClientHandle handle)
266
Player* player = static_cast<Player*>(handle);
268
return player->can_seek().get();
270
} catch (std::runtime_error& error) {
271
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
277
mediahub_seek_to(MediaHubClientHandle handle, int64_t offset)
280
Player* player = static_cast<Player*>(handle);
282
return player->seek_to(std::chrono::microseconds(offset));
284
} catch (std::runtime_error& error) {
285
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
290
mediahub_can_pause(MediaHubClientHandle handle)
293
Player* player = static_cast<Player*>(handle);
295
return player->can_pause().get();
297
} catch (std::runtime_error& error) {
298
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
304
mediahub_is_player_ready(MediaHubClientHandle handle)
307
Player* player = static_cast<Player*>(handle);
309
return player->playback_status().get() != Player::null;
311
} catch (std::runtime_error& error) {
312
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
318
mediahub_set_volume(MediaHubClientHandle handle, double volume)
321
Player* player = static_cast<Player*>(handle);
323
player->volume().set(volume);
325
} catch (std::runtime_error& error) {
326
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;
331
mediahub_set_player_lifetime(MediaHubClientHandle handle, Lifetime lifetime)
334
Player* player = static_cast<Player*>(handle);
336
player->lifetime().set(Player::Lifetime(lifetime));
338
} catch (std::runtime_error& error) {
339
std::cerr << __PRETTY_FUNCTION__ << " " << error.what() << std::endl;