mirror of
https://github.com/HenkKalkwater/harbour-sailfin.git
synced 2024-05-11 08:32:43 +00:00
76 lines
2.3 KiB
C++
76 lines
2.3 KiB
C++
#include "jellyfinmediasource.h"
|
|
|
|
namespace Jellyfin {
|
|
|
|
MediaSource::MediaSource(QObject *parent)
|
|
: QObject(parent) {
|
|
|
|
}
|
|
|
|
void MediaSource::fetchStreamUrl() {
|
|
QUrlQuery params;
|
|
params.addQueryItem("UserId", m_apiClient->userId());
|
|
params.addQueryItem("StartTimeTicks", "0");
|
|
params.addQueryItem("IsPlayback", "true");
|
|
params.addQueryItem("AutoOpenLiveStream", this->m_autoOpen ? "true" : "false");
|
|
params.addQueryItem("MediaSourceId", this->m_itemId);
|
|
params.addQueryItem("SubtitleStreamIndex", QString::number(m_subtitleIndex));
|
|
params.addQueryItem("AudioStreamIndex", QString::number(m_audioIndex));
|
|
|
|
QJsonObject root;
|
|
root["DeviceProfile"] = m_apiClient->playbackDeviceProfile();
|
|
|
|
QNetworkReply *rep = m_apiClient->post("/Items/" + this->m_itemId + "/PlaybackInfo", QJsonDocument(root), params);
|
|
connect(rep, &QNetworkReply::finished, this, [this, rep]() {
|
|
QJsonObject root = QJsonDocument::fromJson(rep->readAll()).object();
|
|
this->m_playSessionId = root["PlaySessionId"].toString();
|
|
qDebug() << "Session id: " << this->m_playSessionId;
|
|
|
|
if (this->m_autoOpen) {
|
|
QJsonArray mediaSources = root["MediaSources"].toArray();
|
|
//FIXME: relies on the fact that the returned transcode url always has a query!
|
|
this->m_streamUrl = this->m_apiClient->baseUrl()
|
|
+ mediaSources[0].toObject()["TranscodingUrl"].toString();
|
|
|
|
|
|
emit this->streamUrlChanged(this->m_streamUrl);
|
|
qDebug() << "Found stream url: " << this->m_streamUrl;
|
|
}
|
|
|
|
rep->deleteLater();
|
|
});
|
|
}
|
|
|
|
void MediaSource::setItemId(const QString &newItemId) {
|
|
if (m_apiClient == nullptr) {
|
|
qWarning() << "apiClient is not set on this MediaSource instance! Aborting.";
|
|
return;
|
|
}
|
|
|
|
this->m_itemId = newItemId;
|
|
// Deinitialize the streamUrl
|
|
setStreamUrl("");
|
|
if (!newItemId.isEmpty()) {
|
|
fetchStreamUrl();
|
|
}
|
|
}
|
|
|
|
void MediaSource::setStreamUrl(const QString &streamUrl) {
|
|
this->m_streamUrl = streamUrl;
|
|
emit streamUrlChanged(streamUrl);
|
|
}
|
|
|
|
void MediaSource::play() {
|
|
//todo: playback reporting
|
|
}
|
|
|
|
void MediaSource::pause() {
|
|
//todo: playback reporting
|
|
}
|
|
|
|
void MediaSource::stop() {
|
|
//todo: playback reporting
|
|
}
|
|
|
|
}
|