Skip to content

Commit 08ad9c3

Browse files
committed
FileInfo(object): -> _FomodFileInfo(object): FFF WIP
1 parent 822c478 commit 08ad9c3

2 files changed

Lines changed: 40 additions & 35 deletions

File tree

Mopy/bash/basher/gui_fomod.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -292,28 +292,29 @@ def __init__(self, parent, page):
292292
required_disable = False
293293

294294
# group type forces selection
295-
group_force_selection = group.type in (
295+
group_type = group.type
296+
group_force_selection = group_type in (
296297
"SelectExactlyOne",
297298
"SelectAtLeastOne",
298299
)
299300

300301
for option in group:
301-
if group.type in ("SelectExactlyOne", "SelectAtMostOne"):
302+
if group_type in ("SelectExactlyOne", "SelectAtMostOne"):
302303
radio_style = wx.RB_GROUP if option is group[0] else 0
303304
button = wx.RadioButton(
304305
panel_groups, label=option.name, style=radio_style
305306
)
306307
else:
307308
button = balt.checkBox(panel_groups, label=option.name)
308-
if group.type == "SelectAll":
309+
if group_type == "SelectAll":
309310
button.SetValue(True)
310311
any_selected = True
311312
button.Disable()
312313

313314
if option.type == "Required":
314315
button.SetValue(True)
315316
any_selected = True
316-
if group.type in ("SelectExactlyOne", "SelectAtMostOne"):
317+
if group_type in ("SelectExactlyOne", "SelectAtMostOne"):
317318
required_disable = True
318319
else:
319320
button.Disable()
@@ -342,7 +343,7 @@ def __init__(self, parent, page):
342343
for button in self.group_option_map[sizer_group]:
343344
button.Disable()
344345

345-
if group.type == "SelectAtMostOne":
346+
if group_type == "SelectAtMostOne":
346347
none_button = wx.RadioButton(panel_groups, label="None")
347348
if not any_selected:
348349
none_button.SetValue(True)

Mopy/bash/fomod.py

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def __init__(self, page, options):
116116
self.options = options
117117

118118

119-
class FileInfo(object):
119+
class _FomodFileInfo(object):
120120
def __init__(self, source, destination, priority):
121121
self.source = source
122122
self.destination = destination
@@ -159,11 +159,18 @@ def process_files(cls, files_elem, file_list):
159159

160160

161161
class FomodInstaller(object):
162-
def __init__(self, root, file_list, dst_path, game_version):
162+
def __init__(self, root, file_list, dst_dir, game_version):
163+
"""
164+
165+
:param root:
166+
:param file_list: the list of recognized files of the parent installer
167+
:param dst_dir: the destination directory - <Game>/Data
168+
:param game_version: version of the game launch exe
169+
"""
163170
self.tree = etree.parse(root)
164171
self.fomod_name = self.tree.findtext("moduleName", "").strip()
165172
self.file_list = file_list
166-
self.dst_path = dst_path
173+
self.dst_dir = dst_dir
167174
self.game_version = game_version
168175
self._current_page = None
169176
self._previous_pages = []
@@ -219,15 +226,15 @@ def files(self):
219226
required_files = []
220227
required_files_elem = self.tree.find("requiredInstallFiles")
221228
if required_files_elem is not None:
222-
required_files = FileInfo.process_files(required_files_elem, self.file_list)
229+
required_files = _FomodFileInfo.process_files(required_files_elem, self.file_list)
223230
user_files = []
224231
selected_options = [
225232
option._object for info in self._previous_pages for option in info.options
226233
]
227234
for option in selected_options:
228235
option_files = option.find("files")
229236
if option_files is not None:
230-
user_files.extend(FileInfo.process_files(option_files, self.file_list))
237+
user_files.extend(_FomodFileInfo.process_files(option_files, self.file_list))
231238
conditional_files = []
232239
for pattern in self.tree.findall("conditionalFileInstalls/patterns/pattern"):
233240
conditions = pattern.find("dependencies")
@@ -237,7 +244,7 @@ def files(self):
237244
except FailedCondition:
238245
pass
239246
else:
240-
conditional_files.extend(FileInfo.process_files(files, self.file_list))
247+
conditional_files.extend(_FomodFileInfo.process_files(files, self.file_list))
241248
file_dict = {} # dst -> src
242249
priority_dict = {} # dst -> priority
243250
for info in required_files + user_files + conditional_files:
@@ -266,24 +273,24 @@ def _flags(self):
266273
flag_dict[flag_name] = flag_value
267274
return flag_dict
268275

269-
def _test_file_condition(self, file_name, file_type):
270-
file_path = self.dst_path.join(file_name)
271-
if not file_path.exists():
276+
def _test_file_condition(self, condition):
277+
file_name = condition.get("file")
278+
file_type = condition.get("state")
279+
file_path = self.dst_dir.join(file_name)
280+
if not file_path.exists(): # TODO: ghosts?
272281
actual_type = "Missing"
273282
else:
274-
is_active = cached_is_active(file_name)
275-
if is_active:
276-
actual_type = "Active"
277-
else:
278-
actual_type = "Inactive"
283+
actual_type = "Active" if cached_is_active(file_name) else "Inactive"
279284
if actual_type != file_type:
280285
raise FailedCondition(
281286
"File {} should be {} but is {} instead.".format(
282287
file_name, file_type, actual_type
283288
)
284289
)
285290

286-
def _test_flag_condition(self, flag_name, flag_value):
291+
def _test_flag_condition(self, condition):
292+
flag_name = condition.get("flag")
293+
flag_value = condition.get("value")
287294
actual_value = self._flags().get(flag_name, None)
288295
if actual_value != flag_value:
289296
raise FailedCondition(
@@ -292,12 +299,14 @@ def _test_flag_condition(self, flag_name, flag_value):
292299
)
293300
)
294301

295-
def _test_version_condition(self, version):
302+
def _test_version_condition(self, condition):
303+
version = condition.get("version")
296304
game_version = LooseVersion(self.game_version)
297305
version = LooseVersion(version)
298306
if game_version < version:
299307
raise FailedCondition(
300-
"Game version is {} but {} is required.".format(game_version, version)
308+
"Game version is {} but {} is required.".format(
309+
game_version, version)
301310
)
302311

303312
def _test_conditions(self, conditions):
@@ -306,26 +315,21 @@ def _test_conditions(self, conditions):
306315
condition_list = conditions.findall("*")
307316
for condition in condition_list:
308317
try:
309-
if condition.tag == "fileDependency":
310-
file_name = condition.get("file")
311-
file_type = condition.get("state")
312-
self._test_file_condition(file_name, file_type)
313-
elif condition.tag == "flagDependency":
314-
flag_name = condition.get("flag")
315-
flag_value = condition.get("value")
316-
self._test_flag_condition(flag_name, flag_value)
317-
elif condition.tag == "gameDependency":
318-
version = condition.get("version")
319-
self._test_version_condition(version)
320-
elif condition.tag == "dependencies":
321-
self._test_conditions(condition)
318+
test_func = self._condition_tests.get(condition.tag, None)
319+
if test_func:
320+
test_func(self, condition)
322321
except FailedCondition as exc:
323322
failed.extend([a for a in str(exc).splitlines()])
324323
if op == "And":
325324
raise FailedCondition("\n".join(failed))
326325
if op == "Or" and len(failed) == len(condition_list):
327326
raise FailedCondition("\n".join(failed))
328327

328+
_condition_tests = {"fileDependency": _test_file_condition,
329+
"flagDependency": _test_flag_condition,
330+
"gameDependency": _test_version_condition,
331+
"dependencies": _test_conditions, }
332+
329333
@staticmethod
330334
def _order_list(unordered_list, order, _valid_values=frozenset(
331335
("Explicit", "Ascending", "Descending"))):

0 commit comments

Comments
 (0)