pyloid 0.10.0__tar.gz → 0.11.0__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.
@@ -198,4 +198,4 @@ Apache License
198
198
  distributed under the License is distributed on an "AS IS" BASIS,
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
- limitations under the License.
201
+ limitations under the License.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyloid
3
- Version: 0.10.0
3
+ Version: 0.11.0
4
4
  Summary:
5
5
  Author: aesthetics-of-record
6
6
  Author-email: 111675679+aesthetics-of-record@users.noreply.github.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pyloid"
3
- version = "0.10.0"
3
+ version = "0.11.0"
4
4
  description = ""
5
5
  authors = ["aesthetics-of-record <111675679+aesthetics-of-record@users.noreply.github.com>"]
6
6
  readme = "README.md"
@@ -2,5 +2,6 @@ from .pyloid import Pyloid
2
2
  from .api import PyloidAPI, Bridge
3
3
  from .utils import get_production_path, is_production
4
4
  from .tray import TrayEvent
5
+ from .timer import PyloidTimer
5
6
 
6
- __all__ = ['Pyloid', 'PyloidAPI', 'Bridge', 'get_production_path', 'is_production', 'TrayEvent']
7
+ __all__ = ['Pyloid', 'PyloidAPI', 'Bridge', 'get_production_path', 'is_production', 'TrayEvent', 'PyloidTimer']
@@ -8,7 +8,7 @@ from PySide6.QtWidgets import (
8
8
  )
9
9
  from PySide6.QtWebEngineWidgets import QWebEngineView
10
10
  from PySide6.QtWebChannel import QWebChannel
11
- from PySide6.QtGui import QIcon, QKeySequence, QShortcut, QClipboard, QImage, QAction
11
+ from PySide6.QtGui import QIcon, QKeySequence, QShortcut, QClipboard, QImage, QAction, QPalette, QColor
12
12
  from PySide6.QtCore import Qt, Signal, QUrl, QObject, QTimer
13
13
  from PySide6.QtNetwork import QLocalServer, QLocalSocket
14
14
  from PySide6.QtWebEngineCore import QWebEnginePage, QWebEngineSettings
@@ -22,12 +22,14 @@ from .monitor import Monitor
22
22
  import json
23
23
  from .autostart import AutoStart
24
24
  from .filewatcher import FileWatcher
25
+ import logging
26
+ from PySide6.QtCore import QCoreApplication
25
27
 
26
28
  # for linux debug
27
29
  os.environ["QTWEBENGINE_DICTIONARIES_PATH"] = "/"
28
30
 
29
31
  # for macos debug
30
-
32
+ logging.getLogger('Qt').setLevel(logging.ERROR)
31
33
 
32
34
  def custom_message_handler(mode, context, message):
33
35
  if not hasattr(custom_message_handler, "vulkan_warning_shown") and (
@@ -351,10 +353,13 @@ class BrowserWindow:
351
353
  def set_frame(self, frame: bool):
352
354
  """Sets the frame of the window."""
353
355
  self.frame = frame
356
+ was_visible = self._window.isVisible()
354
357
  if self.frame:
355
358
  self._window.setWindowFlags(Qt.Window)
356
359
  else:
357
360
  self._window.setWindowFlags(Qt.FramelessWindowHint)
361
+ if was_visible:
362
+ self._window.show()
358
363
 
359
364
  def set_context_menu(self, context_menu: bool):
360
365
  """Sets the context menu of the window."""
@@ -0,0 +1,123 @@
1
+ from PySide6.QtCore import QTimer, QObject
2
+
3
+ class PyloidTimer(QObject):
4
+ def __init__(self):
5
+ super().__init__()
6
+ self.timers = {}
7
+
8
+ def start_periodic_timer(self, interval, callback):
9
+ """
10
+ 주기적으로 실행되는 타이머를 시작합니다.
11
+
12
+ :param interval: 밀리초 단위의 간격
13
+ :param callback: 실행할 콜백 함수
14
+ :param auto_remove: 타이머 중지 시 자동 삭제 여부
15
+ :return: 타이머 ID
16
+ """
17
+ return self._create_timer(interval, callback, single_shot=False, auto_remove=False)
18
+
19
+ def start_single_shot_timer(self, delay, callback):
20
+ """
21
+ 한 번만 실행되는 타이머를 시작합니다.
22
+
23
+ :param delay: 밀리초 단위의 지연 시간
24
+ :param callback: 실행할 콜백 함수
25
+ :return: 타이머 ID
26
+ """
27
+ return self._create_timer(delay, callback, single_shot=True, auto_remove=True)
28
+
29
+ def _create_timer(self, interval, callback, single_shot=False, auto_remove=False):
30
+ timer = QTimer(self)
31
+ timer.setInterval(interval)
32
+ timer.setSingleShot(single_shot)
33
+
34
+ if auto_remove or single_shot:
35
+ timer.timeout.connect(lambda: self._timer_finished(callback, id(timer)))
36
+ else:
37
+ timer.timeout.connect(callback)
38
+
39
+ timer.start()
40
+
41
+ timer_id = id(timer)
42
+ self.timers[timer_id] = timer
43
+ return timer_id
44
+
45
+ def _timer_finished(self, callback, timer_id):
46
+ callback()
47
+ self.stop_timer(timer_id)
48
+
49
+ def stop_timer(self, timer_id):
50
+ """
51
+ 지정된 ID의 타이머를 중지합니다.
52
+
53
+ :param timer_id: 중지할 타이머의 ID
54
+ """
55
+ if timer_id in self.timers:
56
+ self.timers[timer_id].stop()
57
+ del self.timers[timer_id]
58
+
59
+ def is_timer_active(self, timer_id):
60
+ """
61
+ 지정된 ID의 타이머가 활성 상태인지 확인합니다.
62
+
63
+ :param timer_id: 확인할 타이머의 ID
64
+ :return: 타이머가 활성 상태이면 True, 그렇지 않으면 False
65
+ """
66
+ return timer_id in self.timers and self.timers[timer_id].isActive()
67
+
68
+ def get_remaining_time(self, timer_id):
69
+ """
70
+ 지정된 ID의 타이머의 남은 시간을 반환합니다.
71
+
72
+ :param timer_id: 확인할 타이머의 ID
73
+ :return: 남은 시간 (밀리초), 타이머가 없으면 None
74
+ """
75
+ if timer_id in self.timers:
76
+ return self.timers[timer_id].remainingTime()
77
+ return None
78
+
79
+ def set_interval(self, timer_id, interval):
80
+ """
81
+ 지정된 ID의 타이머의 간격을 설정합니다.
82
+
83
+ :param timer_id: 설정할 타이머의 ID
84
+ :param interval: 새로운 간격 (밀리초)
85
+ """
86
+ if timer_id in self.timers:
87
+ self.timers[timer_id].setInterval(interval)
88
+
89
+ def start_precise_periodic_timer(self, interval, callback):
90
+ """
91
+ 정밀한 주기적 타이머를 시작합니다.
92
+
93
+ :param interval: 밀리초 단위의 간격
94
+ :param callback: 실행할 콜백 함수
95
+ :return: 타이머 ID
96
+ """
97
+ return self._create_timer_with_type(interval, callback, QTimer.TimerType.PreciseTimer)
98
+
99
+ def start_coarse_periodic_timer(self, interval, callback):
100
+ """
101
+ 덜 정밀한 주기적 타이머를 시작합니다.
102
+
103
+ :param interval: 밀리초 단위의 간격
104
+ :param callback: 실행할 콜백 함수
105
+ :return: 타이머 ID
106
+ """
107
+ return self._create_timer_with_type(interval, callback, QTimer.TimerType.CoarseTimer)
108
+
109
+ def _create_timer_with_type(self, interval, callback, timer_type, auto_remove=False):
110
+ timer = QTimer(self)
111
+ timer.setInterval(interval)
112
+ timer.setTimerType(timer_type)
113
+
114
+ if auto_remove:
115
+ timer.timeout.connect(lambda: self._timer_finished(callback, id(timer)))
116
+ else:
117
+ timer.timeout.connect(callback)
118
+
119
+ timer.start()
120
+
121
+ timer_id = id(timer)
122
+ self.timers[timer_id] = timer
123
+ return timer_id
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes