试图移植

This commit is contained in:
2025-11-02 23:42:53 +08:00
parent f86187868b
commit 0e08fb3a41
18 changed files with 689 additions and 156 deletions

View File

@@ -1,7 +1,28 @@
#!/usr/bin/env python3
from textual.app import ComposeResult
from textual.widgets import (
Header,
Footer,
Label,
Input,
Select,
Button,
Markdown,
Static,
ProgressBar,
)
from textual.containers import Container, Horizontal, Center
from textual.containers import Container
from textual.screen import Screen
import pathlib
import heurams.kernel.particles as pt
import heurams.services.hasher as hasher
from heurams.context import *
class PrecachingScreen(Screen):
"""预缓存音频文件屏幕"""
BINDINGS = [("q", "go_back", "返回"), ("escape", "quit_app", "退出")]
BINDINGS = [("q", "go_back", "返回")]
def __init__(self, nucleon_file = None):
super().__init__(name=None, id=None, classes=None)
@@ -59,7 +80,7 @@ class PrecachingScreen(Screen):
"""预缓存单个文本的音频"""
cache_dir = pathlib.Path("./cache/voice/")
cache_dir.mkdir(parents=True, exist_ok=True)
cache = cache_dir / f"{aux.get_md5(text)}.wav"
cache = cache_dir / f"{hasher.get_md5(text)}.wav"
if not cache.exists():
try:
import edge_tts as tts
@@ -71,10 +92,10 @@ class PrecachingScreen(Screen):
return False
return True
def precache_file(self, nucleon_union: pt.NucleonUnion):
def precache_file(self, path: pathlib.Path):
"""预缓存单个文件的所有内容"""
self.current_file = nucleon_union.name
total_items = len(nucleon_union.nucleons)
self.current_file = path.name
total_items = len(pt.load_nucleon(path))
for idx, nucleon in enumerate(nucleon_union.nucleons):
# 检查是否被取消
@@ -102,6 +123,7 @@ class PrecachingScreen(Screen):
return True
def precache_all_files(self):
"""预缓存所有文件"""
nucleon_path = pathlib.Path("./nucleon")
@@ -109,10 +131,11 @@ class PrecachingScreen(Screen):
# 计算总项目数
self.total = 0
nu = list()
for file in nucleon_files:
try:
nu = pt.NucleonUnion(file)
self.total += len(nu.nucleons)
nu += pt.load_nucleon(file)
self.total = len(nu)
except:
continue
@@ -121,7 +144,7 @@ class PrecachingScreen(Screen):
for file in nucleon_files:
try:
nu = pt.NucleonUnion(file)
nu += pt.load_nucleon(file)
if not self.precache_file(nu):
break # 用户取消
except Exception as e: