From 718fa457ba6c9d97076a4a35d884ae1735c2c935 Mon Sep 17 00:00:00 2001 From: Escartem Date: Fri, 24 Nov 2023 14:51:52 +0100 Subject: [PATCH] better error handling --- extract.py | 2 ++ wavescan.py | 33 ++++++++++++++++++++++----------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/extract.py b/extract.py index 4fd92df..1ac9740 100644 --- a/extract.py +++ b/extract.py @@ -321,12 +321,14 @@ def main(): print(f"[{curr}/{steps}] Cleaning up") except Exception as e: + print("") print("An error occured while processing this file ! Skipping to the next one, details of the error bellow :") print(f"Line {sys.exc_info()[-1].tb_lineno}, {e}") # all files processed if os.path.exists("temp") and skips[8] != "1": shutil.rmtree("temp") + print("-"*30) print("Done extracting everything !") if __name__ == "__main__": diff --git a/wavescan.py b/wavescan.py index fc67450..9ff5165 100644 --- a/wavescan.py +++ b/wavescan.py @@ -1,5 +1,6 @@ # Custom rewrite of the Wwise AKPK packages extractor, original by Nicknine and bnnm from filereader import FileReader +import traceback import os @@ -16,8 +17,8 @@ def extract(input_file, output_folder): # check file if reader.ReadBytes(4) != b"AKPK": - print("Not a valid file") - return + file.close() + raise Exception("not a valid audio file") # check endianness reader.SetBufferPos(0x08) @@ -28,8 +29,8 @@ def extract(input_file, output_folder): elif endian_check == 0x1000000: endianness = 1 # big else: - print("uknown endianness, aborting") - return + file.close() + raise Exception("couldn't detect endianness") # retrieve sectors in header reader.SetBufferPos(0x04) @@ -48,16 +49,26 @@ def extract(input_file, output_folder): sectors = [[True, banks_sector_size, 0, 0, "bnk"], [False, sounds_sector_size, 1, 0, "wem"], [False, externals_sector_size, 1, 1, "wem"]] # get langs in the file - lang_array = get_langs(languages_sector_size) + try: + lang_array = get_langs(languages_sector_size) + except Exception as e: + file.close() + raise Exception(f"failed to read languages, {e}, {traceback.format_exc()}") # extract each sector - for sector in sectors: - extract_sector(*sector[1:], endianness, lang_array, bank_version, output_folder) + curr_sector = None + try: + for sector in sectors: + curr_sector = sector + extract_sector(*sector[1:], endianness, lang_array, bank_version, output_folder) - if sector[0] and bank_version == 0: - if externals_sector_size == 0: - print("can't detect bank version") - bank_version = 62 + if sector[0] and bank_version == 0: + if externals_sector_size == 0: + print("can't detect bank version") + bank_version = 62 + except Exception as e: + file.close() + raise Exception(f"failed to extract sector {curr_sector}, {e}, {traceback.format_exc()}") # close file.close()