aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCrystalwarrior <Varsash@Gmail.com>2022-07-30 05:06:34 +0300
committerGitHub <noreply@github.com>2022-07-30 05:06:34 +0300
commitd8c89f056bcf7326519784633c374fdda5999736 (patch)
tree5e76b60cc47122970fe50e1cc656acedc43fed64
parentf896475de414128fbc0f914224548e9dc5bd0cb3 (diff)
Add private evidence autosaving into inventories/autosave.ini (#778)
* Add private evidence autosaving into inventories/autosave.ini * Make evidence autosave more robust by accounting for evidence transfers and deleteions Fix the ini not using UTF-8 codec Correct save/load functions working on local evidence list (displayed) rather than the proper private one * set ini codec Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com> Co-authored-by: Salanto <62221668+Salanto@users.noreply.github.com> Co-authored-by: stonedDiscord <Tukz@gmx.de> Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com>
-rw-r--r--include/courtroom.h2
-rw-r--r--src/evidence.cpp88
2 files changed, 61 insertions, 29 deletions
diff --git a/include/courtroom.h b/include/courtroom.h
index d2d4107f..d981bffd 100644
--- a/include/courtroom.h
+++ b/include/courtroom.h
@@ -986,6 +986,8 @@ private slots:
void evidence_switch(bool global);
void on_evidence_save_clicked();
void on_evidence_load_clicked();
+ void evidence_save(QString filename);
+ void evidence_load(QString filename);
bool compare_evidence_changed(evi_type evi_a, evi_type evi_b);
void on_back_to_lobby_clicked();
diff --git a/src/evidence.cpp b/src/evidence.cpp
index 13634ec0..7fcad61b 100644
--- a/src/evidence.cpp
+++ b/src/evidence.cpp
@@ -103,6 +103,7 @@ void Courtroom::initialize_evidence()
&Courtroom::on_evidence_edited);
ui_evidence->hide();
+ evidence_load("inventories/autosave.ini");
}
void Courtroom::refresh_evidence()
@@ -571,6 +572,9 @@ void Courtroom::on_evidence_delete_clicked()
local_evidence_list.remove(current_evidence);
private_evidence_list = local_evidence_list;
set_evidence_page();
+
+ // Autosave private evidence
+ evidence_save("inventories/autosave.ini");
}
current_evidence = 0;
@@ -634,6 +638,11 @@ void Courtroom::on_evidence_ok_clicked()
set_evidence_page();
}
}
+
+ // Autosave private evidence
+ if (!current_evidence_global) {
+ evidence_save("inventories/autosave.ini");
+ }
}
void Courtroom::on_evidence_switch_clicked()
@@ -664,6 +673,9 @@ void Courtroom::on_evidence_transfer_clicked()
evi_type f_evi = local_evidence_list.at(current_evidence);
name = f_evi.name;
private_evidence_list.append(f_evi);
+
+ // Autosave private evidence
+ evidence_save("inventories/autosave.ini");
}
QMessageBox *msgBox = new QMessageBox;
@@ -743,25 +755,19 @@ void Courtroom::on_evidence_save_clicked()
return; // Don't allow saving/loading operations when in global inventory
// mode for now
+ // "Inventories" dir keeps our private evidence data
+ if (!dir_exists("inventories")) {
+ // Create one if it doesn't yet exist
+ QDir("inventories").mkdir("inventories");
+ }
+
QString p_path = QFileDialog::getSaveFileName(
- this, tr("Save Inventory"), "base/inventories/", tr("Ini Files (*.ini)"));
- if (p_path.isEmpty())
- return;
+ this, tr("Save Inventory"), "inventories/", tr("Ini Files (*.ini)"));
evidence_close();
ui_evidence_name->setText("");
- QSettings inventory(p_path, QSettings::IniFormat);
- inventory.setIniCodec("UTF-8");
- inventory.clear();
- for (int i = 0; i < local_evidence_list.size(); i++) {
- inventory.beginGroup(QString::number(i));
- inventory.setValue("name", local_evidence_list[i].name);
- inventory.setValue("description", local_evidence_list[i].description);
- inventory.setValue("image", local_evidence_list[i].image);
- inventory.endGroup();
- }
- inventory.sync();
+ evidence_save(p_path);
}
void Courtroom::on_evidence_load_clicked()
@@ -771,35 +777,59 @@ void Courtroom::on_evidence_load_clicked()
// mode for now
QString p_path = QFileDialog::getOpenFileName(
- this, tr("Open Inventory"), "base/inventories/", tr("Ini Files (*.ini)"));
+ this, tr("Open Inventory"), "inventories/", tr("Ini Files (*.ini)"));
if (p_path.isEmpty())
return;
evidence_close();
ui_evidence_name->setText("");
+ evidence_load(p_path);
+ local_evidence_list = private_evidence_list;
+ set_evidence_page();
+}
- QSettings inventory(p_path, QSettings::IniFormat);
- inventory.setIniCodec("UTF-8");
- local_evidence_list.clear();
- QMap<int, QString> sorted_evi;
- for (const auto &s : inventory.childGroups()) {
- sorted_evi[s.toInt()] = s;
+void Courtroom::evidence_load(QString filename)
+{
+ if (!file_exists(filename)) {
+ qWarning() << "Trying to load a non-existant evidence save file:" << filename;
+ return;
}
- QStringList evilist(sorted_evi.values());
- for (const QString &evi : evilist) {
+ QSettings inventory(filename, QSettings::IniFormat);
+ inventory.setIniCodec("UTF-8");
+ private_evidence_list.clear();
+ foreach (QString evi, inventory.childGroups()) {
if (evi == "General")
continue;
evi_type f_evi;
- f_evi.name = inventory.value(evi + "/name", tr("UNKNOWN")).value<QString>();
+ f_evi.name = inventory.value(evi + "/name", "<name>").value<QString>();
f_evi.description =
- inventory.value(evi + "/description", tr("UNKNOWN")).value<QString>();
+ inventory.value(evi + "/description", "<description>").value<QString>();
f_evi.image =
- inventory.value(evi + "/image", "UNKNOWN.png").value<QString>();
- local_evidence_list.append(f_evi);
+ inventory.value(evi + "/image", "empty.png").value<QString>();
+ private_evidence_list.append(f_evi);
}
- private_evidence_list = local_evidence_list;
- set_evidence_page();
+}
+
+void Courtroom::evidence_save(QString filename)
+{
+ // "Inventories" dir keeps our private evidence data
+ if (!dir_exists("inventories")) {
+ // Create one if it doesn't yet exist
+ QDir("inventories").mkdir("inventories");
+ }
+
+ QSettings inventory(filename, QSettings::IniFormat);
+ inventory.setIniCodec("UTF-8");
+ inventory.clear();
+ for (int i = 0; i < private_evidence_list.size(); i++) {
+ inventory.beginGroup(QString::number(i));
+ inventory.setValue("name", private_evidence_list[i].name);
+ inventory.setValue("description", private_evidence_list[i].description);
+ inventory.setValue("image", private_evidence_list[i].image);
+ inventory.endGroup();
+ }
+ inventory.sync();
}
bool Courtroom::compare_evidence_changed(evi_type evi_a, evi_type evi_b)