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:
15
app.py
15
app.py
@@ -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))
|
||||||
}
|
}
|
||||||
|
|||||||
31
extract.py
31
extract.py
@@ -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
36
gui.ui
@@ -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/>
|
||||||
|
|||||||
@@ -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])
|
||||||
|
|||||||
Reference in New Issue
Block a user