From 37489e47ce03a59107654fd5440967067a4cf57b Mon Sep 17 00:00:00 2001 From: Escartem Date: Thu, 25 Jul 2024 11:39:46 +0200 Subject: [PATCH] new progress bar, files no longer sorted by source & fixes --- app.py | 15 +++++++++------ extract.py | 31 ++++++++++++++++++++++--------- gui.ui | 36 ++++++++++++++++++++++++++++++------ wavescan.py | 7 +++++-- 4 files changed, 66 insertions(+), 23 deletions(-) diff --git a/app.py b/app.py index 679f99d..4e1ec88 100644 --- a/app.py +++ b/app.py @@ -51,12 +51,12 @@ class BackgroundWorker(QObject): def run(self): if self.action == "load": print("Loading files and mapping if necessary...") - fileStructure = self.extract.load_folder(self.map, self.input, self.diff) + fileStructure = self.extract.load_folder(self.map, self.input, self.diff, progress=self.progress.emit) if fileStructure is None: self.finished.emit({"action": "error", "content": {"msg": "Nothing found !", "state": 1}}) print("Nothing found !") return - print("Done !") + print("Building file structure...") self.finished.emit({"action": "load", "content": fileStructure}) if self.action == "extract": if len(self.files) == 0: @@ -117,6 +117,8 @@ class AnimeWwise(QMainWindow): # workers @pyqtSlot(list) def progressBarSlot(self, progress): + if progress[0] == "load": + self.loadProgress.setValue(math.ceil(progress[1])) if progress[0] == "total": self.totalProgress.setValue(math.ceil(progress[1])) elif progress[0] == "file": @@ -131,6 +133,7 @@ class AnimeWwise(QMainWindow): self.tabs.setTabEnabled(1, True) self.tabs.setTabEnabled(2, True) self.tabs.setCurrentIndex(1) + print("Done !") if data["action"] == "error": QMessageBox.warning(None, "Warning", data["content"]["msg"], QMessageBox.Ok) state = data["content"]["state"] @@ -182,7 +185,7 @@ class AnimeWwise(QMainWindow): def updateTreeWidget(self): self.treeWidget.clear() self.treeWidget.setColumnCount(3) - self.treeWidget.setHeaderLabels(["Name", "Offset", "Size"]) + self.treeWidget.setHeaderLabels(["Name", "Offset", "Size", "Source"]) self.addItems(None, self.fileStructure) @@ -198,7 +201,7 @@ class AnimeWwise(QMainWindow): def addItems(self, parent, element): for folder_name in sorted(element.get("folders", {}).keys()): folder_content = element["folders"][folder_name] - folder_item = QTreeWidgetItem([folder_name, "", ""]) + folder_item = QTreeWidgetItem([folder_name, "", "", ""]) folder_item.setFlags(folder_item.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable) folder_item.setCheckState(0, Qt.Unchecked) if parent is None: @@ -208,7 +211,7 @@ class AnimeWwise(QMainWindow): self.addItems(folder_item, folder_content) for file in sorted(element.get("files", [])): - file_item = QTreeWidgetItem([str(file[0]), str(hex(file[1])), str(file[2])]) + file_item = QTreeWidgetItem([str(file[0]), str(hex(file[1])), str(file[2]), str(file[3])]) file_item.setFlags(file_item.flags() | Qt.ItemIsUserCheckable) file_item.setCheckState(0, Qt.Unchecked) if parent is None: @@ -262,7 +265,7 @@ class AnimeWwise(QMainWindow): return { "name": item.text(0), "path": path[1:-1], - "source": path[0], + "source": item.text(3), "offset": int(item.text(1), 16), "size": int(item.text(2)) } diff --git a/extract.py b/extract.py index 2dbebd4..d575ac5 100644 --- a/extract.py +++ b/extract.py @@ -18,7 +18,7 @@ class WwiseExtract: ### loading files ### - def load_folder(self, _map, folder_path, diff_path): + def load_folder(self, _map, folder_path, diff_path, progress): self.mapper = None if _map is not None: self.mapper = Mapper(path(cwd, f"maps/{_map}")) @@ -32,7 +32,12 @@ class WwiseExtract: if len(files) == 0: return None + pos = 0 + print(f"\nLoading {len(files)} files...") for file in files: + pos += 1 + progress(["load", pos * 100 // len(files)]) + hdiff = None if f"{file}.hdiff" in hdiff_files: hdiff = path(diff_path, hdiff_files[hdiff_files.index(f"{file}.hdiff")]) @@ -48,7 +53,7 @@ class WwiseExtract: def get_wems(self, data, filename, hdiff): reader = FileReader(io.BytesIO(data), "little") - files = wavescan.get_data(reader) + files = wavescan.get_data(reader, filename) if hdiff is not None: with open(hdiff, "rb") as f: hdiff_data = f.read() @@ -96,13 +101,14 @@ class WwiseExtract: f.close() reader = FileReader(io.BytesIO(data), "little") - files = wavescan.get_data(reader) + files = wavescan.get_data(reader, source_name) working_dir.cleanup() return files - def map_names(self, files, filename, hdiff=False): + def map_names(self, files, filename, hdiff=False, skip_source=True): + # disable skip source if required mapper = self.mapper base = self.file_structure @@ -123,12 +129,19 @@ class WwiseExtract: key[0] = f"new_files\\{key[0]}" else: key[0] = f"changed_files\\{key[0]}" - self.add_to_structure(f"{filename}\\{key[0]}.wem".split("\\"), [file[1], file[2]]) + + parts = f"{filename}\\{key[0]}.wem".split("\\") + if skip_source: + parts = parts[1:] + + self.add_to_structure(parts, [file[1], file[2], file[3]]) else: temp = base["folders"] - if filename not in temp: - temp[filename] = {"folders": {}, "files": []} - temp = temp[filename]["folders"] + + if not skip_source: + if filename not in temp: + temp[filename] = {"folders": {}, "files": []} + temp = temp[filename]["folders"] if hdiff: if file in old_files[0]: @@ -157,7 +170,7 @@ class WwiseExtract: current_level = current_level["folders"][part] if "files" not in current_level: current_level["files"] = [] - current_level["files"].append([parts[-1], meta[0], meta[1]]) + current_level["files"].append([parts[-1], meta[0], meta[1], meta[2]]) ### extracting files ### diff --git a/gui.ui b/gui.ui index 34b6961..9654c12 100644 --- a/gui.ui +++ b/gui.ui @@ -166,11 +166,36 @@ - - - Load file(s) - - + + + + + Load file(s) + + + + + + + + + Progress + + + + + + + 0 + + + false + + + + + + @@ -407,7 +432,6 @@ changeInput altInputPath changeAltInput - loadFilesButton tabs diff --git a/wavescan.py b/wavescan.py index 9af3b24..581a006 100644 --- a/wavescan.py +++ b/wavescan.py @@ -6,13 +6,16 @@ import traceback reader = None bank_version = 0 wwise_data = [] +filename = "" -def get_data(_reader): +def get_data(_reader, _filename): global wwise_data global bank_version global reader + global filename + filename = _filename wwise_data = [] reader = _reader @@ -209,4 +212,4 @@ def extract_sector(section_size, is_sounds, is_externals, ext, endianness, lang_ continue # file infos - wwise_data.append([os.path.basename(name), offset, size]) + wwise_data.append([os.path.basename(name), offset, size, filename])