aboutsummaryrefslogtreecommitdiff
path: root/libs/game_bethesda/src/gamebryo/gamebryomoddatachecker.cpp
blob: b5bace63157278e99a141e10e3f94a466926eb31 (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
72
73
74
75
76
#include <ifiletree.h>

#include "gamebryomoddatachecker.h"

/**
 * @return the list of possible folder names in data.
 */
auto GamebryoModDataChecker::possibleFolderNames() const -> const FileNameSet&
{
  static FileNameSet result{"fonts",
                            "interface",
                            "menus",
                            "meshes",
                            "music",
                            "scripts",
                            "shaders",
                            "sound",
                            "strings",
                            "textures",
                            "trees",
                            "video",
                            "facegen",
                            "materials",
                            "skse",
                            "obse",
                            "mwse",
                            "nvse",
                            "fose",
                            "f4se",
                            "distantlod",
                            "asi",
                            "SkyProc Patchers",
                            "Tools",
                            "MCM",
                            "icons",
                            "bookart",
                            "distantland",
                            "mits",
                            "splash",
                            "dllplugins",
                            "CalienteTools",
                            "NetScriptFramework",
                            "shadersfx"};
  return result;
}

/**
 * @return the extensions of possible files in data.
 */
auto GamebryoModDataChecker::possibleFileExtensions() const -> const FileNameSet&
{
  static FileNameSet result{"esp", "esm", "esl", "bsa", "ba2", "modgroups", "ini"};
  return result;
}

GamebryoModDataChecker::GamebryoModDataChecker(const GameGamebryo* game) : m_Game(game)
{}

GamebryoModDataChecker::CheckReturn GamebryoModDataChecker::dataLooksValid(
    std::shared_ptr<const MOBase::IFileTree> fileTree) const
{
  auto& folders  = possibleFolderNames();
  auto& suffixes = possibleFileExtensions();
  for (auto entry : *fileTree) {
    if (entry->isDir()) {
      if (folders.count(entry->name()) > 0) {
        return CheckReturn::VALID;
      }
    } else {
      if (suffixes.count(entry->suffix()) > 0) {
        return CheckReturn::VALID;
      }
    }
  }
  return CheckReturn::INVALID;
}