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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
from enum import IntEnum, auto
import mobase
class Content(IntEnum):
PLUGIN = auto()
BSA = auto()
PAK = auto()
OBSE = auto()
OBSE_FILES = auto()
MOVIE = auto()
UE4SS = auto()
MAGIC_LOADER = auto()
GAME_SETTINGS = auto()
class OblivionRemasteredDataContent(mobase.ModDataContent):
OR_CONTENTS: list[tuple[Content, str, str, bool] | tuple[Content, str, str]] = [
(Content.PLUGIN, "Plugins (ESM/ESP)", ":/MO/gui/content/plugin"),
(Content.BSA, "Bethesda Archive", ":/MO/gui/content/bsa"),
(Content.PAK, "Paks", ":/MO/gui/content/geometries"),
(Content.OBSE, "Script Extender Plugin", ":/MO/gui/content/skse"),
(Content.OBSE_FILES, "Script Extender Files", "", True),
(Content.MOVIE, "Movies", ":/MO/gui/content/media"),
(Content.UE4SS, "UE4SS Mods", ":/MO/gui/content/script"),
(Content.MAGIC_LOADER, "Magic Loader Mod", ":/MO/gui/content/inifile"),
(Content.GAME_SETTINGS, "Game Settings", ":/MO/gui/content/menu"),
]
def getAllContents(self) -> list[mobase.ModDataContent.Content]:
return [
mobase.ModDataContent.Content(id, name, icon, *filter_only)
for id, name, icon, *filter_only in self.OR_CONTENTS
]
def getContentsFor(self, filetree: mobase.IFileTree) -> list[int]:
contents: set[int] = set()
for entry in filetree:
if isinstance(entry, mobase.IFileTree):
match entry.name().casefold():
case "data":
for data_entry in entry:
if data_entry.isFile():
match data_entry.suffix().casefold():
case "esm" | "esp":
contents.add(Content.PLUGIN)
case "bsa":
contents.add(Content.BSA)
case _:
pass
else:
match data_entry.name().casefold():
case "magicloader":
contents.add(Content.MAGIC_LOADER)
case _:
pass
case "obse":
contents.add(Content.OBSE_FILES)
plugins_dir = entry.find("Plugins")
if isinstance(plugins_dir, mobase.IFileTree):
for plugin_entry in plugins_dir:
if (
plugin_entry.isFile()
and plugin_entry.suffix().casefold() == "dll"
):
contents.add(Content.OBSE)
if (
isinstance(plugin_entry, mobase.IFileTree)
and plugins_dir.name().casefold() == "gamesettings"
):
for settings_file in plugin_entry:
if (
settings_file.isFile()
and settings_file.suffix().casefold()
== "ini"
):
contents.add(Content.GAME_SETTINGS)
case "paks":
contents.add(Content.PAK)
for paks_entry in entry:
if isinstance(paks_entry, mobase.IFileTree):
if paks_entry.name().casefold() == "~mods":
for mods_entry in paks_entry:
if isinstance(mods_entry, mobase.IFileTree):
if (
"magicloader"
in mods_entry.name().casefold()
):
contents.add(Content.MAGIC_LOADER)
break
if paks_entry.name().casefold() == "logicmods":
contents.add(Content.UE4SS)
case "movies":
contents.add(Content.MOVIE)
case "ue4ss":
contents.add(Content.UE4SS)
case "gamesettings":
for settings_file in entry:
if (
settings_file.isFile()
and settings_file.suffix().casefold() == "ini"
):
contents.add(Content.GAME_SETTINGS)
case _:
pass
return list(contents)
|