v0.2.4 基本可用型

This commit is contained in:
2025-07-25 22:04:46 +08:00
parent c679704e56
commit 3411765be7
9 changed files with 77 additions and 31 deletions

Binary file not shown.

View File

@@ -2,10 +2,6 @@ import time
import pathlib import pathlib
import toml import toml
def get_daystamp():
#print("Daystamp: ", (time.time() // (24*3600))) # 20292.0
return (time.time() // (24*3600))
class ConfigFile(): class ConfigFile():
def __init__(self, path): def __init__(self, path):
self.path = pathlib.Path(path) self.path = pathlib.Path(path)
@@ -23,4 +19,15 @@ class ConfigFile():
with open(path, 'w') as f: with open(path, 'w') as f:
toml.dump(self.data, f) toml.dump(self.data, f)
def get(self, key, default = None): def get(self, key, default = None):
pass return self.data.get(key, default)
def get_daystamp() -> int:
config = ConfigFile("config.toml")
time_override = config.get("time_override", -1)
if time_override is not None and time_override != -1:
print(f"TIME OVERRIDEED TO {time_override}")
return int(time_override)
return int(time.time() // (24 * 3600))

View File

@@ -1,4 +1,8 @@
# 将更改保存到文件 # [调试] 将更改保存到文件
save = 1 save = 1
# [调试] 覆写时间
time_override = 10
# 对于每个项目的新记忆核子数量 # 对于每个项目的新记忆核子数量
tasked_number = 8 tasked_number = 12
# 竖屏适配
mobile_mode = 1

24
main.py
View File

@@ -2,17 +2,19 @@ from textual.app import App, ComposeResult
from textual.widgets import Header, Footer, ListView, ListItem, Label, Static, Button from textual.widgets import Header, Footer, ListView, ListItem, Label, Static, Button
from textual.containers import Container, Horizontal from textual.containers import Container, Horizontal
from textual.screen import Screen from textual.screen import Screen
import particles as pt
from reactor import Reactor
import pathlib import pathlib
import threading import threading
import edge_tts as tts import edge_tts as tts
from playsound import playsound from playsound import playsound
from textual.logging import TextualHandler from textual.logging import TextualHandler
ver = '0.2.1' import particles as pt
from reactor import Reactor
import auxiliary as aux
debug = TextualHandler(stderr=True) ver = '0.2.4'
config = aux.ConfigFile("config.toml")
class MemScreen(Screen): class MemScreen(Screen):
BINDINGS = [ BINDINGS = [
@@ -37,7 +39,7 @@ class MemScreen(Screen):
self, self,
nucleon_file: pt.AtomicFile, nucleon_file: pt.AtomicFile,
electron_file: pt.AtomicFile, electron_file: pt.AtomicFile,
tasked_num: int tasked_num
): ):
super().__init__(name=None, id=None, classes=None) super().__init__(name=None, id=None, classes=None)
self.reactor = Reactor(nucleon_file, electron_file, tasked_num) self.reactor = Reactor(nucleon_file, electron_file, tasked_num)
@@ -104,13 +106,16 @@ class MemScreen(Screen):
ret = self.reactor.forward(1) ret = self.reactor.forward(1)
if ret == -1: if ret == -1:
if self.reactor.round_set == 0: if self.reactor.round_set == 0:
if self.stage == 3: if self.stage == 4:
# NOTE # # NOTE #
#self.reactor.save() if config.get("save"):
self.reactor.save()
self._show_finished_screen("今日目标已完成") self._show_finished_screen("今日目标已完成")
else: else:
self.stage += 1
self.reactor.set_round_templated(self.stage) self.reactor.set_round_templated(self.stage)
self.reactor.forward(1)
self._update_ui()
self.stage += 1
return return
#feedback_label.update("") # 清除反馈消息 #feedback_label.update("") # 清除反馈消息
self._update_ui() self._update_ui()
@@ -168,7 +173,7 @@ class PreparationScreen(Screen):
pass pass
if event.button.id == "start_memorizing_button": if event.button.id == "start_memorizing_button":
#init_file(Path(self.atom_file).name) #init_file(Path(self.atom_file).name)
newscr = MemScreen(self.nucleon_file, self.electron_file, 8) newscr = MemScreen(self.nucleon_file, self.electron_file, config.get("tasked_number", 8))
self.app.push_screen( self.app.push_screen(
newscr newscr
) )
@@ -236,6 +241,5 @@ class AppLauncher(App):
self.push_screen("file_selection_screen") self.push_screen("file_selection_screen")
if __name__ == "__main__": if __name__ == "__main__":
css_path = pathlib.Path("styles_dashboard.tcss")
app = AppLauncher() app = AppLauncher()
app.run() app.run()

View File

@@ -36,6 +36,17 @@ class Electron():
setattr(self, var, value) setattr(self, var, value)
self.last_modify = time.time() self.last_modify = time.time()
def export_data(self):
return {
'efactor': self.efactor,
'real_rept': self.real_rept,
'rept': self.rept,
'interval': self.interval,
'last_date': self.last_date,
'next_date': self.next_date,
'is_activated': self.is_activated
}
def revisor(self, quality): def revisor(self, quality):
"""SM-2 算法迭代决策机制实现 """SM-2 算法迭代决策机制实现
根据 quality(0 ~ 5) 进行参数迭代最佳间隔 根据 quality(0 ~ 5) 进行参数迭代最佳间隔
@@ -66,7 +77,7 @@ class Electron():
self.interval = round(self.interval * self.efactor) self.interval = round(self.interval * self.efactor)
self.last_date = aux.get_daystamp() self.last_date = aux.get_daystamp()
self.next_date = self.last_date + self.interval self.next_date = aux.get_daystamp() + self.interval
def __str__(self): def __str__(self):
return (f"记忆单元预览 \n" return (f"记忆单元预览 \n"
@@ -98,9 +109,9 @@ class Electron():
lst.append(Electron(i, all[i])) lst.append(Electron(i, all[i]))
return (name, lst) return (name, lst)
@staticmethod @staticmethod
def save_to_file(electron_list, path: pathlib.Path): def save_to_file(electron_dictized, path: pathlib.Path):
with open(path, 'w') as f: with open(path, 'w') as f:
toml.dump(electron_list, f) toml.dump(electron_dictized, f)
class Nucleon(): class Nucleon():
"""核子: 材料元数据""" """核子: 材料元数据"""
@@ -119,9 +130,9 @@ class Nucleon():
return (name, lst) return (name, lst)
@staticmethod @staticmethod
def save_to_file(nucleon_list, path: pathlib.Path): def save_to_file(nucleon_dictized, path: pathlib.Path):
with open(path, 'w') as f: with open(path, 'w') as f:
toml.dump(nucleon_list, f) toml.dump(nucleon_dictized, f)
@staticmethod @staticmethod
def placeholder(): def placeholder():
@@ -136,10 +147,12 @@ class AtomicFile():
if type_ == "electron": if type_ == "electron":
self.name, self.datalist = Electron.import_from_file(pathlib.Path(path)) self.name, self.datalist = Electron.import_from_file(pathlib.Path(path))
def save(self): def save(self):
dictobj = {i.content: i.export_data() for i in self.datalist}
print(dictobj)
if self.type_ == "nucleon": if self.type_ == "nucleon":
Nucleon.save_to_file(self.datalist, self.path) Nucleon.save_to_file(dictobj, self.path)
if self.type_ == "electron": if self.type_ == "electron":
Electron.save_to_file(self.datalist, self.path) Electron.save_to_file(dictobj, self.path)
def get_full_content(self): def get_full_content(self):
if self.type_ == "nucleon": if self.type_ == "nucleon":
text = "" text = ""

View File

@@ -3,10 +3,10 @@ import particles as pt
import pathlib import pathlib
import auxiliary as aux import auxiliary as aux
class Parser(): class Parser():
"""轻量级版本文件解析器, 用于解析记忆状态""" """轻量级版本文件解析器, 用于文件管理器的记忆状态解析"""
class Reactor(): class Reactor():
"""反应堆对象, 用于处理 & 分配一次文件记忆流程的资源/策略""" """反应堆对象, 用于全面解析文件, 并处理和分配一次文件记忆流程的资源策略"""
def __init__(self, nucleon_file: pt.AtomicFile, electron_file: pt.AtomicFile, tasked_num): def __init__(self, nucleon_file: pt.AtomicFile, electron_file: pt.AtomicFile, tasked_num):
# 导入原子对象 # 导入原子对象
self.reported = set() self.reported = set()
@@ -15,14 +15,28 @@ class Reactor():
self.tasked_num = tasked_num self.tasked_num = tasked_num
self.atoms_new = list() self.atoms_new = list()
self.atoms_review = list() self.atoms_review = list()
counter = self.tasked_num
electron_dict = {elect.content: elect for elect in electron_file.datalist} self.electron_dict = {elect.content: elect for elect in electron_file.datalist}
def electron_dict_get_fallback(key) -> pt.Electron:
value = self.electron_dict.get(key)
# 如果值不存在,则设置默认值
if value is None:
value = pt.Electron(key, {}) # 获取默认值
self.electron_dict[key] = value # 将默认值存入字典
value = self.electron_dict[key]
return value # 返回获取的值(可能是默认值)
for nucleon in nucleon_file.datalist: for nucleon in nucleon_file.datalist:
atom = (electron_dict.get(nucleon_file, pt.Electron.placeholder()), nucleon) atom = (electron_dict_get_fallback(nucleon.content), nucleon)
if atom[0].is_activated == 0: if atom[0].is_activated == 0:
atom[0].is_activated = 1 if counter > 0:
self.atoms_new.append(atom) atom[0].is_activated = 1
self.atoms_new.append(atom)
counter -= 1
else: else:
if atom[0].next_date <= aux.get_daystamp(): if atom[0].next_date <= aux.get_daystamp():
atom[0].last_date = aux.get_daystamp() atom[0].last_date = aux.get_daystamp()
@@ -81,7 +95,11 @@ class Reactor():
def save(self): def save(self):
print("Progress saved") print("Progress saved")
self.nucleon_file.save() # self.nucleon_file.save()
temp = list()
for i in self.electron_dict.keys():
temp.append(self.electron_dict[i])
self.electron_file.datalist = temp
self.electron_file.save() self.electron_file.save()
def report(self, atom, quality): def report(self, atom, quality):