Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def get_all_diffs(self):
diffs = []
for m in util.get_installed_mods():
diff = self.get_mod_diff(m)
if diff:
diffs.append(diff)
return diffs
def generate_master_rstb(verbose: bool = False):
"""Merges all installed RSTB modifications"""
print('Merging RSTB changes...')
if (util.get_master_modpack_dir() / 'logs' / 'master-rstb.log').exists():
(util.get_master_modpack_dir() / 'logs' / 'master-rstb.log').unlink()
table = get_stock_rstb()
rstb_values = {}
for mod in util.get_installed_mods():
rstb_values.update(get_mod_rstb_values(mod))
if (util.get_master_modpack_dir() / 'logs' / 'rstb.log').exists():
rstb_values.update(get_mod_rstb_values(util.get_master_modpack_dir()))
if (util.get_master_modpack_dir() / 'logs' / 'map.log').exists():
rstb_values.update(get_mod_rstb_values(
util.get_master_modpack_dir(), log_name='map.log'))
table, rstb_changes = merge_rstb(table, rstb_values)
for change in rstb_changes:
if not change[1] or (change[1] and verbose):
print(change[0])
for bootup_pack in util.get_master_modpack_dir().glob('content/Pack/Bootup_*.pack'):
lang = util.get_file_language(bootup_pack)
if table.is_in_table(f'Message/Msg_{lang}.product.sarc'):
table.delete_entry(f'Message/Msg_{lang}.product.sarc')
def merge_events():
""" Merges all installed event info mods """
event_mods = [mod for mod in util.get_installed_mods() \
if (mod.path / 'logs' / 'eventinfo.yml').exists()]
merged_events = util.get_master_modpack_dir() / 'logs' / 'eventinfo.byml'
event_merge_log = util.get_master_modpack_dir() / 'logs' / 'eventinfo.log'
event_mod_hash = str(hash(tuple(event_mods)))
if not event_mods:
print('No event info merging necessary')
if merged_events.exists():
merged_events.unlink()
event_merge_log.unlink()
try:
stock_eventinfo = util.get_nested_file_bytes(
str(util.get_game_file('Pack/Bootup.pack')) + '//Event/EventInfo.product.sbyml',
unyaz=False
)
util.inject_file_into_bootup(
"""
Changes the priority of a mod
:param path: The path to the mod.
:type path: class:`pathlib.Path`
:param new_priority: The new priority of the mod.
:type new_priority: int
:param wait_merge: Resort priorities but don't remerge anything yet, defaults to False.
:type wait_merge: bool, optional
:param verbose: Whether to display more detailed output, defaults to False.
:type verbose: bool, optional
"""
mod = util.get_mod_info(path / 'rules.txt')
print(
f'Changing priority of {mod.name} from {mod.priority} to {new_priority}...')
mods = util.get_installed_mods()
if new_priority > mods[len(mods) - 1][1]:
new_priority = len(mods) - 1
mods.remove(mod)
mods.insert(new_priority - 100, util.BcmlMod(mod.name, new_priority, path))
all_mergers = [merger() for merger in mergers.get_mergers()]
remergers = set()
partials = {}
for merger in all_mergers:
if merger.is_mod_logged(mod):
remergers.add(merger)
if merger.can_partial_remerge():
partials[merger.NAME] = set(merger.get_mod_affected(mod))
print('Resorting other affected mods...')
for mod in mods:
def LoadMods(self):
self.statusBar().showMessage('Loading mods...')
self.listWidget.clear()
self._mods = sorted(util.get_installed_mods(disabled=True), key=lambda imod: imod.priority,
reverse=not util.get_settings_bool('load_reverse'))
for mod in self._mods:
mod_item = QtWidgets.QListWidgetItem()
mod_item.setText(mod.name)
mod_item.setData(QtCore.Qt.UserRole, mod)
if util.is_mod_disabled(mod):
mod_item.setTextColor(QtGui.QColor(211, 47, 47))
self.listWidget.addItem(mod_item)
self._mod_infos = {}
self.lblModInfo.linkActivated.connect(self.link)
self.lblModInfo.setText('No mod selected')
self.lblImage.setPixmap(self._logo)
self.lblImage.setFixedSize(256, 144)
self.statusBar().showMessage(f'{len(self._mods)} mods installed')
if self._mods:
self.btnRemerge.setEnabled(True)
def get_savedata_mods() -> List[BcmlMod]:
""" Gets a list of all installed mods that modify save data """
sdata_mods = [mod for mod in util.get_installed_mods() if (
mod.path / 'logs' / 'savedata.yml').exists()]
return sorted(sdata_mods, key=lambda mod: mod.priority)
def get_all_diffs(self):
diffs = {}
for mod in util.get_installed_mods():
diffs[mod] = self.get_mod_diff(mod)
return diffs
def get_all_diffs(self) -> list:
diffs = []
for mod in util.get_installed_mods():
diff = self.get_mod_diff(mod)
if diff:
diffs.append(diff)
return diffs
# Issue #33 - end Entry layout check
for entry in gpack.getElementsByTagName('Entry'):
# Issue #33 - handle BCML node by Cemu version
if new_cemu_version:
if 'BCML' in entry.getAttribute('filename'):
gpack.removeChild(entry)
else:
try:
if 'BCML' in entry.getElementsByTagName('filename')[0].childNodes[0].data:
gpack.removeChild(entry)
except IndexError:
pass
bcmlentry = create_settings_mod_node(settings, new_cemu_version)
# Issue #33 - end BCML node
gpack.appendChild(bcmlentry)
for mod in util.get_installed_mods():
# Issue #33 - handle new mod nodes by Cemu version
modentry = create_settings_mod_node(settings, new_cemu_version, mod)
# Issue #33 - end handling new mod nodes
gpack.appendChild(modentry)
settings.writexml(setpath.open('w', encoding='utf-8'), addindent=' ', newl='\n')
def export(self):
if not util.get_installed_mods():
raise Exception("No mods installed to export.")
out = self.window.create_file_dialog(
webviewb.SAVE_DIALOG,
file_types=(
f"{('Graphic Pack' if util.get_settings('wiiu') else 'Atmosphere')} (*.zip)",
"BOTW Nano Patch (*.bnp)",
),
save_filename="exported-mods.zip",
)
if out:
output = Path(out if isinstance(out, str) else out[0])
install.export(output)