fix: better start detection
This commit is contained in:
@@ -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),
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
import enum
|
||||
|
||||
|
||||
class ForgeState(enum.Enum):
|
||||
INITIAL = enum.auto()
|
||||
STARTED = enum.auto()
|
||||
RUNNING = enum.auto()
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user