fix: better start detection
Python Lint CI / ruff-format-check (push) Successful in 6m21s
Python Lint CI / ruff (push) Successful in 6m27s
Python Lint CI / ty (push) Successful in 6m20s

This commit is contained in:
2026-11-11 21:39:56 +01:00
parent a53cab17f0
commit 7c486af691
4 changed files with 33 additions and 30 deletions
+2 -1
View File
@@ -17,7 +17,8 @@ FONT_2_PATH = RESOURCES_PATH / "Px437_IBM_BIOS.ttf"
LOADING_IMG_PATH = RESOURCES_PATH / "loading.png"
BACKGROUND_IMG_PATH = RESOURCES_PATH / "background.png"
ESTIMATED_BOOT_TIME_SECONDS = 25.0
ESTIMATED_BOOT_TIME_SECONDS = 5.0
ESTIMATED_LONG_BOOT_TIME_SECONDS = 20.0
SELECTED_RECT_BOUNDS = [
(0, 0, 0, 0),
+22 -5
View File
@@ -7,6 +7,7 @@ from .constants import (
ACTIVE_SRC_RECT_BOUNDS,
BACKGROUND_IMG_PATH,
ESTIMATED_BOOT_TIME_SECONDS,
ESTIMATED_LONG_BOOT_TIME_SECONDS,
FONT_1_PATH,
FONT_2_PATH,
FX_GROUP,
@@ -19,7 +20,6 @@ from .constants import (
SRCA_FRAG,
SRCB_FRAG,
)
from .enums import ForgeState
from .forge_data import ForgeData
from .glsl_funcs import mod
@@ -41,10 +41,27 @@ def __get_loading_display(data: ForgeData, t0: float) -> Image.Image:
draw = ImageDraw.Draw(im)
now = time.time()
elapsed = now - t0
percent = min(1.0, (now - t0) / ESTIMATED_BOOT_TIME_SECONDS)
draw.rectangle((24, 35, 24 + 80 * percent, 40), fill="white")
if elapsed < ESTIMATED_BOOT_TIME_SECONDS:
draw.rectangle(
(24, 35, 24 + int(80 * elapsed / ESTIMATED_BOOT_TIME_SECONDS), 40),
fill="white",
)
elif elapsed < ESTIMATED_LONG_BOOT_TIME_SECONDS * 2.0:
draw.rectangle(
(
24,
35,
24 + int(80 * min(1.0, elapsed / ESTIMATED_LONG_BOOT_TIME_SECONDS)),
40,
),
fill="white",
)
draw.text((36, 43), "Compiling...", fill="white", font=FONT_1)
else:
draw.rectangle((24, 35, 24 + 80, 40), fill="white")
draw.text((28, 43), "Please reboot", fill="white", font=FONT_1)
return im
@@ -173,6 +190,6 @@ def __get_running_display(data: ForgeData) -> Image.Image:
def get_display(data: ForgeData, t0: float) -> Image.Image:
if data.state == ForgeState.RUNNING:
if data.running:
return __get_running_display(data)
return __get_loading_display(data, t0)
-7
View File
@@ -1,7 +0,0 @@
import enum
class ForgeState(enum.Enum):
INITIAL = enum.auto()
STARTED = enum.auto()
RUNNING = enum.auto()
+9 -17
View File
@@ -18,7 +18,6 @@ from .constants import (
MIX_FRAG,
MOCK_SAVE_PATH,
)
from .enums import ForgeState
from .glsl_funcs import fract, magic, magic_trigger, rand_time
log = logging.getLogger(__name__)
@@ -54,34 +53,27 @@ class ForgeData:
def __init__(self) -> None:
self.__data = ForgeSave(FORGE_SAVE_PATH)
self.__backup_data = ForgeSave(FORGE_SAVE_BACKUP_PATH)
self.state = ForgeState.INITIAL
self.running = False
self.__last_backup: float = time.time()
self.__start_time = 0
def __enter__(self) -> typing.Self:
if self.__backup_data.read():
self.__data.update(self.__backup_data)
log.info("restored data from backup")
elif self.__data.read() and self.time > 0 and self.time < 1:
self.state = ForgeState.RUNNING
log.info("FORGE already running")
else:
self.__data.read()
self.__start_time = self.time
return self
def __exit__(self, *_) -> None:
pass
def __update_state(self) -> None:
if self.state == ForgeState.RUNNING:
if self.running:
return
elif self.state == ForgeState.STARTED:
if self.time > 0:
log.info("FORGE running")
self.state = ForgeState.RUNNING
elif "time" in self.__data and self.time == 0:
log.info("FORGE started")
self.state = ForgeState.STARTED
elif self.time > 0 and self.time < 5:
self.state = ForgeState.RUNNING
log.info("FORGE running (fallback)")
if self.time > 0 and self.time != self.__start_time:
self.running = True
def __backup(self) -> None:
now = time.time()
@@ -252,5 +244,5 @@ class ForgeData:
mock_data = ForgeSave(MOCK_SAVE_PATH)
if mock_data.read():
self.__data.update(mock_data)
self.state = ForgeState.RUNNING
self.running = True
return self