diff --git a/misc/org.kde.dragonplayer.desktop b/misc/org.kde.dragonplayer.desktop --- a/misc/org.kde.dragonplayer.desktop +++ b/misc/org.kde.dragonplayer.desktop @@ -110,7 +110,7 @@ Icon=dragonplayer X-DocPath=dragonplayer/index.html TryExec=dragon -Exec=dragon %u +Exec=dragon %U MimeType=video/ogg;video/x-theora+ogg;video/x-ogm+ogg;video/x-ms-wmv;video/x-msvideo;video/x-ms-asf;video/x-matroska;video/mpeg;video/avi;video/quicktime;video/vnd.rn-realvideo;video/x-flic;video/mp4;video/x-flv;video/webm;application/x-cd-image; Categories=Qt;KDE;AudioVideo;Player; X-DBUS-StartupType=Unique diff --git a/src/app/main.cpp b/src/app/main.cpp --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -67,7 +67,7 @@ parser.addHelpOption(); parser.addOption(QCommandLineOption("play-dvd", i18n("Play DVD Video"))); - parser.addPositionalArgument("url", i18n("Play 'URL'"), QStringLiteral("+[URL]")); + parser.addPositionalArgument("urls", i18n("Play 'URL'"), QStringLiteral("+[URL]")); parser.process(app); aboutData.processCommandLine(&parser); @@ -79,10 +79,10 @@ QList urls; const QStringList args = parser.positionalArguments(); - if (!args.isEmpty()) { - urls.append(QUrl::fromUserInput(args.first(), - QDir::currentPath(), - QUrl::AssumeLocalFile)); + for (auto &arg : args) { + urls << QUrl::fromUserInput(arg, + QDir::currentPath(), + QUrl::AssumeLocalFile); } app.newInstance(parser.isSet("play-dvd"), urls); diff --git a/src/app/mainWindow.h b/src/app/mainWindow.h --- a/src/app/mainWindow.h +++ b/src/app/mainWindow.h @@ -73,6 +73,7 @@ public slots: bool open(const QUrl & ); + bool open(const QList & ); void playDisc(); void openFileDialog(); void openStreamDialog(); @@ -101,7 +102,7 @@ void toggleUnique( bool ); private: - bool load(const QUrl & ); + bool load(const QList & ); void setupActions(); void updateSliders(); void updateTitleBarText(); diff --git a/src/app/mainWindow.cpp b/src/app/mainWindow.cpp --- a/src/app/mainWindow.cpp +++ b/src/app/mainWindow.cpp @@ -529,7 +529,7 @@ { qDebug() << "Opening" << url; - if( load( url ) ) { + if( load({ url }) ) { const int offset = (TheStream::hasProfile() && isFresh()) // adjust offset if we have session history for this video ? TheStream::profile().readEntry( "Position", 0 ) @@ -544,51 +544,68 @@ } bool -MainWindow::load( const QUrl &url ) +MainWindow::open(const QList &urls) { - //FileWatch the file that is opened - - if( url.isEmpty() ) { - MessageBox::sorry( i18n( "Dragon Player was asked to open an empty URL; it cannot." ) ); - return false; + if (load(urls)) { + engine()->loadSettings(); + updateSliders(); + return engine()->play(); } - bool ret = false; + return false; +} - PlaylistFile playlist( url ); - if( playlist.isPlaylist() ) { - //TODO: problem is we return out of the function - //statusBar()->message( i18n("Parsing playlist file...") ); +static QList determineUrl(const QUrl &url) +{ + if (!url.isValid()) { + return {}; + } - if( playlist.isValid() ) - ret = engine()->load( playlist.contents() ); - else { - MessageBox::sorry( playlist.error() ); - return false; + PlaylistFile playlist(url); + if (playlist.isPlaylist()) { + if (playlist.isValid()) { + return playlist.contents(); + } else { + return {}; } } - // local protocols like nepomuksearch:/ are not supported by xine - // check if an UDS_LOCAL_PATH is defined. - if (!ret && KProtocolInfo::protocolClass(url.scheme()) == QLatin1String(":local")) { - //#define UDS_LOCAL_PATH (7 | KIO::UDS_STRING) + if (url.isLocalFile()) { + return { url }; + } + + if (KProtocolInfo::protocolClass(url.scheme()) == QLatin1String(":local")) { KIO::StatJob * job = KIO::stat(url, KIO::StatJob::SourceSide, 2); - KJobWidgets::setWindow(job, this); if (job->exec()) { KIO::UDSEntry e = job->statResult(); - const QString path = e.stringValue( KIO::UDSEntry::UDS_LOCAL_PATH ); - if( !path.isEmpty() ) - ret = engine()->load( QUrl::fromLocalFile( path ) ); + const QString path = e.stringValue(KIO::UDSEntry::UDS_LOCAL_PATH); + if (!path.isEmpty()) { + return { QUrl::fromLocalFile(path) }; + } } - job->deleteLater(); + return {}; + } + + return { url }; +} + +bool +MainWindow::load(const QList &urls) +{ + QList resultUrls; + + for (auto &url : urls) { + resultUrls << determineUrl(url); + } + + if (resultUrls.isEmpty()) { + MessageBox::sorry(i18n("Dragon Player was asked to open an empty URL; it cannot.")); + return false; } - //let xine handle invalid, etc, QUrlS - //TODO it handles non-existing files with bad error message - if (!ret) - ret = engine()->load( url ); + auto ret = engine()->load(resultUrls); - if( ret ) { + if (ret) { m_currentWidget = nullptr; m_loadView->setThumbnail(nullptr); } @@ -649,7 +666,7 @@ qDebug() << Q_FUNC_INFO << "URL empty"; return; } else { - open( urls.first() ); + open(urls); } } @@ -795,7 +812,7 @@ MainWindow::dropEvent( QDropEvent *e ) { if( e->mimeData()->hasUrls() ) - this->open( e->mimeData()->urls().first() ); + this->open( e->mimeData()->urls() ); else engineMessage( i18n("Sorry, no media was found in the drop") ); } diff --git a/src/app/playerApplication.cpp b/src/app/playerApplication.cpp --- a/src/app/playerApplication.cpp +++ b/src/app/playerApplication.cpp @@ -78,8 +78,7 @@ else if (playDisc) m_mainWindow->playDisc(); else if (!uris.isEmpty()) { - m_mainWindow->open(uris.first()); - m_mainWindow->adjustSize(); + m_mainWindow->open(uris); } m_mainWindow->show(); diff --git a/src/app/stateChange.cpp b/src/app/stateChange.cpp --- a/src/app/stateChange.cpp +++ b/src/app/stateChange.cpp @@ -137,6 +137,7 @@ void MainWindow::engineMediaChanged(Phonon::MediaSource /*newSource*/) { + updateSliders(); m_audioView->update(); // update recently played list diff --git a/src/app/videoWindow.cpp b/src/app/videoWindow.cpp --- a/src/app/videoWindow.cpp +++ b/src/app/videoWindow.cpp @@ -201,7 +201,7 @@ eject(); QList tmpUrls = urls; m_media->setCurrentSource(tmpUrls.takeFirst()); - m_media->enqueue(tmpUrls); + m_media->setQueue(tmpUrls); m_justLoaded = true; m_adjustedSize=false;