aboutsummaryrefslogtreecommitdiff
path: root/libs/game_bethesda/src/gamebryo/gamebryodataarchives.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/game_bethesda/src/gamebryo/gamebryodataarchives.cpp')
-rw-r--r--libs/game_bethesda/src/gamebryo/gamebryodataarchives.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/libs/game_bethesda/src/gamebryo/gamebryodataarchives.cpp b/libs/game_bethesda/src/gamebryo/gamebryodataarchives.cpp
new file mode 100644
index 0000000..11e5408
--- /dev/null
+++ b/libs/game_bethesda/src/gamebryo/gamebryodataarchives.cpp
@@ -0,0 +1,68 @@
+#include "gamebryodataarchives.h"
+
+#include <registry.h>
+#include <utility.h>
+
+#include "gamegamebryo.h"
+
+GamebryoDataArchives::GamebryoDataArchives(const GameGamebryo* game) : m_Game{game} {}
+
+QDir GamebryoDataArchives::gameDirectory() const
+{
+ return QDir(m_Game->gameDirectory()).absolutePath();
+}
+
+QDir GamebryoDataArchives::localGameDirectory() const
+{
+ return QDir(m_Game->myGamesPath()).absolutePath();
+}
+
+QStringList GamebryoDataArchives::getArchivesFromKey(const QString& iniFile,
+ const QString& key,
+ const int size) const
+{
+ QStringList result;
+
+ QString value = GameGamebryo::readIniValue(iniFile, "Archive", key, "");
+ if (!value.isEmpty()) {
+ result.append(value.split(','));
+ }
+
+ for (int i = 0; i < result.count(); ++i) {
+ result[i] = result[i].trimmed();
+ }
+ return result;
+}
+
+void GamebryoDataArchives::setArchivesToKey(const QString& iniFile, const QString& key,
+ const QString& value)
+{
+ if (!MOBase::WriteRegistryValue("Archive", key, value, iniFile)) {
+ qWarning("failed to set archives in \"%s\"", qUtf8Printable(iniFile));
+ }
+}
+
+void GamebryoDataArchives::addArchive(MOBase::IProfile* profile, int index,
+ const QString& archiveName)
+{
+ QStringList current = archives(profile);
+ if (current.contains(archiveName, Qt::CaseInsensitive)) {
+ return;
+ }
+
+ current.insert(index != INT_MAX ? index : current.size(), archiveName);
+
+ writeArchiveList(profile, current);
+}
+
+void GamebryoDataArchives::removeArchive(MOBase::IProfile* profile,
+ const QString& archiveName)
+{
+ QStringList current = archives(profile);
+ if (!current.contains(archiveName, Qt::CaseInsensitive)) {
+ return;
+ }
+ current.removeAll(archiveName);
+
+ writeArchiveList(profile, current);
+}