From 1f21db2511428ea9c2e0da50ab40fcf8224a297a Mon Sep 17 00:00:00 2001 From: mx57 <38256814+mx57@users.noreply.github.com> Date: Tue, 21 Jul 2026 05:38:34 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Complete:=20Implement=20real-time?= =?UTF-8?q?=20Pomodoro=20timer=20with=20dynamic=20tooltips?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Refactored TimerSystem to count down second-by-second and emit tick signals. - Added dynamic Pomodoro timer status items and stop action in TrayMenu. - Implemented real-time dynamic tooltip update in PetWindow showing stats and remaining Pomodoro time. - Created full unit test suite under tests/test_timer_system.py. --- .jules/bolt.md | 3 + src/core/input_manager.py | 4 + src/core/timer_system.py | 25 ++++++- src/ui/main_window.py | 33 +++++++++ src/ui/tray_menu.py | 45 +++++++++++ tests/test_timer_system.py | 82 +++++++++++++++++++++ verification/screenshots/stats_history.png | Bin 20541 -> 21119 bytes 7 files changed, 189 insertions(+), 3 deletions(-) create mode 100644 tests/test_timer_system.py diff --git a/.jules/bolt.md b/.jules/bolt.md index cd7b67b..750340e 100644 --- a/.jules/bolt.md +++ b/.jules/bolt.md @@ -11,3 +11,6 @@ **Инсайт:** Простое перечисление заблокированных достижений со статусом "заперто" демотивирует. Отображение прогресс-бара и числовых значений (7/10) внутри списка достижений значительно повышает вовлеченность пользователя. **Действие:** В StatsDialog для каждого заблокированного достижения рассчитывать процент выполнения и отображать QProgressBar. +## 2026-07-06 - [Real-Time Pomodoro countdown with Dynamic Tooltips] +**Инсайт:** Стандартные таймеры без визуального таймера обратного отсчета снижают пользовательский контроль и ухудшают UX. Обновление обратного отсчета по секундам (1 Гц) практически не нагружает процессор, но значительно повышает удобство использования таймеров Pomodoro. +**Действие:** Переработать TimerSystem на посекундный шаг с сигналом `pomodoro_tick` и обновлять тултипы трея и основного окна динамически. diff --git a/src/core/input_manager.py b/src/core/input_manager.py index ac23bb7..fc1154d 100644 --- a/src/core/input_manager.py +++ b/src/core/input_manager.py @@ -155,6 +155,10 @@ def periodic_check(self): self.window.animation_manager.play_state("hunting") self.window.start_hunting(self.last_mouse_pos[0], self.last_mouse_pos[1]) + # 4. Обновление тултипа окна питомца + if hasattr(self.window, "update_tooltip"): + self.window.update_tooltip() + def add_points(self, points): """Добавляет очки и проверяет повышение уровня.""" if not self.db: diff --git a/src/core/timer_system.py b/src/core/timer_system.py index ff27dec..5ec9398 100644 --- a/src/core/timer_system.py +++ b/src/core/timer_system.py @@ -3,6 +3,7 @@ class TimerSystem(QObject): stretch_reminder = Signal() pomodoro_finished = Signal(str) # 'work' or 'break' + pomodoro_tick = Signal(int) # remaining seconds def __init__(self, config): super().__init__() @@ -12,10 +13,11 @@ def __init__(self, config): self.stretch_timer = QTimer(self) self.stretch_timer.timeout.connect(self.on_stretch_timeout) - # Таймер Pomodoro + # Таймер Pomodoro (работает с секундным интервалом) self.pomodoro_timer = QTimer(self) - self.pomodoro_timer.timeout.connect(self.on_pomodoro_timeout) + self.pomodoro_timer.timeout.connect(self.on_pomodoro_tick) self.pomodoro_state = "idle" # 'work', 'break', 'idle' + self.pomodoro_remaining = 0 def start_stretch_timer(self): interval = self.config.get("stretch_interval") * 60 * 1000 # в мс @@ -31,10 +33,27 @@ def on_stretch_timeout(self): def start_pomodoro(self, mode="work"): self.pomodoro_state = mode minutes = self.config.get(f"pomodoro_{mode}") - self.pomodoro_timer.start(minutes * 60 * 1000) + self.pomodoro_remaining = minutes * 60 + self.pomodoro_timer.start(1000) # Секундный интервал + self.pomodoro_tick.emit(self.pomodoro_remaining) + + def on_pomodoro_tick(self): + if self.pomodoro_remaining > 0: + self.pomodoro_remaining -= 1 + self.pomodoro_tick.emit(self.pomodoro_remaining) + if self.pomodoro_remaining <= 0: + self.on_pomodoro_timeout() def on_pomodoro_timeout(self): last_state = self.pomodoro_state self.pomodoro_timer.stop() self.pomodoro_state = "idle" + self.pomodoro_remaining = 0 self.pomodoro_finished.emit(last_state) + + def stop_pomodoro(self): + if self.pomodoro_state != "idle": + self.pomodoro_timer.stop() + self.pomodoro_state = "idle" + self.pomodoro_remaining = 0 + self.pomodoro_tick.emit(0) diff --git a/src/ui/main_window.py b/src/ui/main_window.py index a2c4b6f..908a51e 100644 --- a/src/ui/main_window.py +++ b/src/ui/main_window.py @@ -223,6 +223,39 @@ def mouseReleaseEvent(self, event): self.animation_manager.update_size(self.size()) self.animation_manager.play_state(self.last_state_before_drag) + def update_tooltip(self): + """Обновляет интерактивный тултип окна питомца""" + if not self.input_manager: + return + + # Получаем данные из InputManager и Config + name = self.config.get("username", "Котик") if self.config else "Котик" + points = self.input_manager.last_affection_points + self.input_manager.pending_points + + # Получаем уровень и титул + from src.utils.bonding_utils import get_level_info + level, title, _, _ = get_level_info(points) + + max_kps = self.input_manager.max_kps + + # Статус таймера Pomodoro + pomodoro_text = "Не активен" + if self.timer_system and self.timer_system.pomodoro_state != "idle": + state_name = "Работа" if self.timer_system.pomodoro_state == "work" else "Перерыв" + rem = self.timer_system.pomodoro_remaining + mins = rem // 60 + secs = rem % 60 + pomodoro_text = f"{state_name} ({mins:02d}:{secs:02d})" + + tooltip_content = ( + f"Имя: {name}\n" + f"Уровень {level}: {title}\n" + f"Привязанность: {points} ❤️\n" + f"Рекорд: {max_kps} кл/сек ⚡\n" + f"Таймер Pomodoro: {pomodoro_text}" + ) + self.setToolTip(tooltip_content) + def closeEvent(self, event): self.closed.emit() super().closeEvent(event) diff --git a/src/ui/tray_menu.py b/src/ui/tray_menu.py index 9ddc7c8..71b42ee 100644 --- a/src/ui/tray_menu.py +++ b/src/ui/tray_menu.py @@ -13,6 +13,7 @@ def __init__(self, pet_window): self.window = pet_window self.tray_icon = QSystemTrayIcon(self.window) + self.tray_icon.setToolTip("Десктопный Котик 🐾") # Используем статичную PNG иконку для трея if os.path.exists(TRAY_ICON_PATH): self.tray_icon.setIcon(QIcon(TRAY_ICON_PATH)) @@ -25,6 +26,10 @@ def __init__(self, pet_window): self.tray_icon.setContextMenu(self.menu) self.tray_icon.show() + if self.window.timer_system: + self.window.timer_system.pomodoro_tick.connect(self.update_pomodoro_status) + self.window.timer_system.pomodoro_finished.connect(self.on_pomodoro_finished) + def setup_menu(self): # Действия с питомцем feed_action = QAction("Покормить", self) @@ -61,6 +66,8 @@ def setup_menu(self): # Pomodoro pomodoro_menu = QMenu("Таймер Pomodoro", self.menu) + self.pomodoro_menu = pomodoro_menu + start_work = QAction("Начать работу (25 мин)", self) start_work.triggered.connect(self.start_work_timer) pomodoro_menu.addAction(start_work) @@ -69,6 +76,15 @@ def setup_menu(self): start_break.triggered.connect(self.start_break_timer) pomodoro_menu.addAction(start_break) + self.pomodoro_status_action = QAction("Статус: Не активен", self) + self.pomodoro_status_action.setEnabled(False) + pomodoro_menu.addAction(self.pomodoro_status_action) + + self.pomodoro_stop_action = QAction("Остановить таймер", self) + self.pomodoro_stop_action.triggered.connect(self.stop_pomodoro_timer) + self.pomodoro_stop_action.setVisible(False) + pomodoro_menu.addAction(self.pomodoro_stop_action) + self.menu.addMenu(pomodoro_menu) self.menu.addSeparator() @@ -136,6 +152,35 @@ def show_stats(self, checked=False): dialog = StatsDialog(self.window.input_manager.db, self.window) dialog.exec() + def stop_pomodoro_timer(self, checked=False): + if self.window.timer_system: + self.window.timer_system.stop_pomodoro() + self.window.show_message("Таймер остановлен ⏱️") + + def update_pomodoro_status(self, remaining_seconds): + if not self.window.timer_system: + return + + state = self.window.timer_system.pomodoro_state + if state == "idle" or remaining_seconds <= 0: + self.pomodoro_status_action.setText("Статус: Не активен") + self.pomodoro_stop_action.setVisible(False) + self.tray_icon.setToolTip("Десктопный Котик 🐾") + else: + mins = remaining_seconds // 60 + secs = remaining_seconds % 60 + state_str = "Работа" if state == "work" else "Перерыв" + time_str = f"{mins:02d}:{secs:02d}" + + self.pomodoro_status_action.setText(f"Осталось ({state_str}): {time_str}") + self.pomodoro_stop_action.setVisible(True) + self.tray_icon.setToolTip(f"Десктопный Котик 🐾\n({state_str}: {time_str})") + + def on_pomodoro_finished(self, mode): + self.pomodoro_status_action.setText("Статус: Не активен") + self.pomodoro_stop_action.setVisible(False) + self.tray_icon.setToolTip("Десктопный Котик 🐾") + def feed_pet(self, checked=False): self.window.animation_manager.play_state("eating") if self.window.input_manager: diff --git a/tests/test_timer_system.py b/tests/test_timer_system.py new file mode 100644 index 0000000..bfe5e2b --- /dev/null +++ b/tests/test_timer_system.py @@ -0,0 +1,82 @@ +import sys +import unittest +from PySide6.QtWidgets import QApplication +from src.core.timer_system import TimerSystem +from src.utils.config_manager import ConfigManager + +# Ensure QApplication instance is created for QTimer +app = QApplication.instance() or QApplication(sys.argv) + +class TestTimerSystem(unittest.TestCase): + def setUp(self): + # Create a mock config or ConfigManager + self.config = ConfigManager("test_timer_settings.json") + # Ensure our test settings are set + self.config.set("pomodoro_work", 25) + self.config.set("pomodoro_break", 5) + self.timer_system = TimerSystem(self.config) + + def tearDown(self): + # Stop any active timers + self.timer_system.stretch_timer.stop() + self.timer_system.pomodoro_timer.stop() + import os + if os.path.exists("test_timer_settings.json"): + os.remove("test_timer_settings.json") + + def test_initial_state(self): + self.assertEqual(self.timer_system.pomodoro_state, "idle") + self.assertEqual(self.timer_system.pomodoro_remaining, 0) + + def test_start_pomodoro_work(self): + self.timer_system.start_pomodoro("work") + self.assertEqual(self.timer_system.pomodoro_state, "work") + self.assertEqual(self.timer_system.pomodoro_remaining, 25 * 60) + self.assertTrue(self.timer_system.pomodoro_timer.isActive()) + + def test_start_pomodoro_break(self): + self.timer_system.start_pomodoro("break") + self.assertEqual(self.timer_system.pomodoro_state, "break") + self.assertEqual(self.timer_system.pomodoro_remaining, 5 * 60) + self.assertTrue(self.timer_system.pomodoro_timer.isActive()) + + def test_stop_pomodoro(self): + self.timer_system.start_pomodoro("work") + self.timer_system.stop_pomodoro() + self.assertEqual(self.timer_system.pomodoro_state, "idle") + self.assertEqual(self.timer_system.pomodoro_remaining, 0) + self.assertFalse(self.timer_system.pomodoro_timer.isActive()) + + def test_pomodoro_tick(self): + ticks = [] + self.timer_system.pomodoro_tick.connect(lambda val: ticks.append(val)) + + self.timer_system.start_pomodoro("work") + # Remaining starts at 25 * 60 + self.assertEqual(self.timer_system.pomodoro_remaining, 1500) + self.assertEqual(len(ticks), 1) + self.assertEqual(ticks[0], 1500) + + # Simulate a tick + self.timer_system.on_pomodoro_tick() + self.assertEqual(self.timer_system.pomodoro_remaining, 1499) + self.assertEqual(len(ticks), 2) + self.assertEqual(ticks[1], 1499) + + def test_pomodoro_finish(self): + finished_modes = [] + self.timer_system.pomodoro_finished.connect(lambda mode: finished_modes.append(mode)) + + self.timer_system.start_pomodoro("break") + self.timer_system.pomodoro_remaining = 1 # Set remaining to 1 second + + # Simulate final tick to 0 + self.timer_system.on_pomodoro_tick() + self.assertEqual(self.timer_system.pomodoro_remaining, 0) + self.assertEqual(self.timer_system.pomodoro_state, "idle") + self.assertEqual(len(finished_modes), 1) + self.assertEqual(finished_modes[0], "break") + self.assertFalse(self.timer_system.pomodoro_timer.isActive()) + +if __name__ == "__main__": + unittest.main() diff --git a/verification/screenshots/stats_history.png b/verification/screenshots/stats_history.png index 341bd7df5bfd09eeb553272a6638ecbb12dfee98..d7351a22bee1390dd4d14aeda6c2e438264d8fd1 100644 GIT binary patch literal 21119 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 Kxm$6^BlaIc9L#V4 literal 20541 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