frontengine 1.0.60__tar.gz → 1.0.62__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.
Files changed (257) hide show
  1. {frontengine-1.0.60 → frontengine-1.0.62}/PKG-INFO +1 -1
  2. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/main_ui.py +21 -1
  3. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/user_setting/user_setting_file.py +20 -0
  4. frontengine-1.0.62/frontengine/utils/steam/steam_language.py +118 -0
  5. frontengine-1.0.62/frontengine/utils/workshop/__init__.py +0 -0
  6. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine.egg-info/PKG-INFO +1 -1
  7. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine.egg-info/SOURCES.txt +2 -0
  8. {frontengine-1.0.60 → frontengine-1.0.62}/pyproject.toml +1 -1
  9. {frontengine-1.0.60 → frontengine-1.0.62}/LICENSE +0 -0
  10. {frontengine-1.0.60 → frontengine-1.0.62}/README.md +0 -0
  11. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/__init__.py +0 -0
  12. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/__main__.py +0 -0
  13. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/__init__.py +0 -0
  14. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/base_widget.py +0 -0
  15. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/camera/__init__.py +0 -0
  16. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/camera/camera_widget.py +0 -0
  17. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/canvas/__init__.py +0 -0
  18. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/canvas/whiteboard_widget.py +0 -0
  19. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/capture/__init__.py +0 -0
  20. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/capture/region_capture.py +0 -0
  21. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/focus_shield/__init__.py +0 -0
  22. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/focus_shield/focus_shield_widget.py +0 -0
  23. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/gif/__init__.py +0 -0
  24. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/gif/paint_gif.py +0 -0
  25. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/image/__init__.py +0 -0
  26. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/image/paint_image.py +0 -0
  27. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/load/__init__.py +0 -0
  28. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/load/load_someone_make_ui.py +0 -0
  29. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/measure/__init__.py +0 -0
  30. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/measure/measure_widget.py +0 -0
  31. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/monitor/__init__.py +0 -0
  32. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/monitor/monitor_widget.py +0 -0
  33. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/notes/__init__.py +0 -0
  34. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/notes/sticky_note_widget.py +0 -0
  35. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/overlay_factory.py +0 -0
  36. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/particle/__init__.py +0 -0
  37. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/particle/particle_ui.py +0 -0
  38. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/pet/__init__.py +0 -0
  39. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/pet/desktop_pet.py +0 -0
  40. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/presentation/__init__.py +0 -0
  41. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/presentation/annotation_overlay.py +0 -0
  42. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/presentation/cursor_effects.py +0 -0
  43. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/presentation/keystroke_display.py +0 -0
  44. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/presentation/magnifier.py +0 -0
  45. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/scene/__init__.py +0 -0
  46. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/scene/extend_graphic_scene.py +0 -0
  47. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/scene/extend_graphic_view.py +0 -0
  48. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/scene/scene.py +0 -0
  49. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/screen_care/__init__.py +0 -0
  50. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/screen_care/color_vision_widget.py +0 -0
  51. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/screen_care/screen_filter.py +0 -0
  52. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/sound_player/__init__.py +0 -0
  53. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/sound_player/sound_effect.py +0 -0
  54. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/sound_player/sound_player.py +0 -0
  55. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/spectrum/__init__.py +0 -0
  56. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/spectrum/spectrum_widget.py +0 -0
  57. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/text/__init__.py +0 -0
  58. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/text/draw_text.py +0 -0
  59. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/toast/__init__.py +0 -0
  60. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/toast/toast_widget.py +0 -0
  61. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/video/__init__.py +0 -0
  62. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/video/video_player.py +0 -0
  63. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/wallpaper/__init__.py +0 -0
  64. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/wallpaper/wallpaper_widget.py +0 -0
  65. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/web/__init__.py +0 -0
  66. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/web/webview.py +0 -0
  67. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/show/window_helpers.py +0 -0
  68. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/system_tray/__init__.py +0 -0
  69. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/system_tray/extend_system_tray.py +0 -0
  70. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/__init__.py +0 -0
  71. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/color/__init__.py +0 -0
  72. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/color/global_color.py +0 -0
  73. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/dialog/__init__.py +0 -0
  74. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/dialog/app_profile_dialog.py +0 -0
  75. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/dialog/choose_file_dialog.py +0 -0
  76. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/dialog/clipboard_dialog.py +0 -0
  77. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/dialog/hotkey_settings_dialog.py +0 -0
  78. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/dialog/how_to_use_dialog.py +0 -0
  79. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/dialog/reminder_dialog.py +0 -0
  80. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/dialog/remote_control_dialog.py +0 -0
  81. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/dialog/screen_privacy_dialog.py +0 -0
  82. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/dialog/screen_text_dialog.py +0 -0
  83. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/dialog/signage_dialog.py +0 -0
  84. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/dialog/smart_pause_dialog.py +0 -0
  85. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/dialog/usage_report_dialog.py +0 -0
  86. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/dialog/window_pin_dialog.py +0 -0
  87. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/menu/__init__.py +0 -0
  88. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/menu/help_menu.py +0 -0
  89. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/menu/how_to_menu.py +0 -0
  90. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/menu/language_menu.py +0 -0
  91. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/menu/preset_menu.py +0 -0
  92. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/menu/settings_menu.py +0 -0
  93. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/nav/__init__.py +0 -0
  94. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/nav/sidebar.py +0 -0
  95. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/__init__.py +0 -0
  96. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/control_center/__init__.py +0 -0
  97. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/control_center/control_center_ui.py +0 -0
  98. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/focus/__init__.py +0 -0
  99. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/focus/focus_setting_ui.py +0 -0
  100. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/gif/__init__.py +0 -0
  101. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/gif/gif_setting_ui.py +0 -0
  102. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/image/__init__.py +0 -0
  103. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/image/image_setting_ui.py +0 -0
  104. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/layout_kit.py +0 -0
  105. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/particle/__init__.py +0 -0
  106. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/particle/particle_setting_ui.py +0 -0
  107. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/pet/__init__.py +0 -0
  108. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/pet/pet_setting_ui.py +0 -0
  109. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/presentation/__init__.py +0 -0
  110. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/presentation/presentation_setting_ui.py +0 -0
  111. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/scene_setting/__init__.py +0 -0
  112. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/scene_setting/scene_manager.py +0 -0
  113. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/scene_setting/scene_page/__init__.py +0 -0
  114. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/scene_setting/scene_page/base_scene_page.py +0 -0
  115. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/scene_setting/scene_page/gif.py +0 -0
  116. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/scene_setting/scene_page/image.py +0 -0
  117. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/scene_setting/scene_page/registry.py +0 -0
  118. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/scene_setting/scene_page/sound.py +0 -0
  119. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/scene_setting/scene_page/text.py +0 -0
  120. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/scene_setting/scene_page/video.py +0 -0
  121. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/scene_setting/scene_page/web.py +0 -0
  122. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/scene_setting/scene_setting_ui.py +0 -0
  123. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/screen_care/__init__.py +0 -0
  124. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/screen_care/screen_care_setting_ui.py +0 -0
  125. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/sound_player/__init__.py +0 -0
  126. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/sound_player/sound_player_setting_ui.py +0 -0
  127. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/text/__init__.py +0 -0
  128. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/text/text_setting_ui.py +0 -0
  129. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/tools/__init__.py +0 -0
  130. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/tools/tools_setting_ui.py +0 -0
  131. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/utils.py +0 -0
  132. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/video/__init__.py +0 -0
  133. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/video/video_setting_ui.py +0 -0
  134. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/wallpaper/__init__.py +0 -0
  135. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/wallpaper/wallpaper_setting_ui.py +0 -0
  136. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/web/__init__.py +0 -0
  137. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/web/web_setting_ui.py +0 -0
  138. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/widgets/__init__.py +0 -0
  139. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/page/widgets/widgets_setting_ui.py +0 -0
  140. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/style/__init__.py +0 -0
  141. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/ui/style/app_style.py +0 -0
  142. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/user_setting/__init__.py +0 -0
  143. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/user_setting/preset_repository.py +0 -0
  144. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/user_setting/scene_setting.py +0 -0
  145. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/__init__.py +0 -0
  146. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/app_profile/__init__.py +0 -0
  147. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/app_profile/app_profile_service.py +0 -0
  148. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/audio_meter/__init__.py +0 -0
  149. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/audio_meter/audio_envelope.py +0 -0
  150. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/audio_meter/loopback_capture.py +0 -0
  151. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/audio_meter/microphone_meter.py +0 -0
  152. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/audio_meter/screen_audio.py +0 -0
  153. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/audio_meter/spectrum_analyzer.py +0 -0
  154. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/audio_meter/system_audio_meter.py +0 -0
  155. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/autostart/__init__.py +0 -0
  156. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/autostart/autostart_service.py +0 -0
  157. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/break_reminder/__init__.py +0 -0
  158. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/break_reminder/break_reminder.py +0 -0
  159. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/browser/__init__.py +0 -0
  160. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/browser/browser.py +0 -0
  161. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/clipboard/__init__.py +0 -0
  162. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/clipboard/clipboard_history.py +0 -0
  163. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/clipboard/clipboard_watcher.py +0 -0
  164. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/color_vision/__init__.py +0 -0
  165. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/color_vision/color_vision.py +0 -0
  166. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/critical_exit/__init__.py +0 -0
  167. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/critical_exit/check_key_is_press.py +0 -0
  168. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/critical_exit/critical_exit.py +0 -0
  169. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/critical_exit/win32_vk.py +0 -0
  170. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/exception/__init__.py +0 -0
  171. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/exception/exception_tags.py +0 -0
  172. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/exception/exceptions.py +0 -0
  173. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/focus_shield/__init__.py +0 -0
  174. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/focus_shield/focus_shield.py +0 -0
  175. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/focus_timer/__init__.py +0 -0
  176. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/focus_timer/focus_timer.py +0 -0
  177. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/hotkey/__init__.py +0 -0
  178. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/hotkey/hotkey_service.py +0 -0
  179. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/input_watch/__init__.py +0 -0
  180. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/input_watch/input_watch_service.py +0 -0
  181. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/json/__init__.py +0 -0
  182. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/json/json_file.py +0 -0
  183. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/json/json_repository.py +0 -0
  184. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/logging/__init__.py +0 -0
  185. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/logging/loggin_instance.py +0 -0
  186. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/measure/__init__.py +0 -0
  187. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/measure/measure.py +0 -0
  188. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/midi/__init__.py +0 -0
  189. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/midi/midi_input.py +0 -0
  190. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/multi_language/__init__.py +0 -0
  191. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/multi_language/english.py +0 -0
  192. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/multi_language/france.py +0 -0
  193. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/multi_language/germany.py +0 -0
  194. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/multi_language/italy.py +0 -0
  195. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/multi_language/language_wrapper.py +0 -0
  196. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/multi_language/retranslate.py +0 -0
  197. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/multi_language/russian.py +0 -0
  198. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/multi_language/simplified_chinese.py +0 -0
  199. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/multi_language/traditional_chinese.py +0 -0
  200. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/now_playing/__init__.py +0 -0
  201. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/now_playing/now_playing.py +0 -0
  202. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/pet_chat/__init__.py +0 -0
  203. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/pet_chat/pet_chat_service.py +0 -0
  204. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/platform_info/__init__.py +0 -0
  205. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/platform_info/platform_info.py +0 -0
  206. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/playlist/__init__.py +0 -0
  207. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/playlist/playlist.py +0 -0
  208. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/plugins/__init__.py +0 -0
  209. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/plugins/plugin_loader.py +0 -0
  210. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/power_mode/__init__.py +0 -0
  211. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/power_mode/power_mode.py +0 -0
  212. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/preset_schedule/__init__.py +0 -0
  213. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/preset_schedule/preset_schedule_service.py +0 -0
  214. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/recording/__init__.py +0 -0
  215. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/recording/frame_recorder.py +0 -0
  216. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/recording/gif_writer.py +0 -0
  217. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/redirect_manager/__init__.py +0 -0
  218. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/redirect_manager/redirect_manager_class.py +0 -0
  219. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/reminder/__init__.py +0 -0
  220. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/reminder/reminder_service.py +0 -0
  221. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/remote/__init__.py +0 -0
  222. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/remote/remote_server.py +0 -0
  223. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/screen_privacy/__init__.py +0 -0
  224. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/screen_privacy/capture_affinity.py +0 -0
  225. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/screen_privacy/share_watch.py +0 -0
  226. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/screen_text/__init__.py +0 -0
  227. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/screen_text/screen_text_service.py +0 -0
  228. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/signage/__init__.py +0 -0
  229. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/signage/signage_service.py +0 -0
  230. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/smart_pause/__init__.py +0 -0
  231. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/smart_pause/pause_rules.py +0 -0
  232. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/smart_pause/smart_pause_service.py +0 -0
  233. {frontengine-1.0.60/frontengine/utils/system_stats → frontengine-1.0.62/frontengine/utils/steam}/__init__.py +0 -0
  234. {frontengine-1.0.60/frontengine/utils/text_source → frontengine-1.0.62/frontengine/utils/system_stats}/__init__.py +0 -0
  235. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/system_stats/system_stats.py +0 -0
  236. {frontengine-1.0.60/frontengine/utils/theme_schedule → frontengine-1.0.62/frontengine/utils/text_source}/__init__.py +0 -0
  237. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/text_source/text_source.py +0 -0
  238. {frontengine-1.0.60/frontengine/utils/usage_tracking → frontengine-1.0.62/frontengine/utils/theme_schedule}/__init__.py +0 -0
  239. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/theme_schedule/theme_schedule_service.py +0 -0
  240. {frontengine-1.0.60/frontengine/utils/virtual_camera → frontengine-1.0.62/frontengine/utils/usage_tracking}/__init__.py +0 -0
  241. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/usage_tracking/usage_service.py +0 -0
  242. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/usage_tracking/usage_tracker.py +0 -0
  243. {frontengine-1.0.60/frontengine/utils/weather → frontengine-1.0.62/frontengine/utils/virtual_camera}/__init__.py +0 -0
  244. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/virtual_camera/camera_feed.py +0 -0
  245. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/virtual_camera/virtual_camera.py +0 -0
  246. {frontengine-1.0.60/frontengine/utils/window_pin → frontengine-1.0.62/frontengine/utils/weather}/__init__.py +0 -0
  247. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/weather/weather_service.py +0 -0
  248. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/web_url.py +0 -0
  249. {frontengine-1.0.60/frontengine/utils/workshop → frontengine-1.0.62/frontengine/utils/window_pin}/__init__.py +0 -0
  250. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/window_pin/window_layout.py +0 -0
  251. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/window_pin/window_pin.py +0 -0
  252. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine/utils/workshop/workshop_content.py +0 -0
  253. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine.egg-info/dependency_links.txt +0 -0
  254. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine.egg-info/entry_points.txt +0 -0
  255. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine.egg-info/requires.txt +0 -0
  256. {frontengine-1.0.60 → frontengine-1.0.62}/frontengine.egg-info/top_level.txt +0 -0
  257. {frontengine-1.0.60 → frontengine-1.0.62}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frontengine
3
- Version: 1.0.60
3
+ Version: 1.0.62
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
@@ -43,10 +43,12 @@ from frontengine.ui.page.web.web_setting_ui import WEBSettingUI
43
43
  from frontengine.ui.page.widgets.widgets_setting_ui import WidgetsSettingUI
44
44
  from frontengine.user_setting.user_setting_file import (
45
45
  get_hotkey_bindings,
46
+ is_stored,
46
47
  read_user_setting,
47
48
  user_setting_dict,
48
49
  write_user_setting,
49
50
  )
51
+ from frontengine.utils.steam.steam_language import steam_language
50
52
  from frontengine.utils.critical_exit.critical_exit import CriticalExit
51
53
  from frontengine.utils.critical_exit.win32_vk import keyboard_keys_table
52
54
  from frontengine.utils.hotkey.hotkey_service import HotkeyService
@@ -129,7 +131,7 @@ class FrontEngineMainUI(QMainWindow):
129
131
  # 語言支援
130
132
  # Language support
131
133
  self.language_wrapper = language_wrapper
132
- self.language_wrapper.reset_language(user_setting_dict.get("language", "English"))
134
+ self.language_wrapper.reset_language(self._startup_language())
133
135
 
134
136
  # 初始化 UI
135
137
  # Initialize UI
@@ -381,6 +383,24 @@ class FrontEngineMainUI(QMainWindow):
381
383
  self.control_center_ui.register_overlay_source(
382
384
  lambda attribute=attribute: getattr(self.tools_setting_ui, attribute, []))
383
385
 
386
+ @staticmethod
387
+ def _startup_language() -> str:
388
+ """
389
+ 啟動要用哪一個語言。使用者挑過就用他挑的;還沒挑過而 Steam 有裝,就跟著
390
+ Steam 客戶端的語言,並寫回設定——寫回之後這件事就只會發生這一次。
391
+ Which language to start in. The user's choice if they have made one;
392
+ otherwise the Steam client's language when Steam is installed, written
393
+ back to the settings so it happens exactly once.
394
+ """
395
+ if is_stored("language"):
396
+ return user_setting_dict.get("language", "English")
397
+ from_steam = steam_language()
398
+ if from_steam is None:
399
+ return user_setting_dict.get("language", "English")
400
+ front_engine_logger.info(f"[FrontEngineMainUI] first launch, following Steam: {from_steam}")
401
+ user_setting_dict["language"] = from_steam
402
+ return from_steam
403
+
384
404
  def _add_tabs(self) -> None:
385
405
  """
386
406
  建立左側導覽與頁面堆疊 / Build the sidebar and the page stack.
@@ -116,6 +116,26 @@ def read_user_setting() -> Path:
116
116
  return repo.path
117
117
 
118
118
 
119
+ def is_stored(key: str) -> bool:
120
+ """
121
+ 這個鍵是不是真的寫在設定檔裡(而不是這裡的預設值)。
122
+
123
+ 載入是把檔案 merge 到預設值上,所以載入之後 `user_setting_dict` 分不出兩者。
124
+ 「使用者從沒挑過語言」和「使用者挑了英文」要做的事不一樣,得問檔案本身。
125
+
126
+ Whether `key` is actually in the settings file rather than a default here.
127
+
128
+ Loading merges the file over the defaults, so afterwards `user_setting_dict`
129
+ cannot tell the two apart. "The user never chose a language" and "the user
130
+ chose English" call for different behaviour, so this asks the file itself.
131
+ """
132
+ repo = _repository()
133
+ if not repo.exists():
134
+ return False
135
+ data = repo.load()
136
+ return isinstance(data, dict) and key in data
137
+
138
+
119
139
  def export_user_setting(destination: Path) -> Path:
120
140
  """將目前所有設定寫出到指定路徑 / Write all current settings to `destination`."""
121
141
  destination = Path(destination)
@@ -0,0 +1,118 @@
1
+ """
2
+ 第一次啟動時,跟著 Steam 客戶端的語言走。
3
+
4
+ 在 Steam 上安裝的人已經挑過一次語言了,再讓程式用英文開起來、要他自己去選單裡
5
+ 再挑一次,是白費工。這裡只讀 Steam 客戶端目前設定的語言,**不需要 Steamworks
6
+ SDK、不需要 App ID、也不會連線**——Windows 讀登錄檔,其他平台讀 Steam 自己的
7
+ ``registry.vdf``。
8
+
9
+ 只在使用者還沒挑過語言時套用(設定檔裡沒有 ``language`` 這個鍵)。挑過之後就以
10
+ 使用者的選擇為準,否則選單改了語言、下次開啟又被改回去,看起來就像選單壞了。
11
+
12
+ Follow the Steam client's language on first launch.
13
+
14
+ Someone who installed through Steam has already chosen a language once; opening
15
+ in English and asking them to choose again in a menu is wasted work. This reads
16
+ the language the Steam client is set to and nothing else: **no Steamworks SDK,
17
+ no App ID, no network**. Windows reads the registry, other platforms read
18
+ Steam's own ``registry.vdf``.
19
+
20
+ It applies only while the user has not chosen a language yet - no ``language``
21
+ key in the settings file. After that their choice wins, otherwise changing the
22
+ language in the menu would be undone on the next launch and the menu would look
23
+ broken.
24
+ """
25
+ from __future__ import annotations
26
+
27
+ import re
28
+ import sys
29
+ from pathlib import Path
30
+ from typing import Optional
31
+
32
+ from frontengine.utils.logging.loggin_instance import front_engine_logger
33
+
34
+ # Steam 的語言代碼 -> 這個程式註冊的語言名稱。
35
+ # 只列本程式真的有翻譯的七種;Steam 支援的其他語言會落到 None,也就是維持預設。
36
+ # Steam's language codes to the names this application registers. Only the seven
37
+ # that are actually translated appear here; any other Steam language falls
38
+ # through to None, which leaves the default in place.
39
+ STEAM_LANGUAGE_MAP = {
40
+ "english": "English",
41
+ "tchinese": "Traditional_Chinese",
42
+ "schinese": "Simplified_Chinese",
43
+ "german": "Deutsch",
44
+ "russian": "Russian",
45
+ "french": "France",
46
+ "italian": "Italy",
47
+ }
48
+
49
+ _VDF_LANGUAGE = re.compile(r'"Language"\s+"([^"]+)"', re.IGNORECASE)
50
+
51
+
52
+ def _windows_language_code() -> Optional[str]:
53
+ """從登錄檔讀 Steam 客戶端語言(只讀,不寫)。"""
54
+ if sys.platform != "win32":
55
+ return None
56
+ try:
57
+ import winreg
58
+
59
+ with winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"SOFTWARE\Valve\Steam") as key:
60
+ value, _ = winreg.QueryValueEx(key, "Language")
61
+ return str(value).strip().lower() or None
62
+ except OSError:
63
+ # Steam 沒裝、或這台機器上沒有這個值 / Steam absent, or no such value here.
64
+ return None
65
+
66
+
67
+ def _registry_vdf_paths() -> list[Path]:
68
+ """macOS 與 Linux 上 Steam 存 registry.vdf 的位置。"""
69
+ home = Path.home()
70
+ if sys.platform == "darwin":
71
+ return [home / "Library" / "Application Support" / "Steam" / "registry.vdf"]
72
+ return [
73
+ home / ".steam" / "registry.vdf",
74
+ home / ".steam" / "steam" / "registry.vdf",
75
+ home / ".local" / "share" / "Steam" / "registry.vdf",
76
+ ]
77
+
78
+
79
+ def _vdf_language_code(paths=None) -> Optional[str]:
80
+ """
81
+ 從 registry.vdf 撈出語言。這裡不寫 VDF 解析器:需要的只有一個字串,
82
+ 多寫一個格式解析器就多一份要維護、會出錯的東西。
83
+ Pull the language out of registry.vdf. No VDF parser here: one string is all
84
+ this needs, and a format parser would be one more thing to maintain and get
85
+ wrong.
86
+ """
87
+ for path in (paths if paths is not None else _registry_vdf_paths()):
88
+ try:
89
+ if not Path(path).is_file():
90
+ continue
91
+ text = Path(path).read_text(encoding="utf-8", errors="replace")
92
+ except OSError:
93
+ continue
94
+ match = _VDF_LANGUAGE.search(text)
95
+ if match:
96
+ return match.group(1).strip().lower() or None
97
+ return None
98
+
99
+
100
+ def steam_language_code() -> Optional[str]:
101
+ """Steam 客戶端目前的語言代碼,讀不到就回傳 None。"""
102
+ return _windows_language_code() or _vdf_language_code()
103
+
104
+
105
+ def steam_language() -> Optional[str]:
106
+ """
107
+ 對應到本程式的語言名稱;Steam 沒裝、讀不到、或那個語言沒有翻譯時回傳 None。
108
+ The matching language name for this application, or None when Steam is not
109
+ installed, could not be read, or is set to a language with no translation.
110
+ """
111
+ code = steam_language_code()
112
+ if not code:
113
+ return None
114
+ name = STEAM_LANGUAGE_MAP.get(code)
115
+ if name is None:
116
+ front_engine_logger.info(
117
+ f"[SteamLanguage] Steam is set to '{code}', which has no translation here")
118
+ return name
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frontengine
3
- Version: 1.0.60
3
+ Version: 1.0.62
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
@@ -232,6 +232,8 @@ frontengine/utils/signage/signage_service.py
232
232
  frontengine/utils/smart_pause/__init__.py
233
233
  frontengine/utils/smart_pause/pause_rules.py
234
234
  frontengine/utils/smart_pause/smart_pause_service.py
235
+ frontengine/utils/steam/__init__.py
236
+ frontengine/utils/steam/steam_language.py
235
237
  frontengine/utils/system_stats/__init__.py
236
238
  frontengine/utils/system_stats/system_stats.py
237
239
  frontengine/utils/text_source/__init__.py
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "frontengine"
9
- version = "1.0.60"
9
+ version = "1.0.62"
10
10
  authors = [
11
11
  { name = "JE-Chen", email = "jechenmailman@gmail.com" },
12
12
  ]
File without changes
File without changes