From 14ae6adff4fbc4cfa9843fb57411d02d8a76391b Mon Sep 17 00:00:00 2001 From: mx57 <38256814+mx57@users.noreply.github.com> Date: Sun, 19 Jul 2026 05:18:25 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Complete:=20Pomodoro=20Countdown=20?= =?UTF-8?q?&=20Interactive=20Tooltips?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Refactored TimerSystem to count down Pomodoro in 1-second ticks, emitting live `pomodoro_tick` signals. - Enhanced TrayMenu to update tray tooltip and menu items dynamically with countdown progress and visibility toggle. - Implemented `update_tooltip` in PetWindow to show friendship progress, KPS record, and active countdown timer. - Integrated automatic tooltip updates with the InputManager watchdog timer. - Added comprehensive unit tests in `tests/test_timer_system.py` to cover new features. --- .jules/bolt.md | 3 + src/core/input_manager.py | 3 + src/core/timer_system.py | 30 +++++-- src/ui/main_window.py | 41 +++++++++ src/ui/tray_menu.py | 81 ++++++++++++++++-- tests/test_timer_system.py | 93 +++++++++++++++++++++ verification/screenshots/stats_history.png | Bin 20541 -> 20562 bytes 7 files changed, 236 insertions(+), 15 deletions(-) create mode 100644 tests/test_timer_system.py diff --git a/.jules/bolt.md b/.jules/bolt.md index cd7b67b..a01aae6 100644 --- a/.jules/bolt.md +++ b/.jules/bolt.md @@ -11,3 +11,6 @@ **Инсайт:** Простое перечисление заблокированных достижений со статусом "заперто" демотивирует. Отображение прогресс-бара и числовых значений (7/10) внутри списка достижений значительно повышает вовлеченность пользователя. **Действие:** В StatsDialog для каждого заблокированного достижения рассчитывать процент выполнения и отображать QProgressBar. +## 2026-07-06 - [Interactive Countdown and Live Status Tooltips] +**Инсайт:** Скрытые фоновые процессы (например, таймеры Pomodoro) без обратной связи снижают удобство использования (UX), так как пользователь не знает, активен ли процесс и сколько времени осталось. Обеспечение обратной связи через живые всплывающие подсказки (tooltips) как на трее, так и на главном окне питомца с частотой обновления 1-2 Гц решает эту проблему без ущерба для CPU. +**Действие:** Запускать таймеры Pomodoro с интервалом в 1 секунду для вычисления оставшегося времени в реальном времени, передавать прогресс по Qt сигналам, и обновлять тултипы в watchdog-цикле ввода с частотой 2 Гц. diff --git a/src/core/input_manager.py b/src/core/input_manager.py index ac23bb7..56a7463 100644 --- a/src/core/input_manager.py +++ b/src/core/input_manager.py @@ -155,6 +155,9 @@ 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. Обновление интерактивной всплывающей подсказки + 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..26cb114 100644 --- a/src/core/timer_system.py +++ b/src/core/timer_system.py @@ -2,7 +2,8 @@ class TimerSystem(QObject): stretch_reminder = Signal() - pomodoro_finished = Signal(str) # 'work' or 'break' + pomodoro_finished = Signal(str) # 'work' or 'break' + pomodoro_tick = Signal(str, int) # state, remaining_seconds def __init__(self, config): super().__init__() @@ -15,10 +16,12 @@ def __init__(self, config): # Таймер Pomodoro self.pomodoro_timer = QTimer(self) self.pomodoro_timer.timeout.connect(self.on_pomodoro_timeout) - self.pomodoro_state = "idle" # 'work', 'break', 'idle' + self.pomodoro_state = "idle" # 'work', 'break', 'idle' + self.pomodoro_duration = 0 + self.pomodoro_remaining = 0 def start_stretch_timer(self): - interval = self.config.get("stretch_interval") * 60 * 1000 # в мс + interval = self.config.get("stretch_interval") * 60 * 1000 # в мс self.stretch_timer.start(interval) def restart_stretch_timer(self): @@ -31,10 +34,23 @@ 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_duration = minutes * 60 + self.pomodoro_remaining = self.pomodoro_duration + self.pomodoro_timer.start(1000) # Срабатывает каждую секунду + self.pomodoro_tick.emit(self.pomodoro_state, self.pomodoro_remaining) - def on_pomodoro_timeout(self): - last_state = self.pomodoro_state + def stop_pomodoro(self): self.pomodoro_timer.stop() self.pomodoro_state = "idle" - self.pomodoro_finished.emit(last_state) + self.pomodoro_duration = 0 + self.pomodoro_remaining = 0 + self.pomodoro_tick.emit("idle", 0) + + def on_pomodoro_timeout(self): + if self.pomodoro_remaining > 1: + self.pomodoro_remaining -= 1 + self.pomodoro_tick.emit(self.pomodoro_state, self.pomodoro_remaining) + else: + last_state = self.pomodoro_state + self.stop_pomodoro() + self.pomodoro_finished.emit(last_state) diff --git a/src/ui/main_window.py b/src/ui/main_window.py index a2c4b6f..ee499a7 100644 --- a/src/ui/main_window.py +++ b/src/ui/main_window.py @@ -4,6 +4,7 @@ from PySide6.QtCore import Qt, QPoint, QSize, Signal, QPropertyAnimation, QEasingCurve, QTimer from src.core.animation_manager import AnimationManager from src.utils.sound_manager import SoundManager +from src.utils.bonding_utils import get_level_info class PetWindow(QMainWindow): closed = Signal() @@ -77,6 +78,46 @@ def __init__(self, config_manager=None): self.message_hide_timer.setSingleShot(True) self.message_hide_timer.timeout.connect(self.message_label.hide) + self.update_tooltip() + + def update_tooltip(self): + """Обновляет всплывающую подсказку при наведении мыши на котика.""" + points = 0 + level = 0 + title = "Знакомый" + points_in_level = 0 + points_for_next_level = 0 + + if self.input_manager: + points = self.input_manager.last_affection_points + self.input_manager.pending_points + level, title, points_in_level, points_for_next_level = get_level_info(points) + + tooltip_lines = [ + "🐾 Котик-помощник 🐾", + f"Уровень {level}: {title}", + ] + + if points_for_next_level > 0: + tooltip_lines.append(f"Привязанность: {points_in_level}/{points_for_next_level} ❤️ (Всего: {points})") + else: + tooltip_lines.append(f"Привязанность: {points} ❤️ (Макс. уровень! 🎉)") + + if self.input_manager: + tooltip_lines.append(f"Рекорд KPS: {self.input_manager.max_kps} кл/сек ⚡") + + # Если запущен Pomodoro, добавляем статус + if self.timer_system and self.timer_system.pomodoro_state != "idle": + state = self.timer_system.pomodoro_state + remaining = self.timer_system.pomodoro_remaining + mins = remaining // 60 + secs = remaining % 60 + mode_name = "Работа 🛠" if state == "work" else "Отдых ☕" + tooltip_lines.append(f"⏱️ {mode_name}: {mins:02d}:{secs:02d}") + + tooltip_text = "\n".join(tooltip_lines) + self.setToolTip(tooltip_text) + self.pet_label.setToolTip(tooltip_text) + def moveEvent(self, event): self._cached_pos = event.pos() super().moveEvent(event) diff --git a/src/ui/tray_menu.py b/src/ui/tray_menu.py index 9ddc7c8..2266a1a 100644 --- a/src/ui/tray_menu.py +++ b/src/ui/tray_menu.py @@ -13,6 +13,8 @@ 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 +27,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.on_pomodoro_tick) + self.window.timer_system.pomodoro_finished.connect(self.on_pomodoro_finished) + def setup_menu(self): # Действия с питомцем feed_action = QAction("Покормить", self) @@ -60,16 +66,31 @@ def setup_menu(self): self.menu.addSeparator() # Pomodoro - pomodoro_menu = QMenu("Таймер Pomodoro", self.menu) - start_work = QAction("Начать работу (25 мин)", self) - start_work.triggered.connect(self.start_work_timer) - pomodoro_menu.addAction(start_work) + self.pomodoro_menu = QMenu("Таймер Pomodoro", self.menu) + + self.pomodoro_status_action = QAction("Активного таймера нет", self) + self.pomodoro_status_action.setEnabled(False) + self.pomodoro_menu.addAction(self.pomodoro_status_action) + + self.pomodoro_menu.addSeparator() - start_break = QAction("Перерыв (5 мин)", self) - start_break.triggered.connect(self.start_break_timer) - pomodoro_menu.addAction(start_break) + self.start_work_action = QAction("Начать работу", self) + self.start_work_action.triggered.connect(self.start_work_timer) + self.pomodoro_menu.addAction(self.start_work_action) - self.menu.addMenu(pomodoro_menu) + self.start_break_action = QAction("Перерыв", self) + self.start_break_action.triggered.connect(self.start_break_timer) + self.pomodoro_menu.addAction(self.start_break_action) + + self.stop_pomodoro_action = QAction("Остановить таймер", self) + self.stop_pomodoro_action.triggered.connect(self.stop_pomodoro_timer) + self.stop_pomodoro_action.setVisible(False) + self.pomodoro_menu.addAction(self.stop_pomodoro_action) + + self.menu.addMenu(self.pomodoro_menu) + + # Обновляем тексты в меню на основе конфигурации + self.update_pomodoro_menu_texts() self.menu.addSeparator() @@ -97,6 +118,12 @@ def setup_menu(self): quit_action.triggered.connect(self.quit_app) self.menu.addAction(quit_action) + def update_pomodoro_menu_texts(self): + work_mins = self.window.config.get("pomodoro_work") + break_mins = self.window.config.get("pomodoro_break") + self.start_work_action.setText(f"Начать работу ({work_mins} мин)") + self.start_break_action.setText(f"Перерыв ({break_mins} мин)") + def quit_app(self, checked=False): self.window.close() QApplication.instance().quit() @@ -118,12 +145,50 @@ def start_break_timer(self, checked=False): if self.window.input_manager and self.window.input_manager.db: self.window.input_manager.db.log_event("pomodoro_start", "Начата сессия отдыха") + def stop_pomodoro_timer(self, checked=False): + if self.window.timer_system: + self.window.timer_system.stop_pomodoro() + self.window.show_message("Таймер остановлен ⏹️") + if self.window.input_manager and self.window.input_manager.db: + self.window.input_manager.db.log_event("pomodoro_stop", "Таймер Pomodoro остановлен пользователем") + + def on_pomodoro_tick(self, mode, remaining_seconds): + if mode == "idle" or remaining_seconds <= 0: + self.pomodoro_status_action.setText("Активного таймера нет") + self.start_work_action.setVisible(True) + self.start_break_action.setVisible(True) + self.stop_pomodoro_action.setVisible(False) + self.tray_icon.setToolTip("Котик-помощник 🐾") + else: + mins = remaining_seconds // 60 + secs = remaining_seconds % 60 + time_str = f"{mins:02d}:{secs:02d}" + + mode_name = "Работа" if mode == "work" else "Отдых" + mode_icon = "🛠" if mode == "work" else "☕" + + self.pomodoro_status_action.setText(f"Идет сессия: {mode_name} ({time_str})") + self.start_work_action.setVisible(False) + self.start_break_action.setVisible(False) + self.stop_pomodoro_action.setVisible(True) + + self.tray_icon.setToolTip(f"Котик работает {mode_icon} (Осталось: {time_str})" if mode == "work" else f"Котик отдыхает {mode_icon} (Осталось: {time_str})") + + # Обновляем тултип главного окна, если применимо + if hasattr(self.window, 'update_tooltip'): + self.window.update_tooltip() + + def on_pomodoro_finished(self, mode): + self.on_pomodoro_tick("idle", 0) + def show_settings(self, checked=False): dialog = SettingsDialog(self.window.config, self.window) if dialog.exec(): # Обновляем скин и прозрачность в реальном времени self.window.animation_manager.set_skin(self.window.config.get("skin")) self.window.set_opacity(self.window.config.get("opacity")) + # Обновляем тексты меню Pomodoro + self.update_pomodoro_menu_texts() # Перезапускаем таймер растяжки с новым интервалом if self.window.timer_system: self.window.timer_system.restart_stretch_timer() diff --git a/tests/test_timer_system.py b/tests/test_timer_system.py new file mode 100644 index 0000000..0583dc6 --- /dev/null +++ b/tests/test_timer_system.py @@ -0,0 +1,93 @@ +import unittest +from PySide6.QtWidgets import QApplication +from src.core.timer_system import TimerSystem +from src.utils.config_manager import ConfigManager + +# Ensure there's a QApplication instance for QTimer / QObject creation +app = QApplication.instance() or QApplication([]) + +class TestTimerSystem(unittest.TestCase): + def setUp(self): + self.config = ConfigManager("test_settings.json") + self.config.set("pomodoro_work", 25) + self.config.set("pomodoro_break", 5) + self.timer_system = TimerSystem(self.config) + + def test_initial_state(self): + self.assertEqual(self.timer_system.pomodoro_state, "idle") + self.assertEqual(self.timer_system.pomodoro_duration, 0) + self.assertEqual(self.timer_system.pomodoro_remaining, 0) + + def test_start_pomodoro(self): + tick_emitted = [] + def on_tick(state, remaining): + tick_emitted.append((state, remaining)) + + self.timer_system.pomodoro_tick.connect(on_tick) + self.timer_system.start_pomodoro("work") + + self.assertEqual(self.timer_system.pomodoro_state, "work") + self.assertEqual(self.timer_system.pomodoro_duration, 25 * 60) + self.assertEqual(self.timer_system.pomodoro_remaining, 25 * 60) + self.assertTrue(self.timer_system.pomodoro_timer.isActive()) + + # Verify initial tick was emitted immediately + self.assertEqual(len(tick_emitted), 1) + self.assertEqual(tick_emitted[0], ("work", 25 * 60)) + + def test_pomodoro_countdown_ticks(self): + tick_emitted = [] + def on_tick(state, remaining): + tick_emitted.append((state, remaining)) + + self.timer_system.pomodoro_tick.connect(on_tick) + self.timer_system.start_pomodoro("work") + + # Simulate a countdown tick + self.timer_system.on_pomodoro_timeout() + self.assertEqual(self.timer_system.pomodoro_remaining, 25 * 60 - 1) + self.assertEqual(len(tick_emitted), 2) + self.assertEqual(tick_emitted[1], ("work", 25 * 60 - 1)) + + def test_stop_pomodoro(self): + tick_emitted = [] + def on_tick(state, remaining): + tick_emitted.append((state, remaining)) + + self.timer_system.pomodoro_tick.connect(on_tick) + 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_duration, 0) + self.assertEqual(self.timer_system.pomodoro_remaining, 0) + self.assertFalse(self.timer_system.pomodoro_timer.isActive()) + + # Two ticks should have been emitted: start and stop + self.assertEqual(len(tick_emitted), 2) + self.assertEqual(tick_emitted[-1], ("idle", 0)) + + def test_pomodoro_finished(self): + finished_emitted = [] + def on_finished(mode): + finished_emitted.append(mode) + + self.timer_system.pomodoro_finished.connect(on_finished) + self.timer_system.start_pomodoro("break") + + # Set remaining to 1 second so next timeout triggers finished + self.timer_system.pomodoro_remaining = 1 + self.timer_system.on_pomodoro_timeout() + + self.assertEqual(self.timer_system.pomodoro_state, "idle") + self.assertEqual(len(finished_emitted), 1) + self.assertEqual(finished_emitted[0], "break") + self.assertFalse(self.timer_system.pomodoro_timer.isActive()) + + def tearDown(self): + import os + if os.path.exists("test_settings.json"): + os.remove("test_settings.json") + +if __name__ == "__main__": + unittest.main() diff --git a/verification/screenshots/stats_history.png b/verification/screenshots/stats_history.png index 341bd7df5bfd09eeb553272a6638ecbb12dfee98..5a8021100b990dbbdc603b98d6e7738ddecbe978 100644 GIT binary patch literal 20562 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