#include "SessionStore.h" #include #include #include #include #include #include SessionStore::SessionStore(QObject* parent) : QObject(parent) {} QString SessionStore::sessionPath() { // XDG Base Directory spec: configuration lives under $XDG_CONFIG_HOME, // defaulting to ~/.config. QString configDirectory = QString::fromLocal8Bit(qgetenv("XDG_CONFIG_HOME")); if (configDirectory.isEmpty()) { configDirectory = QDir::home().filePath(QStringLiteral(".config")); } return QDir(configDirectory).filePath( QStringLiteral("xenomorphic/session.json")); } QVariantMap SessionStore::load() { QFile file(sessionPath()); if (!file.open(QIODevice::ReadOnly)) { return {}; } const QJsonDocument document = QJsonDocument::fromJson(file.readAll()); if (!document.isObject()) { return {}; } return document.object().toVariantMap(); } bool SessionStore::save(const QVariantMap& root) { const QString path = sessionPath(); if (!QDir().mkpath(QFileInfo(path).absolutePath())) { return false; } QSaveFile file(path); if (!file.open(QIODevice::WriteOnly)) { return false; } const QByteArray data = QJsonDocument::fromVariant(root).toJson(QJsonDocument::Indented); if (file.write(data) != data.size()) { return false; } return file.commit(); }