55
66import httpx
77import flet as ft
8+ from nava import play
89import minecraft_launcher_lib as mcl
910
1011from minestat import MineStat , SlpProtocols
1617from updater import updater
1718from config import (
1819 AUTHLIB_INJECTOR_URL ,
20+ BASE_PATH ,
1921 SERVER_IP ,
2022 SKINS_CACHE_FOLDER ,
2123 LAUNCHER_DIRECTORY ,
@@ -32,6 +34,7 @@ def __init__(self, page: ft.Page):
3234 super ().__init__ (route = "/" )
3335 self .page = page
3436 self .controls = []
37+ self ._keypressed_list = []
3538 self ._max_progress = 0
3639 self ._download_callback = { # lambda : self._progress_text.text = status,
3740 "setStatus" : lambda status : self ._set_progress_text (status ),
@@ -42,23 +45,43 @@ def __init__(self, page: ft.Page):
4245 self .page .run_task (self ._server_status_update )
4346 self .page .run_task (self ._check_launcher_updates )
4447 self .page .run_task (self ._check_modpack_update_task )
48+ self .page .on_keyboard_event = self .on_keyboard_event
49+
50+ async def on_keyboard_event (self , event : ft .KeyboardEvent ):
51+ # check iddqd
52+ self ._keypressed_list .append (event .key )
53+ if len (self ._keypressed_list ) > 5 :
54+ self ._keypressed_list .pop (0 )
55+ if self ._keypressed_list == ["I" , "D" , "D" , "Q" , "D" ]:
56+ self ._keypressed_list = []
57+ play (os .path .join (BASE_PATH , "assets" , "iddqd.wav" ), async_mode = True )
58+ event .page .views [0 ].pagelet .appbar .leading .content = ft .Image (
59+ src = "iddqd.png" ,
60+ filter_quality = ft .FilterQuality .NONE ,
61+ fit = ft .ImageFit .CONTAIN ,
62+ width = 64 ,
63+ height = 64 ,
64+ )
65+ self .page .update ()
4566
4667 async def _check_launcher_updates (self ):
4768 while True :
4869 if await updater .check_for_update ():
4970 self .page .open (self ._update_banner )
5071 self .page .update ()
5172 await asyncio .sleep (60 )
52-
73+
5374 async def _check_modpack_update_task (self ):
5475 while True :
55- await asyncio .sleep (60 )
76+ await asyncio .sleep (60 )
5677 await asyncio .to_thread (self ._check_modpack_update )
5778
5879 def _check_modpack_update (self ):
5980 modpack ._fetch_latest_index ()
6081 if not modpack .is_up_to_date ():
61- self ._installed_version .value = f"Встановлена версія: { modpack .installed_version } "
82+ self ._installed_version .value = (
83+ f"Встановлена версія: { modpack .installed_version } "
84+ )
6285 self ._latest_version .value = f"Остання версія: { modpack .remote_version } "
6386 # update changelog
6487 self ._get_changelog ()
@@ -107,7 +130,6 @@ def _install_update(self):
107130 logging .info ("Launcher exited." )
108131
109132 def kill_app (self ):
110-
111133 logging .info ("Trying to exit program via asyncio" )
112134 to_cancel = asyncio .all_tasks (self .page .loop )
113135 if not to_cancel :
@@ -132,6 +154,10 @@ def _get_changelog(self):
132154 # add new _changelog
133155 self .pagelet .content .content .controls .append (self ._changelog )
134156
157+ def __open_monobank (self , event : ft .TapEvent ):
158+ play (os .path .join (BASE_PATH , "assets" , "mono.wav" ), async_mode = True )
159+ self ._open_link ("https://send.monobank.ua/jar/48bPzh2JmA" )
160+
135161 def build_ui (self ):
136162 self ._update_banner = ft .Banner (
137163 bgcolor = ft .Colors .SECONDARY_CONTAINER ,
@@ -192,9 +218,7 @@ def build_ui(self):
192218 # donate button
193219 ft .IconButton (
194220 icon = ft .Icons .ATTACH_MONEY ,
195- on_click = lambda e : self ._open_link (
196- "https://send.monobank.ua/jar/48bPzh2JmA"
197- ),
221+ on_click = self .__open_monobank ,
198222 tooltip = "Підтримати проект" ,
199223 ),
200224 # github
@@ -236,28 +260,26 @@ def build_ui(self):
236260 padding = ft .Padding (0 , 0 , 8 , 0 ),
237261 ),
238262 ],
239-
240263 )
241264 self ._play_button = ft .FloatingActionButton (
242265 icon = ft .Icons .PLAY_ARROW ,
243-
244266 text = "Грати" ,
245267 width = 160 ,
246268 on_click = self ._check_game ,
247269 )
248270 self ._check_game_button = ft .FloatingActionButton (
249271 icon = ft .Icons .RESTART_ALT ,
250272 bgcolor = ft .Colors .SECONDARY_CONTAINER ,
251-
252273 tooltip = "Перевстановити гру" ,
253274 on_click = self ._force_install_game ,
254275 )
255276 self ._open_game_folder_button = ft .FloatingActionButton (
256277 icon = ft .Icons .FOLDER ,
257278 bgcolor = ft .Colors .SECONDARY_CONTAINER ,
258-
259279 tooltip = "Відкрити папку з грою" ,
260- on_click = lambda e : self ._open_link (f"file://{ settings .minecraft_directory } " ),
280+ on_click = lambda e : self ._open_link (
281+ f"file://{ settings .minecraft_directory } "
282+ ),
261283 )
262284 self .floating_action_button = ft .Container (
263285 ft .Row (
0 commit comments