mirror of
https://gitlab.com/mbunkus/mkvtoolnix.git
synced 2025-01-12 21:21:05 +00:00
GUI: only clean the cache once per version
The process can take a lot of time, therefore only do it if there's a reasonable chance that files will have to be cleaned up — which is after a version change. Another piece of the fix for #1860.
This commit is contained in:
parent
830c64ee3a
commit
5fe1b0be03
3
NEWS.md
3
NEWS.md
@ -28,7 +28,8 @@
|
||||
## Bug fixes
|
||||
|
||||
* GUI: the cache cleanup process that's run automatically when the GUI starts
|
||||
no longer blocks file identification until it is finished. Fixes #1860.
|
||||
no longer blocks file identification until it is finished. Additionally the
|
||||
process will only be run once per release of MKVToolNix. Fixes #1860.
|
||||
* GUI: certain failures during file identification that can be traced to
|
||||
broken installations (e.g. mkvmerge being too old) won't be stored in the
|
||||
cache anymore. Without this fix the GUI would still use the cached failed
|
||||
|
@ -74,7 +74,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
new TaskbarProgress{this};
|
||||
#endif
|
||||
|
||||
QtConcurrent::run(Util::Cache::cleanOldCacheFiles);
|
||||
runCacheCleanupOncePerVersion();
|
||||
|
||||
Util::InstallationChecker::checkInstallation();
|
||||
}
|
||||
@ -608,4 +608,12 @@ MainWindow::displayInstallationProblems(Util::InstallationChecker::Problems cons
|
||||
.exec();
|
||||
}
|
||||
|
||||
void
|
||||
MainWindow::runCacheCleanupOncePerVersion()
|
||||
const {
|
||||
Util::Settings::runOncePerVersion(Q("cacheCleanup"), []() {
|
||||
QtConcurrent::run(Util::Cache::cleanOldCacheFiles);
|
||||
});
|
||||
}
|
||||
|
||||
}}
|
||||
|
@ -126,6 +126,7 @@ protected:
|
||||
virtual boost::optional<bool> filterWheelEventForStrongFocus(QObject *watched, QEvent *event);
|
||||
|
||||
virtual void silentlyCheckForUpdates();
|
||||
virtual void runCacheCleanupOncePerVersion() const;
|
||||
};
|
||||
|
||||
}}
|
||||
|
@ -619,4 +619,23 @@ Settings::lastOpenDirPath()
|
||||
return Util::dirPath(m_lastOpenDir);
|
||||
}
|
||||
|
||||
void
|
||||
Settings::runOncePerVersion(QString const &topic,
|
||||
std::function<void()> worker) {
|
||||
auto reg = registry();
|
||||
auto key = Q("runOncePerVersion/%1").arg(topic);
|
||||
|
||||
auto lastRunInVersion = reg->value(key).toString();
|
||||
auto lastRunInVersionNumber = version_number_t{to_utf8(lastRunInVersion)};
|
||||
auto currentVersionNumber = get_current_version();
|
||||
|
||||
if ( lastRunInVersionNumber.valid
|
||||
&& !(lastRunInVersionNumber < currentVersionNumber))
|
||||
return;
|
||||
|
||||
reg->setValue(key, Q(currentVersionNumber.to_string()));
|
||||
|
||||
worker();
|
||||
}
|
||||
|
||||
}}}
|
||||
|
@ -188,6 +188,8 @@ public:
|
||||
static void change(std::function<void(Settings &)> worker);
|
||||
static std::unique_ptr<QSettings> registry();
|
||||
|
||||
static void runOncePerVersion(QString const &topic, std::function<void()> worker);
|
||||
|
||||
static QString exeWithPath(QString const &exe);
|
||||
|
||||
static void migrateFromRegistry();
|
||||
|
Loading…
Reference in New Issue
Block a user