From 66a5b394d762a1a24723438fca3ce3aea27e43ad Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Fri, 5 Jul 2019 21:41:21 +0200 Subject: Preferences: warn if ffmpeg can't be loaded In the preferences widget warn the user when they enter a non-executable path to ffmpeg. Thus they don't have to start thumbnailing just to find out that the path is wrong. Signed-off-by: Berthold Stoeger --- .../preferences/preferences_defaults.cpp | 28 +++++++++++++++++++++- desktop-widgets/preferences/preferences_defaults.h | 2 ++ 2 files changed, 29 insertions(+), 1 deletion(-) (limited to 'desktop-widgets') diff --git a/desktop-widgets/preferences/preferences_defaults.cpp b/desktop-widgets/preferences/preferences_defaults.cpp index 7ea704b96..c11927af8 100644 --- a/desktop-widgets/preferences/preferences_defaults.cpp +++ b/desktop-widgets/preferences/preferences_defaults.cpp @@ -8,6 +8,8 @@ #include "core/settings/qPrefDiveComputer.h" #include +#include +#include PreferencesDefaults::PreferencesDefaults(): AbstractPreferencesWidget(tr("General"), QIcon(":preferences-other-icon"), 0 ), ui(new Ui::PreferencesDefaults()) { @@ -45,13 +47,37 @@ void PreferencesDefaults::on_localDefaultFile_toggled(bool toggle) ui->chooseFile->setEnabled(toggle); } +void PreferencesDefaults::checkFfmpegExecutable() +{ + QString s = ui->ffmpegExecutable->text().trimmed(); + + // If the user didn't provide a string they probably didn't intend to run ffmeg, + // so let's not give an error message. + if (s.isEmpty()) + return; + + // Try to execute ffmpeg. But wait at most 2 sec for startup and execution + // so that the UI doesn't hang unnecessarily. + QProcess ffmpeg; + ffmpeg.start(s); + if (!ffmpeg.waitForStarted(2000) || !ffmpeg.waitForFinished(3000)) + QMessageBox::warning(this, tr("Warning"), tr("Couldn't execute ffmpeg at given location. Thumbnailing will not work.")); +} + void PreferencesDefaults::on_ffmpegFile_clicked() { QFileInfo fi(system_default_filename()); QString ffmpegFileName = QFileDialog::getOpenFileName(this, tr("Select ffmpeg executable")); - if (!ffmpegFileName.isEmpty()) + if (!ffmpegFileName.isEmpty()) { ui->ffmpegExecutable->setText(ffmpegFileName); + checkFfmpegExecutable(); + } +} + +void PreferencesDefaults::on_ffmpegExecutable_editingFinished() +{ + checkFfmpegExecutable(); } void PreferencesDefaults::on_extractVideoThumbnails_toggled(bool toggled) diff --git a/desktop-widgets/preferences/preferences_defaults.h b/desktop-widgets/preferences/preferences_defaults.h index 0fa7bdc1b..48e633ceb 100644 --- a/desktop-widgets/preferences/preferences_defaults.h +++ b/desktop-widgets/preferences/preferences_defaults.h @@ -21,12 +21,14 @@ public slots: void on_btnUseDefaultFile_toggled(bool toggled); void on_localDefaultFile_toggled(bool toggled); void on_ffmpegFile_clicked(); + void on_ffmpegExecutable_editingFinished(); void on_extractVideoThumbnails_toggled(bool toggled); void on_resetSettings_clicked(); void on_resetRememberedDCs_clicked(); private: Ui::PreferencesDefaults *ui; + void checkFfmpegExecutable(); }; -- cgit v1.2.3-70-g09d2