frontengine 1.0.21__tar.gz → 1.0.22__tar.gz

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.

Potentially problematic release.


This version of frontengine might be problematic. Click here for more details.

Files changed (136) hide show
  1. {frontengine-1.0.21 → frontengine-1.0.22}/PKG-INFO +1 -1
  2. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/pet/desktop_pet.py +79 -1
  3. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/user_setting/user_setting_file.py +3 -0
  4. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine.egg-info/PKG-INFO +1 -1
  5. {frontengine-1.0.21 → frontengine-1.0.22}/pyproject.toml +1 -1
  6. {frontengine-1.0.21 → frontengine-1.0.22}/LICENSE +0 -0
  7. {frontengine-1.0.21 → frontengine-1.0.22}/README.md +0 -0
  8. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/__init__.py +0 -0
  9. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/__main__.py +0 -0
  10. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/__init__.py +0 -0
  11. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/base_widget.py +0 -0
  12. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/gif/__init__.py +0 -0
  13. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/gif/paint_gif.py +0 -0
  14. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/image/__init__.py +0 -0
  15. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/image/paint_image.py +0 -0
  16. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/load/__init__.py +0 -0
  17. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/load/load_someone_make_ui.py +0 -0
  18. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/overlay_factory.py +0 -0
  19. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/particle/__init__.py +0 -0
  20. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/particle/particle_ui.py +0 -0
  21. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/pet/__init__.py +0 -0
  22. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/scene/__init__.py +0 -0
  23. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/scene/extend_graphic_scene.py +0 -0
  24. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/scene/extend_graphic_view.py +0 -0
  25. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/scene/scene.py +0 -0
  26. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/sound_player/__init__.py +0 -0
  27. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/sound_player/sound_effect.py +0 -0
  28. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/sound_player/sound_player.py +0 -0
  29. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/text/__init__.py +0 -0
  30. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/text/draw_text.py +0 -0
  31. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/video/__init__.py +0 -0
  32. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/video/video_player.py +0 -0
  33. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/web/__init__.py +0 -0
  34. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/web/webview.py +0 -0
  35. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/show/window_helpers.py +0 -0
  36. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/system_tray/__init__.py +0 -0
  37. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/system_tray/extend_system_tray.py +0 -0
  38. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/__init__.py +0 -0
  39. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/color/__init__.py +0 -0
  40. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/color/global_color.py +0 -0
  41. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/dialog/__init__.py +0 -0
  42. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/dialog/choose_file_dialog.py +0 -0
  43. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/dialog/hotkey_settings_dialog.py +0 -0
  44. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/dialog/save_file_dialog.py +0 -0
  45. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/main_ui.py +0 -0
  46. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/menu/__init__.py +0 -0
  47. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/menu/help_menu.py +0 -0
  48. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/menu/how_to_menu.py +0 -0
  49. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/menu/language_menu.py +0 -0
  50. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/menu/preset_menu.py +0 -0
  51. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/menu/settings_menu.py +0 -0
  52. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/__init__.py +0 -0
  53. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/control_center/__init__.py +0 -0
  54. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/control_center/control_center_ui.py +0 -0
  55. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/gif/__init__.py +0 -0
  56. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/gif/gif_setting_ui.py +0 -0
  57. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/image/__init__.py +0 -0
  58. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/image/image_setting_ui.py +0 -0
  59. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/particle/__init__.py +0 -0
  60. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/particle/particle_setting_ui.py +0 -0
  61. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/pet/__init__.py +0 -0
  62. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/pet/pet_setting_ui.py +0 -0
  63. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/scene_setting/__init__.py +0 -0
  64. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/scene_setting/scene_manager.py +0 -0
  65. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/scene_setting/scene_page/__init__.py +0 -0
  66. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/scene_setting/scene_page/base_scene_page.py +0 -0
  67. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/scene_setting/scene_page/gif.py +0 -0
  68. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/scene_setting/scene_page/image.py +0 -0
  69. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/scene_setting/scene_page/registry.py +0 -0
  70. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/scene_setting/scene_page/sound.py +0 -0
  71. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/scene_setting/scene_page/text.py +0 -0
  72. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/scene_setting/scene_page/video.py +0 -0
  73. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/scene_setting/scene_page/web.py +0 -0
  74. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/scene_setting/scene_setting_ui.py +0 -0
  75. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/sound_player/__init__.py +0 -0
  76. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/sound_player/sound_player_setting_ui.py +0 -0
  77. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/text/__init__.py +0 -0
  78. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/text/text_setting_ui.py +0 -0
  79. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/utils.py +0 -0
  80. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/video/__init__.py +0 -0
  81. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/video/video_setting_ui.py +0 -0
  82. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/web/__init__.py +0 -0
  83. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/ui/page/web/web_setting_ui.py +0 -0
  84. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/user_setting/__init__.py +0 -0
  85. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/user_setting/preset_repository.py +0 -0
  86. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/user_setting/scene_setting.py +0 -0
  87. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/__init__.py +0 -0
  88. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/browser/__init__.py +0 -0
  89. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/browser/browser.py +0 -0
  90. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/critical_exit/__init__.py +0 -0
  91. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/critical_exit/check_key_is_press.py +0 -0
  92. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/critical_exit/critical_exit.py +0 -0
  93. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/critical_exit/win32_vk.py +0 -0
  94. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/exception/__init__.py +0 -0
  95. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/exception/exception_tags.py +0 -0
  96. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/exception/exceptions.py +0 -0
  97. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/file/__init__.py +0 -0
  98. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/file/open/__init__.py +0 -0
  99. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/file/open/open_file.py +0 -0
  100. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/file/save/__init__.py +0 -0
  101. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/file/save/save_file.py +0 -0
  102. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/hotkey/__init__.py +0 -0
  103. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/hotkey/hotkey_service.py +0 -0
  104. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/json/__init__.py +0 -0
  105. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/json/json_file.py +0 -0
  106. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/json/json_repository.py +0 -0
  107. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/json_format/__init__.py +0 -0
  108. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/json_format/json_process.py +0 -0
  109. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/logging/__init__.py +0 -0
  110. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/logging/loggin_instance.py +0 -0
  111. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/multi_language/__init__.py +0 -0
  112. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/multi_language/english.py +0 -0
  113. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/multi_language/france.py +0 -0
  114. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/multi_language/germany.py +0 -0
  115. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/multi_language/italy.py +0 -0
  116. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/multi_language/language_wrapper.py +0 -0
  117. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/multi_language/russian.py +0 -0
  118. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/multi_language/simplified_chinese.py +0 -0
  119. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/multi_language/traditional_chinese.py +0 -0
  120. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/preset_schedule/__init__.py +0 -0
  121. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/preset_schedule/preset_schedule_service.py +0 -0
  122. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/redirect_manager/__init__.py +0 -0
  123. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/redirect_manager/redirect_manager_class.py +0 -0
  124. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/smart_pause/__init__.py +0 -0
  125. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/smart_pause/smart_pause_service.py +0 -0
  126. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/theme_schedule/__init__.py +0 -0
  127. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/theme_schedule/theme_schedule_service.py +0 -0
  128. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/utils/web_url.py +0 -0
  129. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/worker/__init__.py +0 -0
  130. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine/worker/qthread_worker.py +0 -0
  131. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine.egg-info/SOURCES.txt +0 -0
  132. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine.egg-info/dependency_links.txt +0 -0
  133. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine.egg-info/entry_points.txt +0 -0
  134. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine.egg-info/requires.txt +0 -0
  135. {frontengine-1.0.21 → frontengine-1.0.22}/frontengine.egg-info/top_level.txt +0 -0
  136. {frontengine-1.0.21 → frontengine-1.0.22}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frontengine
3
- Version: 1.0.21
3
+ Version: 1.0.22
4
4
  Summary: FrontEngine is use-define frontview or only use like screen saver
5
5
  Author-email: JE-Chen <jechenmailman@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/Intergration-Automation-Testing/FrontEngine
@@ -168,6 +168,46 @@ def idle_seconds():
168
168
  return None
169
169
 
170
170
 
171
+ class PetTimeline:
172
+ """
173
+ 寵物動作時間軸:一連串 (offset_seconds, action_dict),依經過秒數依序觸發。
174
+ A scene-timeline of (offset_seconds, action_dict) events fired in order as
175
+ elapsed time passes. Events are sorted; pop_due advances an internal index.
176
+ """
177
+
178
+ def __init__(self, events) -> None:
179
+ self._events = sorted(list(events), key=lambda item: item[0])
180
+ self._index = 0
181
+
182
+ def __len__(self) -> int:
183
+ return len(self._events)
184
+
185
+ def reset(self) -> None:
186
+ self._index = 0
187
+
188
+ def pop_due(self, elapsed: float) -> list:
189
+ due = []
190
+ while self._index < len(self._events) and self._events[self._index][0] <= elapsed:
191
+ due.append(self._events[self._index][1])
192
+ self._index += 1
193
+ return due
194
+
195
+
196
+ def parse_timeline(raw) -> list:
197
+ """把設定裡的 [{'at': 秒, ...}] 轉成 (offset, action_dict) 清單,忽略格式錯誤者。"""
198
+ events = []
199
+ if isinstance(raw, list):
200
+ for item in raw:
201
+ if not isinstance(item, dict) or "at" not in item:
202
+ continue
203
+ try:
204
+ offset = float(item["at"])
205
+ except (TypeError, ValueError):
206
+ continue
207
+ events.append((offset, item))
208
+ return events
209
+
210
+
171
211
  def pop_due_reminders(now, reminders):
172
212
  """
173
213
  依 now 分出已到期與未到期的提醒。reminders 為 (due_datetime, text) 清單。
@@ -862,7 +902,10 @@ class DesktopPetWidget(BaseWidget):
862
902
  self._now_provider = datetime.now
863
903
  self._reminders: list = []
864
904
  self._reminder_timer = QTimer(self)
865
- self._reminder_timer.timeout.connect(self._check_reminders)
905
+ self._reminder_timer.timeout.connect(self._on_schedule_tick)
906
+ # 場景時間軸 / Scene timeline of scheduled actions
907
+ self._timeline = PetTimeline(parse_timeline(user_setting_dict.get("pet_timeline", [])))
908
+ self._timeline_start = None
866
909
  self._bubble = SpeechBubble()
867
910
  self._chatter_timer = QTimer(self)
868
911
  self._chatter_timer.setSingleShot(True)
@@ -1001,6 +1044,8 @@ class DesktopPetWidget(BaseWidget):
1001
1044
  self._timer.start(max(10, int(interval_ms)))
1002
1045
  self._schedule_chatter()
1003
1046
  self._reminder_timer.start(10000)
1047
+ if self._timeline_start is None:
1048
+ self._timeline_start = self._now_provider()
1004
1049
 
1005
1050
  def _load_messages(self) -> dict:
1006
1051
  d = language_wrapper.language_word_dict
@@ -1069,6 +1114,39 @@ class DesktopPetWidget(BaseWidget):
1069
1114
  self._reminders.append((due, str(text)))
1070
1115
  front_engine_logger.info(f"[DesktopPetWidget] reminder set | due={due}, text={text}")
1071
1116
 
1117
+ def _on_schedule_tick(self) -> None:
1118
+ self._check_reminders()
1119
+ self._check_timeline()
1120
+
1121
+ def set_timeline(self, raw) -> None:
1122
+ """設定場景時間軸並從現在起算 / Set the timeline and start its clock now."""
1123
+ self._timeline = PetTimeline(parse_timeline(raw))
1124
+ self._timeline_start = self._now_provider()
1125
+
1126
+ def _check_timeline(self) -> None:
1127
+ if self._timeline is None or self._timeline_start is None or len(self._timeline) == 0:
1128
+ return
1129
+ elapsed = (self._now_provider() - self._timeline_start).total_seconds()
1130
+ for action in self._timeline.pop_due(elapsed):
1131
+ self._run_timeline_action(action)
1132
+
1133
+ def _run_timeline_action(self, action) -> None:
1134
+ if not isinstance(action, dict):
1135
+ return
1136
+ if action.get("say"):
1137
+ self.say(str(action["say"]))
1138
+ if action.get("sleep"):
1139
+ self.motion.sleep()
1140
+ if action.get("wake"):
1141
+ self.motion.wake()
1142
+ if action.get("feed"):
1143
+ self.feed()
1144
+ if action.get("status"):
1145
+ self.show_status()
1146
+ behaviour = action.get("behaviour")
1147
+ if behaviour in (BEHAVIOUR_FLOOR, BEHAVIOUR_WANDER, BEHAVIOUR_CHASE):
1148
+ self.motion.behaviour = behaviour
1149
+
1072
1150
  def _check_reminders(self) -> None:
1073
1151
  if not self._reminders:
1074
1152
  return
@@ -42,6 +42,9 @@ user_setting_dict: Dict[str, Any] = {
42
42
  # 桌面寵物親密度(累積互動)
43
43
  # Desktop pet affection (accumulated interactions)
44
44
  "pet_affection": 0,
45
+ # 桌面寵物場景時間軸:[{"at": 秒, "say"/"sleep"/"feed"/"behaviour": ...}, ...]
46
+ # Desktop pet scene timeline of scheduled actions
47
+ "pet_timeline": [],
45
48
  }
46
49
 
47
50
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frontengine
3
- Version: 1.0.21
3
+ Version: 1.0.22
4
4
  Summary: FrontEngine is use-define frontview or only use like screen saver
5
5
  Author-email: JE-Chen <jechenmailman@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/Intergration-Automation-Testing/FrontEngine
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "frontengine"
9
- version = "1.0.21"
9
+ version = "1.0.22"
10
10
  authors = [
11
11
  { name = "JE-Chen", email = "jechenmailman@gmail.com" },
12
12
  ]
File without changes
File without changes
File without changes