aboutsummaryrefslogtreecommitdiff
path: root/libs/game_bethesda/src/games/morrowind/morrowinddataarchives.cpp
blob: 57a59444dfaaec57974d6195a61be7749506833c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "morrowinddataarchives.h"
#include "registry.h"
#include <utility.h>

#include <QSettings>

#include "gamegamebryo.h"

QStringList MorrowindDataArchives::vanillaArchives() const
{
  return {"Morrowind.bsa"};
}

QStringList MorrowindDataArchives::getArchives(const QString& iniFile) const
{
  QStringList result;
  QSettings settings(iniFile, QSettings::IniFormat);

  QString key = "Archive ";
  int i       = 0;
  while (true) {
    QString value =
        settings.value("Archives/" + key + QString::number(i), "").toString().trimmed();
    if (value.isEmpty()) {
      break;
    }
    result.append(value);
    i++;
  }

  return result;
}

void MorrowindDataArchives::setArchives(const QString& iniFile, const QStringList& list)
{
  QSettings settings(iniFile, QSettings::IniFormat);
  settings.remove("Archives");

  QString key      = "Archive ";
  int writtenCount = 0;
  foreach (const QString& value, list) {
    if (!MOBase::WriteRegistryValue(
            "Archives", key + QString::number(writtenCount), value, iniFile)) {
      qWarning("failed to set archives in \"%s\"", qUtf8Printable(iniFile));
    }
    ++writtenCount;
  }
}

QStringList MorrowindDataArchives::archives(const MOBase::IProfile* profile) const
{
  QStringList result;

  QString iniFile =
      profile->localSettingsEnabled()
          ? QDir(profile->absolutePath()).absoluteFilePath("morrowind.ini")
          : gameDirectory().absoluteFilePath("morrowind.ini");
  result.append(getArchives(iniFile));

  return result;
}

void MorrowindDataArchives::writeArchiveList(MOBase::IProfile* profile,
                                             const QStringList& before)
{
  QString iniFile =
      profile->localSettingsEnabled()
          ? QDir(profile->absolutePath()).absoluteFilePath("morrowind.ini")
          : gameDirectory().absoluteFilePath("morrowind.ini");
  setArchives(iniFile, before);
}