Write database to the DataLocation
2 files changed, 27 insertions, 4 deletions
diff --git a/src/Cache.cpp b/src/Cache.cpp
index 7e25fed2..6b3067db 100644
--- a/src/Cache.cpp
+++ b/src/Cache.cpp
@@ -169,13 +169,35 @@ Cache::setup()
nhlog::db()->debug("setting up cache");
+ // Previous location of the cache directory
+ auto oldCache = QString("%1/%2%3")
+ .arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation))
+ .arg(QString::fromUtf8(localUserId_.toUtf8().toHex()))
+ .arg(QString::fromUtf8(settings->profile().toUtf8().toHex()));
+
cacheDirectory_ = QString("%1/%2%3")
- .arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation))
+ .arg(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation))
.arg(QString::fromUtf8(localUserId_.toUtf8().toHex()))
.arg(QString::fromUtf8(settings->profile().toUtf8().toHex()));
bool isInitial = !QFile::exists(cacheDirectory_);
+ // NOTE: If both cache directories exist it's better to do nothing: it
+ // could mean a previous migration failed or was interrupted.
+ bool needsMigration = isInitial && QFile::exists(oldCache);
+
+ if (needsMigration) {
+ nhlog::db()->info("found old state directory, migrating");
+ if (!QDir().rename(oldCache, cacheDirectory_)) {
+ throw std::runtime_error(("Unable to migrate the old state directory (" +
+ oldCache + ") to the new location (" +
+ cacheDirectory_ + ")")
+ .toStdString()
+ .c_str());
+ }
+ nhlog::db()->info("completed state migration");
+ }
+
env_ = lmdb::env::create();
env_.set_mapsize(DB_SIZE);
env_.set_max_dbs(MAX_DBS);
diff --git a/src/main.cpp b/src/main.cpp
index b1dfa9f6..a890a6fd 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -93,9 +93,9 @@ screenCenter(int width, int height)
}
void
-createCacheDirectory()
+createStandardDirectory(QStandardPaths::StandardLocation path)
{
- auto dir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
+ auto dir = QStandardPaths::writableLocation(path);
if (!QDir().mkpath(dir)) {
throw std::runtime_error(
@@ -188,7 +188,8 @@ main(int argc, char *argv[])
http::init();
- createCacheDirectory();
+ createStandardDirectory(QStandardPaths::CacheLocation);
+ createStandardDirectory(QStandardPaths::AppDataLocation);
registerSignalHandlers();
|