implemented Game conversion to WBFS / ISO / CISO after installing the mod

This commit is contained in:
Faraphel 2022-08-11 22:57:41 +02:00
parent cd61ce59c4
commit 94dddac6d4
4 changed files with 41 additions and 3 deletions

View file

@ -259,7 +259,7 @@ class SourceGame(ttk.LabelFrame):
""" """
path = Path(tkinter.filedialog.askopenfilename( path = Path(tkinter.filedialog.askopenfilename(
title=_("SELECT_SOURCE_GAME"), title=_("SELECT_SOURCE_GAME"),
filetypes=[(_("WII GAMES"), "*.iso *.wbfs *.dol")], filetypes=[(_("WII GAMES"), "*.iso *.ciso *.wbfs *.dol")],
)) ))
# if the user didn't select any file, return None # if the user didn't select any file, return None
if not path.exists(): if not path.exists():

View file

@ -5,7 +5,7 @@ from typing import Generator, IO
from source.mkw.ModConfig import ModConfig from source.mkw.ModConfig import ModConfig
from source.mkw.Patch.Patch import Patch from source.mkw.Patch.Patch import Patch
from source.wt import szs, lec from source.wt import szs, lec, wit
from source.wt.wstrt import StrPath from source.wt.wstrt import StrPath
@ -155,3 +155,27 @@ class ExtractedGame:
for patch_directory in part_directory.glob("_PATCH/"): for patch_directory in part_directory.glob("_PATCH/"):
yield from Patch(patch_directory, mod_config, self._special_file).install(self) yield from Patch(patch_directory, mod_config, self._special_file).install(self)
def convert_to(self, output_type: wit.Extension) -> Generator[dict, None, None]:
"""
Convert the extracted game to another format
:param output_type: path to the destination of the game
:output_type: format of the destination game
"""
yield {"description": f"Converting game to {output_type}", "determinate": False}
if output_type == wit.Extension.FST: return
destination_file = self.path.with_suffix(self.path.suffix + output_type.value)
dest_name: str = destination_file.name
i: int = 0
while destination_file.exists():
i += 1
destination_file = destination_file.with_name(dest_name + f" ({i})")
wit.copy(
source_directory=self.path,
destination_file=destination_file,
)
yield {"description": "Deleting the extracted game...", "determinate": False}
shutil.rmtree(self.path)

View file

@ -139,3 +139,5 @@ class Game:
cache_ogtracks_directory, cache_ogtracks_directory,
) )
# convert the extracted game into a file
yield from extracted_game.convert_to(output_type)

View file

@ -13,13 +13,25 @@ _tools_run_dict = get_tools_run_dict_function(tools_path)
_tools_run_popen = get_tools_run_popen_function(tools_path) _tools_run_popen = get_tools_run_popen_function(tools_path)
def copy(source_directory: Path | str, destination_file: Path | str):
"""
Copy a game directory to a game file with a specific format.
:param source_directory: path to the extracted game
:param destination_file: path to the destination game
:return: the destination game path
"""
_tools_run("COPY", source_directory, "--DEST", destination_file)
return Path(destination_file)
class Extension(enum.Enum): class Extension(enum.Enum):
""" """
Enum for game extension Enum for game extension
""" """
WBFS = ".wbfs" WBFS = ".wbfs"
ISO = ".iso"
FST = ".dol" FST = ".dol"
CISO = ".ciso"
ISO = ".iso"
@classmethod @classmethod
def _missing_(cls, value: str) -> "Extension | None": def _missing_(cls, value: str) -> "Extension | None":