Write database to the DataLocation

This commit is contained in:
rnhmjoj 2021-01-19 19:44:22 +01:00
parent 049278bc35
commit 0e628290af
No known key found for this signature in database
GPG key ID: BFBAF4C975F76450
2 changed files with 27 additions and 4 deletions

View file

@ -169,13 +169,35 @@ Cache::setup()
nhlog::db()->debug("setting up cache"); 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") cacheDirectory_ = QString("%1/%2%3")
.arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)) .arg(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation))
.arg(QString::fromUtf8(localUserId_.toUtf8().toHex())) .arg(QString::fromUtf8(localUserId_.toUtf8().toHex()))
.arg(QString::fromUtf8(settings->profile().toUtf8().toHex())); .arg(QString::fromUtf8(settings->profile().toUtf8().toHex()));
bool isInitial = !QFile::exists(cacheDirectory_); 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_ = lmdb::env::create();
env_.set_mapsize(DB_SIZE); env_.set_mapsize(DB_SIZE);
env_.set_max_dbs(MAX_DBS); env_.set_max_dbs(MAX_DBS);

View file

@ -93,9 +93,9 @@ screenCenter(int width, int height)
} }
void void
createCacheDirectory() createStandardDirectory(QStandardPaths::StandardLocation path)
{ {
auto dir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); auto dir = QStandardPaths::writableLocation(path);
if (!QDir().mkpath(dir)) { if (!QDir().mkpath(dir)) {
throw std::runtime_error( throw std::runtime_error(
@ -188,7 +188,8 @@ main(int argc, char *argv[])
http::init(); http::init();
createCacheDirectory(); createStandardDirectory(QStandardPaths::CacheLocation);
createStandardDirectory(QStandardPaths::AppDataLocation);
registerSignalHandlers(); registerSignalHandlers();