From ca05bbce4d564ff6383f1cdae3d0584c4fc49237 Mon Sep 17 00:00:00 2001 From: tasgoon Date: Mon, 16 May 2016 23:28:44 -0400 Subject: [PATCH] data storage work --- datamanager.cpp | 62 +++++++++++++++++++++++++++++++++--------------- datamanager.h | 25 ++++++++++++------- mainwindow.cpp | 16 +++++++++---- mainwindow.h | 6 ++++- profile.cpp | 7 +++--- profile.h | 2 +- profilemanager.h | 2 -- 7 files changed, 81 insertions(+), 39 deletions(-) diff --git a/datamanager.cpp b/datamanager.cpp index e300d30..6f08dbd 100644 --- a/datamanager.cpp +++ b/datamanager.cpp @@ -1,24 +1,48 @@ #include "datamanager.h" -DataManager::DataManager(QFile file) +DataManager::DataManager(QString filename) { - if (file.exists() && file.size() > 0) { - file.open(QIODevice::ReadOnly); - jsonDocument = QJsonDocument::fromJson(file.readAll()); - if (jsonDocument != nullptr) { - jsonObject = jsonDocument.object(); - if (jsonObject["instances"].isArray()) { - profileArray = jsonObject["instances"].toArray(); - for (int i = 0; i < profileArray.size(); i++) { - profiles.push_back(Profile::fromJson(profileArray.at(i))); - } - } - } - else { - jsonDocument = QJsonDocument(); - jsonObject = defaultObject; - profileArray = defaultObject["instances"]; - } - file.close(); + file = new QFile(filename); + qDebug(file->fileName().toStdString().c_str()); + if (file->exists() && file->size() > 0) { + file->open(QIODevice::ReadOnly); + jsonObject = QJsonDocument::fromJson(file->readAll()).object(); + file->close(); + } + else { + jsonObject = QJsonObject(); } } + +void DataManager::loadProfiles() { + if (jsonObject["instances"].isArray()) { + QJsonArray profileArray = jsonObject["instances"].toArray(); + for (int i = 0; i < profileArray.size(); i++) { + manager->addProfile(Profile::fromJson(profileArray.at(i))); + } + } +} + +void DataManager::saveProfiles() +{ + QJsonArray profileArray = QJsonArray(); + for (Profile profile : manager->profiles) { + profileArray.append(profile.toJson()); + } + jsonObject["instances"] = profileArray; + + qDebug("Saved profiles"); + + save(); +} + +void DataManager::save() +{ + file->open(QIODevice::WriteOnly | QIODevice::Truncate); + QJsonDocument document; + document.setObject(jsonObject); + file->write(document.toJson()); + file->close(); + + qDebug("Saved"); +} diff --git a/datamanager.h b/datamanager.h index 7cb9651..ee29621 100644 --- a/datamanager.h +++ b/datamanager.h @@ -1,25 +1,34 @@ #ifndef DATAMANAGER_H #define DATAMANAGER_H +#include "profilemanager.h" + +#include #include +#include #include #include #include +const QJsonObject DEFAULT_OBJECT +{ + {"instances", QJsonArray()} +}; +//QString DEFAULT_PATH = QDir::homePath() + "/.minetest/minetestlauncher.conf"; + class DataManager { public: - DataManager(QFile); - - QJsonObject defaultObject - { - {"instances", QJsonArray()} - }; + DataManager(QString); + inline void setManager(ProfileManager *mgr) { manager = mgr; } + void loadProfiles(); + void saveProfiles(); + void save(); private: - QJsonDocument jsonDocument; + ProfileManager *manager; QJsonObject jsonObject; - QJsonArray profileArray; + QFile *file; }; #endif // DATAMANAGER_H diff --git a/mainwindow.cpp b/mainwindow.cpp index 35d7821..2c75754 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,6 +1,8 @@ #include "mainwindow.h" #include "ui_mainwindow.h" +#include + MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) @@ -9,6 +11,8 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->createBtn, SIGNAL(clicked()), this, SLOT(newProfile())); connect(ui->deleteBtn, SIGNAL(clicked()), this, SLOT(deleteSelected())); connect(ui->playBtn, SIGNAL(clicked()), this, SLOT(playSelected())); + + dataManager->setManager(profileManager); } MainWindow::~MainWindow() @@ -18,17 +22,19 @@ MainWindow::~MainWindow() void MainWindow::newProfile() { - CreateDialog::newProfile(manager); - manager->refreshList(ui->comboBox); + CreateDialog::newProfile(profileManager); + profileManager->refreshList(ui->comboBox); + dataManager->saveProfiles(); } void MainWindow::deleteSelected() { - manager->deleteByName(ui->comboBox->currentText()); - manager->refreshList(ui->comboBox); + profileManager->deleteByName(ui->comboBox->currentText()); + profileManager->refreshList(ui->comboBox); + dataManager->saveProfiles(); } void MainWindow::playSelected() { - manager->getByName(ui->comboBox->currentText()).play(ui->tabWidget); + profileManager->getByName(ui->comboBox->currentText()).play(ui->tabWidget); } diff --git a/mainwindow.h b/mainwindow.h index 5896e9c..761069b 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -2,7 +2,10 @@ #define MAINWINDOW_H #include +#include +#include #include "createdialog.h" +#include "datamanager.h" namespace Ui { class MainWindow; @@ -23,7 +26,8 @@ private slots: private: Ui::MainWindow *ui; - ProfileManager *manager = new ProfileManager(); + DataManager *dataManager = new DataManager(QDir::homePath() + "/.minetest/minetestlauncher.conf"); + ProfileManager *profileManager = new ProfileManager(); }; #endif // MAINWINDOW_H diff --git a/profile.cpp b/profile.cpp index 5df7daf..9c32550 100644 --- a/profile.cpp +++ b/profile.cpp @@ -6,16 +6,17 @@ Profile::Profile(QString n, QString v) version = v; } -Profile Profile::fromJson(QJsonObject obj) +Profile Profile::fromJson(QJsonValue val) { + QJsonObject obj = val.toObject(); return Profile(obj.value("name").toString(), obj.value("version").toString()); } QJsonObject Profile::toJson() { QJsonObject object; - object["name"] = name; - object["version"] = version; + object.insert("name", name); + object.insert("version", version); return object; } diff --git a/profile.h b/profile.h index f7b1038..30995ab 100644 --- a/profile.h +++ b/profile.h @@ -13,7 +13,7 @@ class Profile { public: Profile(QString, QString); - static Profile fromJson(QJsonObject); + static Profile fromJson(QJsonValue); QJsonObject toJson(); QDir getPath(); diff --git a/profilemanager.h b/profilemanager.h index 9fa657a..5cb40de 100644 --- a/profilemanager.h +++ b/profilemanager.h @@ -16,8 +16,6 @@ public: bool deleteByName(QString); void refreshList(QComboBox*); vector profiles; - - }; #endif // PROFILEMANAGER_H