from contextlib import suppress import diva import shutil import os import tempfile import utage from distutils.dir_util import copy_tree, remove_tree from glob import glob from xdudata.asset_extract import process_se, process_bgm, process_voice, process_movie def update_all( cache_dir, update_dir, translation_dir, extract_dir, languages, ): # TODO uncomment # print("Checking tool availability") # validate_tools() # # print("Cleaning cache") # cleanup_cache(cache_dir) # # print("Copying images") # copy_images(cache_dir, update_dir) # # print("Processing TSV files") # update_tsv(cache_dir, update_dir, extract_dir, translation_dir, languages) # # print("Processing Quest Json files") # diva.quest.update_missions(extract_dir, translation_dir, languages) print("Processing Sound Effects") process_se(cache_dir, extract_dir, update_dir) # print("Processing BGM") # process_bgm(cache_dir, extract_dir, update_dir) # # print("Processing voices") # process_voice(cache_dir, extract_dir, update_dir) # # print("Processing movies - this might take forever") # process_movie(cache_dir, extract_dir, update_dir) def validate_tools(): # TODO validate all the tools are in PATH ... def cleanup_cache(cache_dir): with suppress(FileNotFoundError): shutil.rmtree(os.path.join(cache_dir, "Common/Asset/Utage/event32")) os.remove( os.path.join( cache_dir, "Common/Asset/Utage/side01/Scenario/Sheet2.tsv.utage" ) ) def copy_images(cache_dir, update_dir): copy_tree( os.path.join(cache_dir, "Common/Asset/Image"), os.path.join(update_dir, "Asset/Image"), ) copy_tree( os.path.join(cache_dir, "Common/Sample"), os.path.join(update_dir, "Sample"), ) def update_tsv(cache_dir, update_dir, extract_dir, translation_dir, languages): utage_tmp = tempfile.mkdtemp() copy_tree(os.path.join(cache_dir, "Common/Asset/Utage"), utage_tmp) utage.crypt.crypt_dir( utage_tmp, bytearray("SampleSecretKey", "utf-8"), False, False ) for encrypted in glob(os.path.join(utage_tmp, "**/*.utage"), recursive=True): try: os.remove(encrypted) except: pass # copy over files for the quest updater copy_tree(utage_tmp, os.path.join(extract_dir, "Common/Asset/Utage")) shutil.copy2(os.path.join(cache_dir, "QuestMst.db"), extract_dir) shutil.copy2(os.path.join(cache_dir, "QuestSceneMst.db"), extract_dir) shutil.copy2(os.path.join(cache_dir, "QuestPartMst.db"), extract_dir) shutil.copy2(os.path.join(cache_dir, "ResourceEntry.db"), extract_dir) utage.translate.translate_dir( utage_tmp, os.path.join(update_dir, "Utage"), os.path.join(translation_dir, "Missions"), False, ) utage.names.update_names(utage_tmp, translation_dir, languages, False) copy_tree(os.path.join(utage_tmp, "Diva"), os.path.join(update_dir, "Utage/Diva")) remove_tree(utage_tmp)