diff -r 80b319c1f0d0 main/MainWindow.cpp --- a/main/MainWindow.cpp Thu Nov 21 14:22:38 2019 +0000 +++ b/main/MainWindow.cpp Fri Nov 22 11:07:06 2019 +0000 @@ -54,10 +54,13 @@ #include "data/fileio/CSVFormat.h" #include "data/fileio/CSVFileWriter.h" #include "data/fileio/MIDIFileWriter.h" +#include "data/fileio/AudioFileReaderFactory.h" #include "rdf/RDFExporter.h" #include "widgets/RangeInputDialog.h" #include "widgets/ActivityLog.h" +#include "widgets/InteractiveFileFinder.h" +#include "widgets/ProgressDialog.h" // For version information #include "vamp/vamp.h" @@ -1761,11 +1764,28 @@ if (orig == "") orig = "."; else orig = QFileInfo(orig).absoluteDir().canonicalPath(); - QString path = getOpenFileName(FileFinder::AnyFile); - + QString path = getOpenFileName(FileFinder::SessionOrAudioFile); if (path.isEmpty()) return; - FileOpenStatus status = openPath(path, ReplaceSession); + FileSource source(path); + + FileOpenStatus status = FileOpenFailed; + + if (source.isAvailable()) { + + QString ext = source.getExtension().toLower(); + + bool isAudio = + AudioFileReaderFactory::getKnownExtensions().contains(ext); + + bool isSession = InteractiveFileFinder::getInstance()-> + getApplicationSessionExtension() == ext; + + if (isAudio || isSession) { + source.waitForData(); + status = open(source, ReplaceSession); + } + } if (status == FileOpenFailed) { QMessageBox::critical(this, tr("Failed to open file"), @@ -1790,12 +1810,33 @@ QLineEdit::Normal, lastLocation, &ok); if (!ok) return; + if (text.isEmpty()) return; settings.setValue("lastremote", text); - if (text.isEmpty()) return; - - FileOpenStatus status = openPath(text, ReplaceSession); + FileOpenStatus status = FileOpenFailed; + + { + ProgressDialog dialog(tr("Opening file or URL..."), true, 2000, this); + connect(&dialog, SIGNAL(showing()), this, SIGNAL(hideSplash())); + FileSource source(text, &dialog); + + if (source.isAvailable()) { + + QString ext = source.getExtension().toLower(); + + bool isAudio = + AudioFileReaderFactory::getKnownExtensions().contains(ext); + + bool isSession = InteractiveFileFinder::getInstance()-> + getApplicationSessionExtension() == ext; + + if (isAudio || isSession) { + source.waitForData(); + status = open(source, ReplaceSession); + } + } + } if (status == FileOpenFailed) { QMessageBox::critical(this, tr("Failed to open location"),