From e9e54f8ff28f4bf7365ae74c0ba51c96d7938638 Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 1 Sep 2018 23:27:19 +0200 Subject: Create a local playlist for external players Unfortunately, ffmpeg is the only player which doesn't suck too much, but it won't take more than one file :( --- fswidget.cpp | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'fswidget.cpp') diff --git a/fswidget.cpp b/fswidget.cpp index 0215e3a..1e7f2b6 100644 --- a/fswidget.cpp +++ b/fswidget.cpp @@ -37,6 +37,8 @@ FSWidget::FSWidget(QWidget *parent) : QWidget(parent) { mMovieWizard->setMinimumWidth(1024); mViewer = new Viewer; mNewPicsDlg = new NewPicsDialog; + mPlayer = new QProcess(qApp); + connect(mPlayer, QOverload::of(&QProcess::finished), this, &FSWidget::doPlay); setPalette(qApp->palette()); setupWidget(); } @@ -588,19 +590,41 @@ void FSWidget::playSelected(int count, QString player){ wv->setVisible(true); wv->player()->play(); }else{ + if(mPlayer->state() != QProcess::NotRunning){ + int retval = QMessageBox::question(this, tr("Terminate player?"), tr("Terminate running instance?")); + if(retval == QMessageBox::No){ + return; + } + mPlayer->terminate(); + mPlayer->waitForFinished(); + } if(player.isEmpty()){ QSettings s; player = s.value("programs_movieviewer/default").toString(); } QPair playerData = Helper::programData("movieviewer", player); - QStringList args = playerData.second; + mPlayerArgs = playerData.second; + mPlaylist.clear(); for(int i = 0; i < count; ++i){ - args << paths; + mPlaylist << paths; } - QProcess::startDetached(playerData.first, args); + mPlayer->setProgram(playerData.first); + doPlay(); } } +void FSWidget::doPlay(){ + if(mPlaylist.isEmpty()){ + emit message(tr("Playlist is empty!")); + return; + } + QStringList curArgs = mPlayerArgs; + curArgs << mPlaylist.takeFirst(); + mPlayer->setArguments(curArgs); + mPlayer->start(); + +} + void FSWidget::playQt(){ QModelIndexList selected = mFileView->selectionModel()->selectedRows(); if(selected.isEmpty()){ -- cgit v1.2.3-70-g09d2