Private
Public Access
1
0

Move any code with youtube-dl access(which can be slow) to another thread. Fixes #2.

This commit is contained in:
2019-04-10 17:42:51 -04:00
parent 234e867a8a
commit 4e76cf9fc5
6 changed files with 30 additions and 22 deletions

View File

@@ -4,6 +4,7 @@ project(simplecastengine)
set(QT_MIN_VERSION "5.9.0") set(QT_MIN_VERSION "5.9.0")
set(KF_MIN_VERSION "5.35.0") set(KF_MIN_VERSION "5.35.0")
set (CMAKE_CXX_STANDARD 11)
find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE) find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})

View File

@@ -95,6 +95,7 @@ Item {
var loadTrack = service.operationDescription("addURLToPlaylist"); var loadTrack = service.operationDescription("addURLToPlaylist");
loadTrack.URL = url.text; loadTrack.URL = url.text;
service.startOperationCall(loadTrack); service.startOperationCall(loadTrack);
url.text = "";
} }
} }
} }

View File

@@ -19,6 +19,7 @@
#include <QProcess> #include <QProcess>
#include <QJsonDocument> #include <QJsonDocument>
#include <QJsonObject> #include <QJsonObject>
#include <QtConcurrent/QtConcurrentRun>
MiniMediaPlayer::MiniMediaPlayer(QObject *parent) : QObject(parent) MiniMediaPlayer::MiniMediaPlayer(QObject *parent) : QObject(parent)
{ {
@@ -40,9 +41,12 @@ bool MiniMediaPlayer::nextTrack()
if(playlist.size() > 1) if(playlist.size() > 1)
{ {
playlist.pop_front(); playlist.pop_front();
m_player->stop(); m_player->pause();
m_player->setPosition(0);
QtConcurrent::run([this]() {
m_player->setMedia(getStreamUrlFromUrl(playlist.first().second)); m_player->setMedia(getStreamUrlFromUrl(playlist.first().second));
emit playlistChanged(getTrackNames()); emit playlistChanged(getTrackNames());
});
return true; return true;
} }
else if(playlist.size() == 1) else if(playlist.size() == 1)
@@ -98,25 +102,25 @@ void MiniMediaPlayer::positionChanged(qint64 position)
emit trackPositionChanged(position); emit trackPositionChanged(position);
} }
bool MiniMediaPlayer::addURLToPlaylist(QUrl mediaUrl) void MiniMediaPlayer::addURLToPlaylist(QUrl mediaUrl)
{ {
QtConcurrent::run([this,mediaUrl](){
if(isValidMediaUrl(mediaUrl)) if(isValidMediaUrl(mediaUrl))
{ {
bool shouldStartPlaying = false; bool shouldStartPlaying = false;
if(playlist.size() == 0) shouldStartPlaying = true; if(playlist.size() == 0) shouldStartPlaying = true;
QList<QPair<QString,QUrl>> tracks = getStreamTitlesAndUrlsFromUrl(mediaUrl); QList<QPair<QString,QUrl>> tracks = getStreamTitlesAndUrlsFromUrl(mediaUrl);
if(tracks.size() > 0)
{
playlist.append(tracks); playlist.append(tracks);
emit playlistChanged(getTrackNames()); emit playlistChanged(getTrackNames());
}
if(shouldStartPlaying && playlist.size() > 0) if(shouldStartPlaying && playlist.size() > 0)
{ {
m_player->setMedia(getStreamUrlFromUrl(playlist.first().second)); m_player->setMedia(getStreamUrlFromUrl(playlist.first().second));
} }
if(tracks.size() > 0)
{
return true;
} }
} });
return false;
} }
QUrl MiniMediaPlayer::getStreamUrlFromUrl(QUrl mediaUrl) QUrl MiniMediaPlayer::getStreamUrlFromUrl(QUrl mediaUrl)

View File

@@ -31,7 +31,7 @@ class MiniMediaPlayer : public QObject
public: public:
MiniMediaPlayer(QObject *parent = 0); MiniMediaPlayer(QObject *parent = 0);
bool addURLToPlaylist(QUrl mediaUrl); void addURLToPlaylist(QUrl mediaUrl);
QList<QString> getTrackNames(); QList<QString> getTrackNames();

View File

@@ -43,7 +43,8 @@ public:
{ {
if(paramaters.contains("URL")) if(paramaters.contains("URL"))
{ {
setResult(player->addURLToPlaylist(paramaters["URL"].toUrl())); player->addURLToPlaylist(paramaters["URL"].toUrl());
emitResult();
} }
} }
} }

View File

@@ -57,7 +57,8 @@ public:
} }
else if(message.size() == 3 && message[1] == "addURLToPlaylist") else if(message.size() == 3 && message[1] == "addURLToPlaylist")
{ {
openSocket.write(player->addURLToPlaylist(QUrl(message[2]))?"0":"1"); player->addURLToPlaylist(QUrl(message[2]));
openSocket.write("0");
} }
else else
{ {