diff --git a/src/minimediaplayer.cpp b/src/minimediaplayer.cpp index 2161a92c35a4c8463bc2c4429cc45425beaf1e61..2a1750741c2b8b32c55d92a37d8324a5a54054a9 100644 --- a/src/minimediaplayer.cpp +++ b/src/minimediaplayer.cpp @@ -45,7 +45,7 @@ bool MiniMediaPlayer::nextTrack() m_player->pause(); m_player->setPosition(0); QtConcurrent::run([this]() { - m_player->setMedia(getStreamUrlFromUrl(playlist.first().second)); + m_player->setMedia(getStreamUrlFromUrl(playlist.first().trackURL)); emit playlistChanged(getTrackNames()); }); return true; @@ -66,7 +66,7 @@ qint64 MiniMediaPlayer::getCurrentPosition() qint64 MiniMediaPlayer::getTrackDuration() { - return m_player->duration(); + return playlist.first().trackLength; } int MiniMediaPlayer::getVolume() @@ -97,9 +97,9 @@ bool MiniMediaPlayer::playPauseTrack(bool playing) QList MiniMediaPlayer::getTrackNames() { QList playlistTitles; - for(QPair item: playlist) + for(trackInfo item: playlist) { - playlistTitles.append(item.first); + playlistTitles.append(item.trackName); } return playlistTitles; } @@ -107,7 +107,7 @@ QList MiniMediaPlayer::getTrackNames() QMap MiniMediaPlayer::currentState() { QMap state; - state.insert("duration",m_player->duration()); + state.insert("duration",playlist.first().trackLength); state.insert("position",m_player->position()); state.insert("state",isPlaying()); return state; @@ -115,7 +115,7 @@ QMap MiniMediaPlayer::currentState() void MiniMediaPlayer::durationChanged(qint64 length) { - emit trackDurationChanged(length); + //emit trackDurationChanged(length); //Don't emit duration changed since we already have duration. TODO: might want to use this still if implement another media source besides youtube-dl. } void MiniMediaPlayer::positionChanged(qint64 position) @@ -130,7 +130,7 @@ void MiniMediaPlayer::addURLToPlaylist(QUrl mediaUrl) { bool shouldStartPlaying = false; if(playlist.size() == 0) shouldStartPlaying = true; - QList> tracks = getStreamTitlesAndUrlsFromUrl(mediaUrl); + QList tracks = getStreamTitlesAndUrlsFromUrl(mediaUrl); if(tracks.size() > 0) { playlist.append(tracks); @@ -138,7 +138,7 @@ void MiniMediaPlayer::addURLToPlaylist(QUrl mediaUrl) } if(shouldStartPlaying && playlist.size() > 0) { - m_player->setMedia(getStreamUrlFromUrl(playlist.first().second)); + m_player->setMedia(getStreamUrlFromUrl(playlist.first().trackURL)); } } }); @@ -205,9 +205,9 @@ void MiniMediaPlayer::mediaStatusChanged(QMediaPlayer::MediaStatus status) } } -QList> MiniMediaPlayer::getStreamTitlesAndUrlsFromUrl(QUrl mediaUrl) +QList MiniMediaPlayer::getStreamTitlesAndUrlsFromUrl(QUrl mediaUrl) { - QList> tracks; + QList tracks; //Run youtube-dl on Url and return json given back. QProcess youtubedl; youtubedl.start("youtube-dl --no-warnings -f bestaudio -j "+mediaUrl.toString()); @@ -224,10 +224,11 @@ QList> MiniMediaPlayer::getStreamTitlesAndUrlsFromUrl(QUrl m QJsonDocument info = QJsonDocument::fromJson(jsonTrack.toUtf8()); if(!info.isNull() && info.isObject()) { - QPair track; + trackInfo track; QJsonObject jsonTrackInfo = info.object(); - track.first = jsonTrackInfo["title"].toString(); - track.second = QUrl(jsonTrackInfo["webpage_url"].toString()); + track.trackName = jsonTrackInfo["title"].toString(); + track.trackURL = QUrl(jsonTrackInfo["webpage_url"].toString()); + track.trackLength = jsonTrackInfo["duration"].toInt() * 1000; //convert seconds to milliseconds tracks.append(track); } } diff --git a/src/minimediaplayer.h b/src/minimediaplayer.h index 3da3d6115f305aa1c8b1913d217807c9154b0f1b..108157bf6f15f25fb2258b0c38383f2dbbeaf4b9 100644 --- a/src/minimediaplayer.h +++ b/src/minimediaplayer.h @@ -51,6 +51,12 @@ public: void setVolume(int volume); + struct trackInfo { + QString trackName; + QUrl trackURL; + qint64 trackLength; + }; + signals: void playStateChanged(bool isPlaying); void playlistChanged(QStringList trackTitles); @@ -66,11 +72,11 @@ private slots: private: QMediaPlayer *m_player; - QList> playlist; + QList playlist; bool isValidMediaUrl(QUrl mediaUrl); QUrl getStreamUrlFromUrl(QUrl mediaUrl); - QList> getStreamTitlesAndUrlsFromUrl(QUrl mediaUrl); + QList getStreamTitlesAndUrlsFromUrl(QUrl mediaUrl); };