From 217c19de5dbab494597792bed3e1a264450fb734 Mon Sep 17 00:00:00 2001 From: dazedanon Date: Sun, 24 Aug 2025 14:48:26 -0500 Subject: [PATCH] Add save progress feature so tl gets saved --- modules/rpgmakermvmz.py | 44 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/modules/rpgmakermvmz.py b/modules/rpgmakermvmz.py index fe7fa21..d4cebf9 100644 --- a/modules/rpgmakermvmz.py +++ b/modules/rpgmakermvmz.py @@ -232,6 +232,25 @@ def getResultString(translatedData, translationTime, filename): return filename + ": " + totalTokenstring + timeString + Fore.RED + " \u2717 " + errorString + Fore.RESET +def saveProgress(data, filename): + """Atomically write current data to translated/filename to avoid progress loss. + Skips when running in estimate mode. + """ + try: + if ESTIMATE: + return + os.makedirs("translated", exist_ok=True) + tmp_path = os.path.join("translated", f"{filename}.tmp") + final_path = os.path.join("translated", filename) + with open(tmp_path, "w", encoding="utf-8", newline="\n") as outFile: + json.dump(data, outFile, ensure_ascii=False, indent=4) + # Replace atomically when possible + os.replace(tmp_path, final_path) + except Exception: + # Best-effort; don't crash the translation if saving fails + traceback.print_exc() + + def parseMap(data, filename): totalTokens = [0, 0] totalLines = 0 @@ -298,6 +317,8 @@ def parseMap(data, filename): return [data, totalTokens, e] finally: pbar.update(len(page.get("list", []))) + # Persist progress after each page + saveProgress(data, filename) return [data, totalTokens, None] @@ -386,6 +407,8 @@ def parseCommonEvents(data, filename): return [data, totalTokens, e] finally: pbar.update(len(page.get("list", []))) + # Persist progress after each page + saveProgress(data, filename) return [data, totalTokens, None] @@ -416,6 +439,8 @@ def parseTroops(data, filename): return [data, totalTokens, e] finally: pbar.update(len(page.get("list", []))) + # Persist progress after each page + saveProgress(data, filename) return [data, totalTokens, None] @@ -431,6 +456,9 @@ def parseNames(data, filename, context): except Exception as e: traceback.print_exc() return [data, totalTokens, e] + finally: + # Persist progress after completing names pass/batches + saveProgress(data, filename) return [data, totalTokens, None] @@ -448,6 +476,9 @@ def parseSS(data, filename): except Exception as e: traceback.print_exc() return [data, totalTokens, e] + finally: + # Persist progress after each state + saveProgress(data, filename) return [data, totalTokens, None] @@ -463,6 +494,9 @@ def parseSystem(data, filename): except Exception as e: traceback.print_exc() return [data, totalTokens, e] + finally: + # Persist after system sections processed + saveProgress(data, filename) return [data, totalTokens, None] @@ -488,6 +522,8 @@ def parseScenario(data, filename): return [data, totalTokens, e] finally: pbar.update(len(page[1])) + # Persist progress after each page + saveProgress(data, filename) return [data, totalTokens, None] @@ -745,6 +781,8 @@ def searchNames(data, pbar, context): batchFull = False filling = False j += 1 + # Persist after applying this batch + saveProgress(data, FILENAME) else: mismatch = True @@ -785,7 +823,7 @@ def searchNames(data, pbar, context): continue else: # Get Text - file.write(f'{data[j]['name']} ({translatedNameBatch[0]})\n') + file.write(f"{data[j]['name']} ({translatedNameBatch[0]})\n") data[j]["name"] = translatedNameBatch[0] translatedNameBatch.pop(0) if "description" in data[j] and data[j]["description"] != "": @@ -800,6 +838,8 @@ def searchNames(data, pbar, context): batchFull = False filling = False j += 1 + # Persist after applying this batch + saveProgress(data, FILENAME) else: mismatch = True if context in ["Enemies", "Classes", "MapInfos"]: @@ -833,6 +873,8 @@ def searchNames(data, pbar, context): batchFull = False filling = False j += 1 + # Persist after applying this batch + saveProgress(data, FILENAME) else: mismatch = True