1
0
mirror of https://github.com/Escartem/AnimeWwise.git synced 2026-06-21 19:48:00 +08:00

new progress bar, files no longer sorted by source & fixes

This commit is contained in:
Escartem
2024-07-25 11:39:46 +02:00
parent 6b31a70348
commit 37489e47ce
4 changed files with 66 additions and 23 deletions

15
app.py
View File

@@ -51,12 +51,12 @@ class BackgroundWorker(QObject):
def run(self): def run(self):
if self.action == "load": if self.action == "load":
print("Loading files and mapping if necessary...") 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: if fileStructure is None:
self.finished.emit({"action": "error", "content": {"msg": "Nothing found !", "state": 1}}) self.finished.emit({"action": "error", "content": {"msg": "Nothing found !", "state": 1}})
print("Nothing found !") print("Nothing found !")
return return
print("Done !") print("Building file structure...")
self.finished.emit({"action": "load", "content": fileStructure}) self.finished.emit({"action": "load", "content": fileStructure})
if self.action == "extract": if self.action == "extract":
if len(self.files) == 0: if len(self.files) == 0:
@@ -117,6 +117,8 @@ class AnimeWwise(QMainWindow):
# workers # workers
@pyqtSlot(list) @pyqtSlot(list)
def progressBarSlot(self, progress): def progressBarSlot(self, progress):
if progress[0] == "load":
self.loadProgress.setValue(math.ceil(progress[1]))
if progress[0] == "total": if progress[0] == "total":
self.totalProgress.setValue(math.ceil(progress[1])) self.totalProgress.setValue(math.ceil(progress[1]))
elif progress[0] == "file": elif progress[0] == "file":
@@ -131,6 +133,7 @@ class AnimeWwise(QMainWindow):
self.tabs.setTabEnabled(1, True) self.tabs.setTabEnabled(1, True)
self.tabs.setTabEnabled(2, True) self.tabs.setTabEnabled(2, True)
self.tabs.setCurrentIndex(1) self.tabs.setCurrentIndex(1)
print("Done !")
if data["action"] == "error": if data["action"] == "error":
QMessageBox.warning(None, "Warning", data["content"]["msg"], QMessageBox.Ok) QMessageBox.warning(None, "Warning", data["content"]["msg"], QMessageBox.Ok)
state = data["content"]["state"] state = data["content"]["state"]
@@ -182,7 +185,7 @@ class AnimeWwise(QMainWindow):
def updateTreeWidget(self): def updateTreeWidget(self):
self.treeWidget.clear() self.treeWidget.clear()
self.treeWidget.setColumnCount(3) self.treeWidget.setColumnCount(3)
self.treeWidget.setHeaderLabels(["Name", "Offset", "Size"]) self.treeWidget.setHeaderLabels(["Name", "Offset", "Size", "Source"])
self.addItems(None, self.fileStructure) self.addItems(None, self.fileStructure)
@@ -198,7 +201,7 @@ class AnimeWwise(QMainWindow):
def addItems(self, parent, element): def addItems(self, parent, element):
for folder_name in sorted(element.get("folders", {}).keys()): for folder_name in sorted(element.get("folders", {}).keys()):
folder_content = element["folders"][folder_name] 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.setFlags(folder_item.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable)
folder_item.setCheckState(0, Qt.Unchecked) folder_item.setCheckState(0, Qt.Unchecked)
if parent is None: if parent is None:
@@ -208,7 +211,7 @@ class AnimeWwise(QMainWindow):
self.addItems(folder_item, folder_content) self.addItems(folder_item, folder_content)
for file in sorted(element.get("files", [])): 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.setFlags(file_item.flags() | Qt.ItemIsUserCheckable)
file_item.setCheckState(0, Qt.Unchecked) file_item.setCheckState(0, Qt.Unchecked)
if parent is None: if parent is None:
@@ -262,7 +265,7 @@ class AnimeWwise(QMainWindow):
return { return {
"name": item.text(0), "name": item.text(0),
"path": path[1:-1], "path": path[1:-1],
"source": path[0], "source": item.text(3),
"offset": int(item.text(1), 16), "offset": int(item.text(1), 16),
"size": int(item.text(2)) "size": int(item.text(2))
} }

View File

@@ -18,7 +18,7 @@ class WwiseExtract:
### loading files ### ### loading files ###
def load_folder(self, _map, folder_path, diff_path): def load_folder(self, _map, folder_path, diff_path, progress):
self.mapper = None self.mapper = None
if _map is not None: if _map is not None:
self.mapper = Mapper(path(cwd, f"maps/{_map}")) self.mapper = Mapper(path(cwd, f"maps/{_map}"))
@@ -32,7 +32,12 @@ class WwiseExtract:
if len(files) == 0: if len(files) == 0:
return None return None
pos = 0
print(f"\nLoading {len(files)} files...")
for file in files: for file in files:
pos += 1
progress(["load", pos * 100 // len(files)])
hdiff = None hdiff = None
if f"{file}.hdiff" in hdiff_files: if f"{file}.hdiff" in hdiff_files:
hdiff = path(diff_path, hdiff_files[hdiff_files.index(f"{file}.hdiff")]) 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): def get_wems(self, data, filename, hdiff):
reader = FileReader(io.BytesIO(data), "little") reader = FileReader(io.BytesIO(data), "little")
files = wavescan.get_data(reader) files = wavescan.get_data(reader, filename)
if hdiff is not None: if hdiff is not None:
with open(hdiff, "rb") as f: with open(hdiff, "rb") as f:
hdiff_data = f.read() hdiff_data = f.read()
@@ -96,13 +101,14 @@ class WwiseExtract:
f.close() f.close()
reader = FileReader(io.BytesIO(data), "little") reader = FileReader(io.BytesIO(data), "little")
files = wavescan.get_data(reader) files = wavescan.get_data(reader, source_name)
working_dir.cleanup() working_dir.cleanup()
return files 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 mapper = self.mapper
base = self.file_structure base = self.file_structure
@@ -123,12 +129,19 @@ class WwiseExtract:
key[0] = f"new_files\\{key[0]}" key[0] = f"new_files\\{key[0]}"
else: else:
key[0] = f"changed_files\\{key[0]}" 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: else:
temp = base["folders"] temp = base["folders"]
if filename not in temp:
temp[filename] = {"folders": {}, "files": []} if not skip_source:
temp = temp[filename]["folders"] if filename not in temp:
temp[filename] = {"folders": {}, "files": []}
temp = temp[filename]["folders"]
if hdiff: if hdiff:
if file in old_files[0]: if file in old_files[0]:
@@ -157,7 +170,7 @@ class WwiseExtract:
current_level = current_level["folders"][part] current_level = current_level["folders"][part]
if "files" not in current_level: if "files" not in current_level:
current_level["files"] = [] 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 ### ### extracting files ###

36
gui.ui
View File

@@ -166,11 +166,36 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="loadFilesButton"> <layout class="QVBoxLayout" name="loadLayout">
<property name="text"> <item>
<string>Load file(s)</string> <widget class="QPushButton" name="loadFilesButton">
</property> <property name="text">
</widget> <string>Load file(s)</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="loadProgressLayout">
<item>
<widget class="QLabel" name="loadLabel">
<property name="text">
<string>Progress</string>
</property>
</widget>
</item>
<item>
<widget class="QProgressBar" name="loadProgress">
<property name="value">
<number>0</number>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item> </item>
</layout> </layout>
</widget> </widget>
@@ -407,7 +432,6 @@
<tabstop>changeInput</tabstop> <tabstop>changeInput</tabstop>
<tabstop>altInputPath</tabstop> <tabstop>altInputPath</tabstop>
<tabstop>changeAltInput</tabstop> <tabstop>changeAltInput</tabstop>
<tabstop>loadFilesButton</tabstop>
<tabstop>tabs</tabstop> <tabstop>tabs</tabstop>
</tabstops> </tabstops>
<resources/> <resources/>

View File

@@ -6,13 +6,16 @@ import traceback
reader = None reader = None
bank_version = 0 bank_version = 0
wwise_data = [] wwise_data = []
filename = ""
def get_data(_reader): def get_data(_reader, _filename):
global wwise_data global wwise_data
global bank_version global bank_version
global reader global reader
global filename
filename = _filename
wwise_data = [] wwise_data = []
reader = _reader reader = _reader
@@ -209,4 +212,4 @@ def extract_sector(section_size, is_sounds, is_externals, ext, endianness, lang_
continue continue
# file infos # file infos
wwise_data.append([os.path.basename(name), offset, size]) wwise_data.append([os.path.basename(name), offset, size, filename])