frat: added screen timers_screen, added new buttons: back, delete_timer, new_timer and the functionality is connected to them, udated fuc list_timers() for work with timers_screens for data;

This commit is contained in:
Arduinum628
2025-08-21 00:01:34 +03:00
parent ca6de5351a
commit 92765001be
10 changed files with 386 additions and 40 deletions

View File

@@ -1,6 +1,6 @@
from sqlalchemy import select, insert, update, delete
from kawai_focus.schemas import TimerModel, TimerListModel
from kawai_focus.schemas import TimerModel
from kawai_focus.database.session import db
from kawai_focus.database.models import Timer
from kawai_focus.database.decor_erors import crud_error_guard
@@ -26,15 +26,30 @@ def get_timer(timer_id: int) -> TimerModel:
@crud_error_guard
def list_timers() -> list[TimerListModel]:
def list_timers() -> list[dict[str, int | str]]:
"""Функция для получения списка таймеров"""
with db.get_session() as session:
query = select(Timer.id, Timer.title)
query = select(
Timer.id,
Timer.title,
Timer.pomodoro_time,
Timer.count_pomodoro
)
result = session.execute(query)
timers = result.mappings().fetchall()
return [TimerListModel.model_validate(obj=accept, from_attributes=True) for accept in timers]
return [
{
'timer_id': timer.id,
'text': (
f'{timer.title}\n'
f'Помидоров: {timer.count_pomodoro}, '
f'размер помидора: {timer.pomodoro_time}'
)
}
for timer in timers
]
@crud_error_guard

View File

@@ -10,6 +10,8 @@ import logging
from kawai_focus.screens.timer_screen import TimerScreen
from kawai_focus.screens.timer_constructor_screen import TimerConstructorScreen
from kawai_focus.screens.timers_screen import TimersScreen
from kawai_focus.database.cruds import list_timers
Logger.setLevel(logging.DEBUG)
@@ -24,10 +26,16 @@ class KawaiFocusApp(App):
# Загрузка kv файла
Builder.load_file('kv/timer_screen.kv')
Builder.load_file('kv/timer_constructor_screen.kv')
Builder.load_file('kv/timers_screen.kv')
screen_manager = ScreenManager()
timers = list_timers()
timers_screen = TimersScreen(name='timers_screen')
timers_screen.ids.timers_view.data = timers
screen_manager.add_widget(timers_screen)
screen_manager.add_widget(TimerConstructorScreen(name='timer_constructor_screen'))
screen_manager.add_widget(TimerScreen(name='timers_screen'))
screen_manager.add_widget(TimerScreen(name='timer_screen'))
return screen_manager

View File

@@ -33,7 +33,7 @@ class TimerConstructorScreen(Screen):
)
if timer:
screen_timer = self.manager.get_screen('timers_screen')
screen_timer = self.manager.get_screen('timer_screen')
screen_timer.timer = timer
time_culc = calculate_time(mm_user=timer.pomodoro_time)
screen_timer.timer_start_time = time_culc
@@ -42,10 +42,10 @@ class TimerConstructorScreen(Screen):
screen_timer.source_timer_names = gen_types_timers(count_pomodoro=timer.count_pomodoro)
self.manager.state_machine = screen_timer.source_timer_names.copy()
self.manager.current = 'timers_screen'
self.manager.current = 'timer_screen'
def back(self, instance) -> None:
"""Метод для кнопки назад - возврат в меню таймеров"""
pass
self.manager.current = 'timers_screen'

View File

@@ -3,6 +3,7 @@ from kivy.clock import Clock
from kivy.core.audio import SoundLoader
from kawai_focus.utils.utils import data_json, custom_timer, calculate_time
from kawai_focus.database.cruds import del_timer, list_timers
class TimerScreen(Screen):
@@ -88,7 +89,30 @@ class TimerScreen(Screen):
if not len(self.manager.state_machine):
self.manager.state_machine = self.source_timer_names.copy()
self.choice_timer()
self.choice_timer()
def back(self, instance) -> None:
"""Метод для кнопки назад - возврат в меню таймеров"""
if self.ids.title_warning.text:
self.ids.title_warning.text = ''
self.ids.del_timer.color = (1, 1, 1, 1)
self.manager.current = 'timers_screen'
def delete_timer(self, instance) -> None:
"""Метод для удаления таймера"""
if not self.ids.title_warning.text:
self.ids.title_warning.text = ('Вы действительно хотите удалить таймер?\n'
'Если да, то нажмите кнопку "удалить" ещё раз.')
self.ids.del_timer.color = (1, 0.3, 0.3, 1)
else:
del_timer(timer_id=self.timer.id)
timers = list_timers()
timers_screen = self.manager.get_screen('timers_screen')
timers_screen.ids.timers_view.data = timers
self.manager.current = 'timers_screen'
def play_sound(self, dt) -> None:
"""Метод для воспроизведения звука"""

View File

@@ -0,0 +1,33 @@
from kivy.uix.screenmanager import Screen
from kawai_focus.utils.utils import calculate_time, gen_types_timers
from kawai_focus.database.cruds import get_timer
class TimersScreen(Screen):
"""Экран таймеры"""
def __init__(self, **kwargs):
super(TimersScreen, self).__init__(**kwargs)
def switch_new_timer(self, instance) -> None:
"""Метод для переключения на экран Конструктор таймера"""
self.manager.current = 'timer_constructor_screen'
def switch_timer(self, instance) -> None:
"""Метод для кнопки переключения на выбранный таймер"""
timer = get_timer(timer_id=instance.timer_id)
screen_timer = self.manager.get_screen('timer_screen')
screen_timer.timer = timer
time_culc = calculate_time(mm_user=timer.pomodoro_time)
screen_timer.timer_start_time = time_culc
screen_timer.ids.time_label.text = time_culc
screen_timer.ids.title_label.text = timer.title
screen_timer.source_timer_names = gen_types_timers(count_pomodoro=timer.count_pomodoro)
self.manager.state_machine = screen_timer.source_timer_names.copy()
self.manager.current = 'timer_screen'