-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathshojinpoint.py
118 lines (104 loc) · 3.47 KB
/
shojinpoint.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import os
import json
import flet as ft
import schedule
import time
import view_main
import view_info
import view_setting
import view_today
import parts
import values
import data_getter
from logging import getLogger
from logging import config as logging_config
with open("logger_config.json", "r") as file:
config = json.load(file)
logging_config.dictConfig(config)
logger = getLogger("ShojinPoint")
def main(page: ft.Page):
page.title = "Shojin Point"
page.window_height = 500
page.window_width = 600
page.window_resizable = False
page.window_maximizable = False
page.fonts = {
"MPLUS1": "/fonts/MPLUS1-VARIABLEFONT_WGHT.TTF"
}
page.theme = ft.Theme(
font_family="MPLUS1",
text_theme=ft.TextTheme(
body_large=ft.TextStyle(font_family="MPLUS1", weight=ft.FontWeight.W_400, color=ft.colors.BLACK),
label_large=ft.TextStyle(font_family="MPLUS1", weight=ft.FontWeight.W_400),
label_medium=ft.TextStyle(font_family="MPLUS1", weight=ft.FontWeight.W_400),
body_small=ft.TextStyle(font_family="MPLUS1", weight=ft.FontWeight.W_400),
),
)
navbar = parts.navigation_bar(page)
def route_change(event: ft.RouteChangeEvent):
for i in range(len(page.views)):
if page.views[i].route == event.route:
page.views.append(page.views.pop(i))
page.update()
page.on_route_change = route_change
vw_setting, refresh_setting = view_setting.view_setting(page=page, navigation_bar=navbar)
vw_info, refresh_info = view_info.view_info(page=page, navigation_bar=navbar)
vw_main, refresh_main = view_main.view_main(page=page, navigation_bar=navbar)
vw_today, refresh_today = view_today.view_main(page=page, navigation_bar=navbar)
page.views.clear()
page.views.append(vw_setting)
page.views.append(vw_info)
page.views.append(vw_today)
page.views.append(vw_main)
def load_data():
logger.info("Loading data...")
dir_path = os.path.dirname(__file__) + "/data"
if not os.path.isdir(dir_path):
os.makedirs(dir_path)
file_path = dir_path + "/data_values.json"
if os.path.isfile(file_path):
with open(file_path, "r") as file:
obj = json.load(file)
return dict_to_values(obj)
else:
return values.values()
def save_data():
logger.info("Saving data...")
file_path = os.path.dirname(__file__) + "/data/data_values.json"
with open(file_path, "w") as file:
obj = vars(page.data)
json.dump(obj, file)
def dict_to_values(dc: dict) -> values.values:
res = values.values()
res.__dict__.update(dc)
res.day = int(time.time())
return res
def window_event(event):
if event.data == "close":
save_data()
page.window_destroy()
page.data = load_data()
page.on_window_event = window_event
page.window_prevent_close = True
refresh_main(page)
refresh_today(page)
refresh_setting(page)
def refresh(page: ft.Page):
data = data_getter.data_refresh(page.data)
if data is None:
return
points, tee, points_today, tee_today = data
page.data.points = points
page.data.tee = tee
page.data.points_today = points_today
page.data.tee_today = tee_today
refresh_main(page)
refresh_today(page)
page.update()
page.update()
schedule.every(1).seconds.do(refresh, page)
schedule.every(1).hours.do(data_getter.download_problems)
while True:
schedule.run_pending()
time.sleep(0.1)
ft.app(target=main)