fix: 仪表盘改进
This commit is contained in:
@@ -20,7 +20,8 @@ try:
|
|||||||
print('已加载自定义用户配置')
|
print('已加载自定义用户配置')
|
||||||
except:
|
except:
|
||||||
print('未能加载自定义用户配置')
|
print('未能加载自定义用户配置')
|
||||||
runtime_var: ContextVar = ContextVar('runtime_var', default=dict()) # 运行时共享数据
|
|
||||||
|
#runtime_var: ContextVar = ContextVar('runtime_var', default=dict()) # 运行时共享数据
|
||||||
|
|
||||||
class ConfigContext:
|
class ConfigContext:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import heurams.context as cxt
|
from heurams.context import rootdir, workdir, config_var
|
||||||
from textual.app import App, ComposeResult
|
|
||||||
from textual.widgets import Button, Header, Label, Footer
|
from textual.app import App
|
||||||
|
from textual.widgets import Button
|
||||||
from .screens.dashboard import DashboardScreen
|
from .screens.dashboard import DashboardScreen
|
||||||
from .screens.preparation import PreparationScreen
|
|
||||||
from .screens.memorizor import MemScreen
|
|
||||||
from .screens.nucleon_creator import NucleonCreatorScreen
|
from .screens.nucleon_creator import NucleonCreatorScreen
|
||||||
from .screens.precache import PrecachingScreen
|
from .screens.precache import PrecachingScreen
|
||||||
|
|
||||||
class HeurAMSApp(App):
|
class HeurAMSApp(App):
|
||||||
TITLE = "潜进"
|
TITLE = "潜进"
|
||||||
|
#CSS_PATH = str(cxt.rootdir / "interface" / "css" / "main.css")
|
||||||
SUB_TITLE = "启发式先进记忆调度器"
|
SUB_TITLE = "启发式先进记忆调度器"
|
||||||
BINDINGS = [("q", "quit", "退出"),
|
BINDINGS = [("q", "quit", "退出"),
|
||||||
("d", "toggle_dark", "改变色调"),
|
("d", "toggle_dark", "改变色调"),
|
||||||
@@ -30,7 +30,7 @@ class HeurAMSApp(App):
|
|||||||
|
|
||||||
def environment_check():
|
def environment_check():
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
for i in cxt.config_var.get()["paths"].values():
|
for i in config_var.get()["paths"].values():
|
||||||
i = Path(i)
|
i = Path(i)
|
||||||
if not i.exists():
|
if not i.exists():
|
||||||
print(f"创建 {i}")
|
print(f"创建 {i}")
|
||||||
|
|||||||
@@ -34,16 +34,44 @@ class DashboardScreen(Screen):
|
|||||||
)
|
)
|
||||||
yield Footer()
|
yield Footer()
|
||||||
|
|
||||||
def item_desc_generator(self, path) -> dict:
|
def item_desc_generator(self, filename) -> dict:
|
||||||
|
"""简单分析以生成项目项显示文本
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: 以数字为列表, 分别呈现单行字符串
|
||||||
|
"""
|
||||||
res = dict()
|
res = dict()
|
||||||
path = pathlib.Path(path)
|
filestem = pathlib.Path(filename).stem
|
||||||
res[0] = f"{path.name}\0"
|
res[0] = f"{filename}\0"
|
||||||
res[1] = f""
|
from heurams.kernel.particles.loader import load_electron
|
||||||
res[1] = " 尚未激活"
|
import heurams.kernel.particles as pt
|
||||||
|
electron_file_path = (pathlib.Path(config_var.get()["paths"]["electron_dir"]) / (filestem + ".json"))
|
||||||
|
if electron_file_path.exists(): # 未找到则创建电子文件 (json)
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
electron_file_path.touch()
|
||||||
|
with open(electron_file_path, 'w') as f:
|
||||||
|
f.write("{}")
|
||||||
|
electron_dict = load_electron(path=electron_file_path) # TODO: 取消硬编码扩展名
|
||||||
|
is_due = 0
|
||||||
|
is_activated = 0
|
||||||
|
nextdate = 0x3f3f3f3f
|
||||||
|
for i in electron_dict.values():
|
||||||
|
i: pt.Electron
|
||||||
|
if i.is_due():
|
||||||
|
is_due = 1
|
||||||
|
if i.is_activated():
|
||||||
|
is_activated = 1
|
||||||
|
nextdate = min(nextdate, i.nextdate())
|
||||||
|
res[1] = f"下一次复习: {nextdate}\n"
|
||||||
|
res[1] += f"{is_due if "需要复习" else "当前无需复习"}"
|
||||||
|
if not is_activated:
|
||||||
|
res[1] = " 尚未激活"
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def on_mount(self) -> None:
|
def on_mount(self) -> None:
|
||||||
union_list_widget = self.query_one("#union-list", ListView)
|
union_list_widget = self.query_one("#union-list", ListView)
|
||||||
|
|
||||||
probe = probe_all(0)
|
probe = probe_all(0)
|
||||||
|
|
||||||
if len(probe["nucleon"]):
|
if len(probe["nucleon"]):
|
||||||
@@ -66,31 +94,25 @@ class DashboardScreen(Screen):
|
|||||||
if "未找到任何 .toml 文件" in str(selected_label.renderable):
|
if "未找到任何 .toml 文件" in str(selected_label.renderable):
|
||||||
return
|
return
|
||||||
|
|
||||||
selected_filename = pathlib.Path(str(selected_label.renderable).partition('\0')[0].replace('*', ""))
|
selected_filename = pathlib.Path(str(selected_label.renderable)
|
||||||
|
.partition('\0')[0] # 文件名末尾截断, 保留文件名
|
||||||
|
.replace('*', "")) # 去除markdown加粗
|
||||||
|
|
||||||
nucleon_file_path = pathlib.Path(config_var.get()["paths"]["nucleon_dir"]) / selected_filename
|
nucleon_file_path = pathlib.Path(config_var.get()["paths"]["nucleon_dir"]) / selected_filename
|
||||||
electron_file_path = pathlib.Path(config_var.get()["paths"]["electron_dir"]) / (str(selected_filename.stem) + ".json")
|
electron_file_path = pathlib.Path(config_var.get()["paths"]["electron_dir"]) / (str(selected_filename.stem) + ".json")
|
||||||
if electron_file_path.exists():
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
electron_file_path.touch()
|
|
||||||
with open(electron_file_path, 'w') as f:
|
|
||||||
f.write("{}")
|
|
||||||
self.app.push_screen(PreparationScreen(nucleon_file_path, electron_file_path))
|
self.app.push_screen(PreparationScreen(nucleon_file_path, electron_file_path))
|
||||||
|
|
||||||
def on_button_pressed(self, event) -> None:
|
def on_button_pressed(self, event) -> None:
|
||||||
if event.button.id == "new_nucleon_button":
|
if event.button.id == "new_nucleon_button":
|
||||||
|
# 切换到创建单元
|
||||||
from .nucleon_creator import NucleonCreatorScreen
|
from .nucleon_creator import NucleonCreatorScreen
|
||||||
newscr = NucleonCreatorScreen()
|
newscr = NucleonCreatorScreen()
|
||||||
self.app.push_screen(newscr)
|
self.app.push_screen(newscr)
|
||||||
elif event.button.id == "precache_all_button":
|
elif event.button.id == "precache_all_button":
|
||||||
self.action_precache_all()
|
# 切换到缓存管理器
|
||||||
|
from .precache import PrecachingScreen
|
||||||
def action_precache_all(self):
|
precache_screen = PrecachingScreen()
|
||||||
"""预缓存所有单元集的音频"""
|
self.app.push_screen(precache_screen)
|
||||||
from .precache import PrecachingScreen
|
|
||||||
precache_screen = PrecachingScreen()
|
|
||||||
self.app.push_screen(precache_screen)
|
|
||||||
|
|
||||||
def action_quit_app(self) -> None:
|
def action_quit_app(self) -> None:
|
||||||
self.app.exit()
|
self.app.exit()
|
||||||
|
|||||||
@@ -77,5 +77,5 @@ class SM2Algorithm(BaseAlgorithm):
|
|||||||
return str(algodata[cls.algo_name]['efactor'])
|
return str(algodata[cls.algo_name]['efactor'])
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def nextdate(cls, algodata):
|
def nextdate(cls, algodata) -> int:
|
||||||
return algodata[cls.algo_name]['next_date']
|
return algodata[cls.algo_name]['next_date']
|
||||||
@@ -50,7 +50,7 @@ class Electron:
|
|||||||
"评价"
|
"评价"
|
||||||
return self.algo.rate(self.algodata)
|
return self.algo.rate(self.algodata)
|
||||||
|
|
||||||
def nextdate(self):
|
def nextdate(self) -> int:
|
||||||
return self.algo.nextdate(self.algodata)
|
return self.algo.nextdate(self.algodata)
|
||||||
|
|
||||||
def revisor(self, quality: int = 5, is_new_activation: bool = False):
|
def revisor(self, quality: int = 5, is_new_activation: bool = False):
|
||||||
|
|||||||
@@ -32,10 +32,19 @@ def load_nucleon(path: pathlib.Path, fmt = "toml"):
|
|||||||
return lst
|
return lst
|
||||||
|
|
||||||
def load_electron(path: pathlib.Path, fmt = "json") -> dict:
|
def load_electron(path: pathlib.Path, fmt = "json") -> dict:
|
||||||
|
"""从文件路径加载电子对象
|
||||||
|
|
||||||
|
Args:
|
||||||
|
path (pathlib.Path): 路径
|
||||||
|
fmt (str): 文件格式(可选, 默认 json)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: 键名是电子对象名称, 值是电子对象
|
||||||
|
"""
|
||||||
with open(path, "r") as f:
|
with open(path, "r") as f:
|
||||||
dictdata = dict()
|
dictdata = dict()
|
||||||
dictdata = json.load(f) # type: ignore
|
dictdata = json.load(f) # type: ignore
|
||||||
dic = dict()
|
dic = dict()
|
||||||
for item, attr in dictdata.items():
|
for item, attr in dictdata.items():
|
||||||
dic["item"] = (Electron(hasher.hash(item), attr))
|
dic[item] = (Electron(hasher.hash(item), attr))
|
||||||
return dic
|
return dic
|
||||||
@@ -14,7 +14,14 @@ def probe_by_filename(filename):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
def probe_all(is_stem = 1):
|
def probe_all(is_stem = 1):
|
||||||
"""依据目录探测所有信息"""
|
"""依据目录探测所有信息
|
||||||
|
|
||||||
|
Args:
|
||||||
|
is_stem (boolean): 是否**删除**文件扩展名
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: 有三项, 每一项的键名都是文件组类型, 值都是文件组列表, 只包含文件名
|
||||||
|
"""
|
||||||
paths: dict = config_var.get().get("paths")
|
paths: dict = config_var.get().get("paths")
|
||||||
result = {}
|
result = {}
|
||||||
for item, attr in paths.items():
|
for item, attr in paths.items():
|
||||||
|
|||||||
Reference in New Issue
Block a user