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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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:
|
||||
"""Метод для воспроизведения звука"""
|
||||
|
||||
33
kawai_focus/screens/timers_screen.py
Normal file
33
kawai_focus/screens/timers_screen.py
Normal 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'
|
||||
Reference in New Issue
Block a user