From e9582e1dc05300e734d86d4682f30b2087bd4cde Mon Sep 17 00:00:00 2001 From: david-ajax Date: Tue, 9 Dec 2025 15:49:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E6=96=B0=E7=89=88?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E7=AE=A1=E7=90=86=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/heurams/__init__.py | 2 +- src/heurams/interface/screens/precache.py | 27 +++++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/heurams/__init__.py b/src/heurams/__init__.py index 43fca4d..6d08cb3 100644 --- a/src/heurams/__init__.py +++ b/src/heurams/__init__.py @@ -1 +1 @@ -print("Hello from HeurAMS Program :)") +print("欢迎使用 HeurAMS 及其组件!") diff --git a/src/heurams/interface/screens/precache.py b/src/heurams/interface/screens/precache.py index db69f62..3a4582f 100644 --- a/src/heurams/interface/screens/precache.py +++ b/src/heurams/interface/screens/precache.py @@ -39,9 +39,10 @@ class PrecachingScreen(Screen): self.current_file = "" self.current_item = "" self.progress = 0 - self.total = 0 + self.total = len(nucleons) self.processed = 0 self.precache_worker = None + self.cancel_flag = 0 self.desc = desc for i in nucleons: i: pt.Nucleon @@ -70,6 +71,10 @@ class PrecachingScreen(Screen): yield Button("取消预缓存", id="cancel_precache", variant="error") yield Button("清空缓存", id="clear_cache", variant="warning") yield Button("返回", id="go_back", variant="default") + + yield Static("若您离开此界面, 未完成的缓存进程会自动停止.") + yield Static("缓存程序支持 \"断点续传\".") + yield Footer() def on_mount(self): @@ -116,17 +121,22 @@ class PrecachingScreen(Screen): def precache_by_list(self, nucleons: list): """依据 Nucleons 列表缓存""" for idx, nucleon in enumerate(nucleons): - print(f"PROC: {nucleon}") + #print(f"PROC: {nucleon}") worker = get_current_worker() if worker and worker.is_cancelled: # 函数在worker中执行且已被取消 return False text = nucleon.metadata['formation']['tts_text'] #self.current_item = text[:30] + "..." if len(text) > 50 else text - print(text) + #print(text) self.processed += 1 + #print(self.processed) + #print(self.total) progress = int((self.processed / self.total) * 100) if self.total > 0 else 0 + #print(progress) self.update_status( - f"正处理 ({idx + 1}/{len(nucleons)})" + f"正处理 ({idx + 1}/{len(nucleons)})", + text, + progress ) ret = self.precache_by_nucleon(nucleon) if not ret: @@ -136,6 +146,10 @@ class PrecachingScreen(Screen): ) import time time.sleep(1) + if self.cancel_flag: + worker.cancel() + self.cancel_flag = 0 + return False return True def precache_by_nucleons(self): @@ -197,6 +211,8 @@ class PrecachingScreen(Screen): if self.precache_worker: self.precache_worker.cancel() self.is_precaching = False + self.processed = 0 + self.progress = 0 self.update_status("已取消", "预缓存操作被用户取消", 0) elif event.button.id == "clear_cache": @@ -208,6 +224,9 @@ class PrecachingScreen(Screen): self.update_status("已清空", "音频缓存已清空", 0) except Exception as e: self.update_status("错误", f"清空缓存失败: {e}") + self.cancel_flag = 1 + self.processed = 0 + self.progress = 0 elif event.button.id == "go_back": self.action_go_back()