PyWebWinUI3 1.2.3__py3-none-any.whl → 1.2.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
pywebwinui3/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  __all__ = ["core", "event", "util", "type"]
2
2
 
3
- __version__ = '1.2.3'
3
+ __version__ = '1.2.4'
pywebwinui3/core.py CHANGED
@@ -216,6 +216,8 @@ class MainWindow:
216
216
  self._startup_cloaked = False
217
217
  self._sync_lock = threading.Lock()
218
218
  self._pending_sync: dict[str, object] = {}
219
+ self._sync_event = threading.Event()
220
+ self._sync_thread: threading.Thread | None = None
219
221
  self._ui_server: _UiHttpServer | None = None
220
222
  self._ui_server_thread: threading.Thread | None = None
221
223
  self._ui_origin = ""
@@ -581,6 +583,9 @@ class MainWindow:
581
583
 
582
584
  def _on_closed(self):
583
585
  self.accent.stop()
586
+ with self._sync_lock:
587
+ self._pending_sync.clear()
588
+ self._sync_event.set()
584
589
  self._stop_ui_server()
585
590
  self.events.closed.set()
586
591
 
@@ -593,19 +598,39 @@ class MainWindow:
593
598
 
594
599
  script = f"window.syncValue({json.dumps(key, ensure_ascii=False)}, {json.dumps(value, ensure_ascii=False)}, false)"
595
600
  try:
596
- self._window.evaluate_js(script)
601
+ self._window.run_js(script)
597
602
  except Exception:
598
- with self._sync_lock:
599
- self._pending_sync[key] = value
600
603
  core_logger.debug("Failed to sync value %s", key, exc_info=True)
601
604
 
602
605
  def queue_sync_value(self, key: str, value):
603
606
  with self._sync_lock:
604
- if not self._frontend_ready:
605
- self._pending_sync[key] = value
606
- return
607
+ self._pending_sync[key] = value
608
+ frontend_ready = self._frontend_ready
607
609
 
608
- self._dispatch_sync_value(key, value)
610
+ if not frontend_ready:
611
+ return
612
+ self._ensure_sync_worker()
613
+ self._sync_event.set()
614
+
615
+ def _ensure_sync_worker(self):
616
+ if self._sync_thread and self._sync_thread.is_alive():
617
+ return
618
+ self._sync_thread = threading.Thread(target=self._sync_loop, daemon=True, name="PyWebWinUI3-Sync")
619
+ self._sync_thread.start()
620
+
621
+ def _sync_loop(self):
622
+ while True:
623
+ self._sync_event.wait()
624
+ while True:
625
+ with self._sync_lock:
626
+ if not self._pending_sync:
627
+ self._sync_event.clear()
628
+ break
629
+ pending = tuple(self._pending_sync.items())
630
+ self._pending_sync.clear()
631
+
632
+ for key, value in pending:
633
+ self._dispatch_sync_value(key, value)
609
634
 
610
635
  def _set_window_maximized_state(self, value: bool, *, sync: bool = True):
611
636
  value = bool(value)
@@ -633,12 +658,8 @@ class MainWindow:
633
658
 
634
659
  self._frontend_ready = True
635
660
 
636
- with self._sync_lock:
637
- pending_sync = tuple(self._pending_sync.items())
638
- self._pending_sync.clear()
639
-
640
- for key, value in pending_sync:
641
- self._dispatch_sync_value(key, value)
661
+ self._ensure_sync_worker()
662
+ self._sync_event.set()
642
663
 
643
664
  if not self._setup_fired:
644
665
  self._setup_fired = True
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyWebWinUI3
3
- Version: 1.2.3
3
+ Version: 1.2.4
4
4
  Summary: Create modern WinUI3-style desktop UIs in Python using pywebview and a Svelte frontend.
5
5
  Home-page: https://github.com/Haruna5718/PyWebWinUI3
6
6
  Author: Haruna5718
@@ -1,5 +1,5 @@
1
- pywebwinui3/__init__.py,sha256=34QWjg8kbS3C7J-mdOaPvMDNAAfQLhPPABO2mgv2zkw,66
2
- pywebwinui3/core.py,sha256=8LDTr-JcJlngzC8lPHuUkQ0QXqCUSCkNOCQkX1Ehrvk,24111
1
+ pywebwinui3/__init__.py,sha256=dELckhe6h06cDzuGygRIUe4A43IsYoYnhMHDItwPeQw,66
2
+ pywebwinui3/core.py,sha256=EZrgmY4bkLf0uVFpj4UL3XK3J5OuLwfwJ9u2o1xZlQQ,24699
3
3
  pywebwinui3/event.py,sha256=WQqKGl40s7EsN0VNdPZz3KSurAOvE6hasTbTdrOk8K0,3483
4
4
  pywebwinui3/type.py,sha256=NkxosZp1yF6reRz4NGIRHZUNqWTVeSTGTUM44lnEdXY,16832
5
5
  pywebwinui3/util.py,sha256=YGLDy0w1jh55QYqwyQ_BCFnIFhQt3mHWYIeUuv-FPBg,8058
@@ -114,9 +114,9 @@ pywebwinui3/web/_app/immutable/entry/start.C1-i6FUr.js,sha256=osMzkcE-SeLNWrA_xB
114
114
  pywebwinui3/web/_app/immutable/nodes/0.C49PHrK2.js,sha256=JQDS1Ty6_bpiVL3o_e0qkgN7c8oi8xtiu9cvsae7-V0,2198
115
115
  pywebwinui3/web/_app/immutable/nodes/1.a96iIGzo.js,sha256=OYIaRhei3bNfUrkUjts4LVDNj8CJT0Z1Cnd_sYUfAUA,551
116
116
  pywebwinui3/web/_app/immutable/nodes/2.Ofs4dh3G.js,sha256=eNc-eyVk3-EY3pe-x2PQxMA2QiHRuSrtcRuedr214g0,53661
117
- pywebwinui3-1.2.3.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
118
- pywebwinui3-1.2.3.dist-info/licenses/NOTICE,sha256=Yb2RpRC65HsU91Zs88pDqCz9ctsljajXAMw4XwP6o-M,580
119
- pywebwinui3-1.2.3.dist-info/METADATA,sha256=OjBMIHGuTJopoe0ZI6O_VhEB6XGssZW0PTfhPbWSixk,6694
120
- pywebwinui3-1.2.3.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
121
- pywebwinui3-1.2.3.dist-info/top_level.txt,sha256=vpnY4RY-Nbtbl1rdO5LaZYJspOEz3QjCsQXROJuyCGo,12
122
- pywebwinui3-1.2.3.dist-info/RECORD,,
117
+ pywebwinui3-1.2.4.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
118
+ pywebwinui3-1.2.4.dist-info/licenses/NOTICE,sha256=Yb2RpRC65HsU91Zs88pDqCz9ctsljajXAMw4XwP6o-M,580
119
+ pywebwinui3-1.2.4.dist-info/METADATA,sha256=Hvu-D0rE-HblVI6kbpNl9kpW_uP3PtepMOWCmTcrxdY,6694
120
+ pywebwinui3-1.2.4.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
121
+ pywebwinui3-1.2.4.dist-info/top_level.txt,sha256=vpnY4RY-Nbtbl1rdO5LaZYJspOEz3QjCsQXROJuyCGo,12
122
+ pywebwinui3-1.2.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (82.0.1)
2
+ Generator: setuptools (83.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5