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 +++++++++++++++++++++++++++--- fswidget.h | 5 +++++ 2 files changed, 32 insertions(+), 3 deletions(-) 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()){ diff --git a/fswidget.h b/fswidget.h index 25953a9..b2228d8 100644 --- a/fswidget.h +++ b/fswidget.h @@ -10,6 +10,7 @@ class QStandardItemModel; class QSortFilterProxyModel; class QContextMenuEvent; class QAction; +class QProcess; class NewMovieWizard; class NewPicsDialog; class Viewer; @@ -43,6 +44,7 @@ class FSWidget : public QWidget { void doubleClicked(const QModelIndex &idx); void preview(); void playSelected(int count, QString player); + void doPlay(); void playQt(); void selectFilter(); void calculateSelectionChanged(); @@ -58,6 +60,9 @@ class FSWidget : public QWidget { void setupWidget(); QComboBox *mDirCB; QComboBox *mFilterCB; + QProcess *mPlayer; + QStringList mPlayerArgs; + QStringList mPlaylist; SmView *mFileView; QStandardItemModel *mModel; FSProxy *mProxy; -- cgit v1.2.3-70-g09d2