From 0f3a60aa49e9a19f28d8c0f510cbbc5bee085d52 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sun, 16 Aug 2020 17:08:04 +1000 Subject: [PATCH] cache: save disk cache index on a regular interval in case of crashing DiskManager tries to keep track of all files made across sessions in an index, but the index was only saved on close. This meant if the program crashed (not an uncommon occurrence at the moment), it would "forget" about any files it had made that session. --- app/config/config.cpp | 1 + app/render/diskmanager.cpp | 9 +++++++++ app/render/diskmanager.h | 6 ++++++ 3 files changed, 16 insertions(+) diff --git a/app/config/config.cpp b/app/config/config.cpp index 4cf0aa63c..4bf04fc9b 100644 --- a/app/config/config.cpp +++ b/app/config/config.cpp @@ -67,6 +67,7 @@ void Config::SetDefaults() SetEntryInternal(QStringLiteral("HoverFocus"), NodeParam::kBoolean, false); SetEntryInternal(QStringLiteral("AudioScrubbing"), NodeParam::kBoolean, true); SetEntryInternal(QStringLiteral("AutorecoveryInterval"), NodeParam::kInt, 1); + SetEntryInternal(QStringLiteral("DiskCacheSaveInterval"), NodeParam::kInt, 10000); SetEntryInternal(QStringLiteral("Language"), NodeParam::kString, QLocale::system().name()); SetEntryInternal(QStringLiteral("ScrollZooms"), NodeParam::kBoolean, false); SetEntryInternal(QStringLiteral("EnableSeekToImport"), NodeParam::kBoolean, false); diff --git a/app/render/diskmanager.cpp b/app/render/diskmanager.cpp index 2cdbf2024..bd75bf077 100644 --- a/app/render/diskmanager.cpp +++ b/app/render/diskmanager.cpp @@ -189,6 +189,10 @@ DiskCacheFolder::DiskCacheFolder(const QString &path, QObject *parent) : QObject(parent) { SetPath(path); + + save_timer_.setInterval(Config::Current()[QStringLiteral("DiskCacheSaveInterval")].toInt()); + connect(&save_timer_, &QTimer::timeout, this, &DiskCacheFolder::SaveDiskCacheIndex); + save_timer_.start(); } DiskCacheFolder::~DiskCacheFolder() @@ -335,6 +339,11 @@ void DiskCacheFolder::CloseCacheFolder() } // Save current cache index + SaveDiskCacheIndex(); +} + +void DiskCacheFolder::SaveDiskCacheIndex() +{ QFile cache_index_file(index_path_); if (cache_index_file.open(QFile::WriteOnly)) { diff --git a/app/render/diskmanager.h b/app/render/diskmanager.h index 71ff30bac..9064a0d33 100644 --- a/app/render/diskmanager.h +++ b/app/render/diskmanager.h @@ -24,6 +24,7 @@ #include #include #include +#include #include "common/define.h" #include "project/project.h" @@ -97,6 +98,11 @@ private: bool clear_on_close_; + QTimer save_timer_; + +private slots: + void SaveDiskCacheIndex(); + }; class DiskManager : public QObject