From f3ab4f859d08a25476536647bed23b81e5c0b751 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Sun, 7 Jul 2024 13:52:47 -0500 Subject: [PATCH] fix: add backward compatibility for Flet 0.19.0 this is needed until more dust settles, for sake of testing. Flet 0.19.0 was the main version used for initial dev (iirc) and while the app now runs "fine" (and presumably would prefer) the latest Flet 0.23.2, the global error handler does *not* work there yet.. see also https://github.com/flet-dev/flet/issues/3615 --- wuttapos/app.py | 23 +++++++++++++++++++---- wuttapos/controls/timestamp.py | 16 +++++++++++++++- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/wuttapos/app.py b/wuttapos/app.py index 42db530..8765a35 100644 --- a/wuttapos/app.py +++ b/wuttapos/app.py @@ -169,7 +169,10 @@ def main(page: ft.Page): threading.excepthook = thread_exc_hook page.title = f"WuttaPOS v{wuttapos.__version__}" - page.window.full_screen = True + if hasattr(page, 'window'): + page.window.full_screen = True + else: + page.window_full_screen = True # global defaults for button/text styles etc. page.data = { @@ -179,7 +182,10 @@ def main(page: ft.Page): def clean_exit(): # TODO: this doesn't do anything interesting now, but it could - page.window.destroy() + if hasattr(page, 'window'): + page.window.destroy() + else: + page.window_destroy() def keyboard(e): # exit on ctrl+Q @@ -194,8 +200,12 @@ def main(page: ft.Page): clean_exit() # cf. https://flet.dev/docs/controls/page/#window_destroy - page.window.prevent_close = True - page.window.on_event = window_event + if hasattr(page, 'window'): + page.window.prevent_close = True + page.window.on_event = window_event + else: + page.window_prevent_close = True + page.window_on_event = window_event # TODO: probably these should be auto-loaded from spec from wuttapos.views.pos import POSView @@ -227,6 +237,11 @@ def main(page: ft.Page): elif page.route == '/login': page.views.append(LoginView(config, '/login')) + if hasattr(page, 'window'): + page.window.full_screen = True + else: + page.window_full_screen = True + page.update() # TODO: this was in example docs but not sure what it's for? diff --git a/wuttapos/controls/timestamp.py b/wuttapos/controls/timestamp.py index d3ff2bc..5f9b201 100644 --- a/wuttapos/controls/timestamp.py +++ b/wuttapos/controls/timestamp.py @@ -25,6 +25,8 @@ WuttaPOS - timestamp control """ import asyncio +import threading +import time import flet as ft @@ -43,7 +45,13 @@ class WuttaTimestamp(ft.Text): def did_mount(self): self.running = True - self.page.run_task(self.update_display) + if hasattr(self.page, 'run_task'): + self.page.run_task(self.update_display) + else: + # nb. daemonized thread should be stopped when app exits + # cf. https://docs.python.org/3/library/threading.html#thread-objects + thread = threading.Thread(target=self.update_display_blocking, daemon=True) + thread.start() def will_unmount(self): self.running = False @@ -56,3 +64,9 @@ class WuttaTimestamp(ft.Text): self.value = self.render_time(self.app.localtime()) self.update() await asyncio.sleep(0.5) + + def update_display_blocking(self): + while self.running: + self.value = self.render_time(self.app.localtime()) + self.update() + time.sleep(0.5)