divatool/xdudata/update.py
2021-12-28 15:49:14 -05:00

98 lines
2.9 KiB
Python

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,
):
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)