Skip to content

Commit 73c04a6

Browse files
committed
fix/startup: Avatar cannot be updated
Signed-off-by: lbuque <[email protected]>
1 parent 315f411 commit 73c04a6

File tree

13 files changed

+164
-195
lines changed

13 files changed

+164
-195
lines changed

m5stack/include/files.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@
44
define base-files/install
55
@cp ./fs/user/* $(2)/ -rf
66
@cp ./fs/system/$(1) $(2)/res/ -rf
7+
@cp ./fs/system/common/img/avatar.jpg $(2)/res/img/ -rf
78
endef

m5stack/modules/startup/basic/app.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
try:
2-
import uasyncio as asyncio
3-
except ImportError:
4-
import asyncio
1+
import uasyncio as asyncio
52

63

74
def generator(d):

m5stack/modules/startup/basic/apps/app_list.py

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
from ..app import AppBase
22
from widgets.image import Image
33
from widgets.label import Label
4-
import M5
5-
from M5 import Widgets
4+
from M5 import Lcd, Widgets
65
import os
76
import sys
87
from ..res import (
@@ -16,7 +15,7 @@
1615

1716

1817
class Rectangle:
19-
def __init__(self, x, y, w, h, color, fill_c, parent=M5.Lcd) -> None:
18+
def __init__(self, x, y, w, h, color, fill_c, parent=Lcd) -> None:
2019
self._x = x
2120
self._y = y
2221
self._w = w
@@ -87,7 +86,7 @@ def __init__(self, icos: dict, data=None) -> None:
8786
pass
8887

8988
def on_install(self):
90-
M5.Lcd.drawImage(APPLIST_UNSELECTED_IMG, 5 + 62 * 3, 0)
89+
Lcd.drawImage(APPLIST_UNSELECTED_IMG, 5 + 62 * 3, 0)
9190

9291
def on_launch(self):
9392
self._files = FileList("apps")
@@ -96,17 +95,12 @@ def on_launch(self):
9695
self._file_pos = 0
9796

9897
def on_view(self):
99-
M5.Lcd.drawImage(APPLIST_SELECTED_IMG, 5 + 62 * 3, 0)
100-
10198
self._origin_x = 0
10299
self._origin_y = 56
103100

104-
self._bg_img = Image(use_sprite=False)
105-
self._bg_img.set_pos(self._origin_x + 4, self._origin_y + 4)
106-
self._bg_img.set_size(312, 156)
107-
self._bg_img.set_src(APPLIST_IMG)
108-
109-
M5.Lcd.drawImage(BAR5_IMG, 0, 220)
101+
Lcd.drawImage(APPLIST_SELECTED_IMG, 5 + 62 * 3, 0)
102+
Lcd.drawImage(APPLIST_IMG, self._origin_x + 4, self._origin_y + 4)
103+
Lcd.drawImage(BAR5_IMG, 0, 220)
110104

111105
self._line_spacing = 36 + 2 + 2
112106
self._left_cursor_x = self._origin_x + 4
@@ -125,7 +119,7 @@ def on_view(self):
125119
self._right_cursor_y = self._origin_y + 4 + 2
126120

127121
self._rect1 = Rectangle(
128-
self._right_cursor_x, self._right_cursor_y, 10, 36, 0xFEFEFE, 0xFEFEFE, parent=M5.Lcd
122+
self._right_cursor_x, self._right_cursor_y, 10, 36, 0xFEFEFE, 0xFEFEFE, parent=Lcd
129123
)
130124

131125
self._right_img = Image(use_sprite=False)
@@ -186,8 +180,8 @@ def on_view(self):
186180
file and label and label.setText(file)
187181

188182
def on_exit(self):
189-
M5.Lcd.drawImage(APPLIST_UNSELECTED_IMG, 5 + 62 * 3, 0)
190-
del self._bg_img, self._left_img, self._right_img
183+
Lcd.drawImage(APPLIST_UNSELECTED_IMG, 5 + 62 * 3, 0)
184+
del self._left_img, self._right_img
191185
del self._label0, self._label1, self._label2, self._label3, self._labels
192186
del self._rect0
193187
del self._files, self._max_file_num, self._cursor_pos, self._file_pos
@@ -202,14 +196,11 @@ async def _btnb_event_handler(self, fw):
202196
self._rect1.set_pos(
203197
self._right_cursor_x, self._right_cursor_y + self._cursor_pos * self._line_spacing
204198
)
205-
# M5.Lcd.fillRect(self._left_cursor_x, self._left_cursor_y + self._cursor_pos * self._line_spacing, 10, 36, 0xfefefe)
206-
# M5.Lcd.fillRect(self._right_cursor_x, self._right_cursor_y + self._cursor_pos * self._line_spacing, 10, 36, 0xfefefe)
207199
if self._file_pos + 1 == len(self._files):
208200
self._cursor_pos = 0
209201
else:
210202
self._cursor_pos = (self._cursor_pos + 1) % self._max_file_num
211203
self._file_pos = (self._file_pos + 1) % len(self._files)
212-
# self._bg_img._draw(False)
213204
self._left_img.set_pos(
214205
self._left_cursor_x, self._left_cursor_y + self._cursor_pos * self._line_spacing
215206
)

m5stack/modules/startup/basic/apps/app_run.py

Lines changed: 26 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
from ..app import AppBase
2-
import M5
3-
from M5 import Widgets
4-
from widgets.label import Label
2+
from M5 import Lcd, Widgets
53
import esp32
64
import sys
75
import machine
@@ -28,65 +26,35 @@ def __init__(self, icos: dict, data=None) -> None:
2826
super().__init__()
2927

3028
def on_install(self):
31-
M5.Lcd.drawImage(APPRUN_UNSELECTED_IMG, 5 + 62 * 2, 0)
29+
Lcd.drawImage(APPRUN_UNSELECTED_IMG, 5 + 62 * 2, 0)
3230

3331
def on_launch(self):
3432
self._mtime_text, self._account_text, self._ver_text = self._get_file_info("main.py")
3533

3634
def on_view(self):
37-
M5.Lcd.drawImage(APPRUN_SELECTED_IMG, 5 + 62 * 2, 0)
38-
3935
self._origin_x = 0
4036
self._origin_y = 56
37+
Lcd.drawImage(APPRUN_SELECTED_IMG, 5 + 62 * 2, 0)
38+
Lcd.fillRect(self._origin_x, self._origin_y, 320, 184, 0x000000)
39+
Lcd.drawImage(RUN_IMG, self._origin_x + 4, self._origin_y + 4)
40+
Lcd.drawImage(BAR4_IMG, self._origin_x, 220)
41+
42+
# file name
43+
Lcd.setFont(Widgets.FONTS.DejaVu18)
44+
Lcd.setTextColor(0x000000, 0xEEEEEF)
45+
Lcd.drawString("main.py", 4 + 10, self._origin_y + 4 + 4)
46+
47+
Lcd.setFont(Widgets.FONTS.DejaVu12)
48+
Lcd.setTextColor(0x000000, 0xDCDDDD)
49+
Lcd.drawString(self._mtime_text, 4 + 10 + 8, self._origin_y + 4 + 4 + 20 + 6)
4150

42-
M5.Lcd.fillRect(self._origin_x, self._origin_y, 320, 184, 0x000000)
43-
44-
M5.Lcd.drawImage(RUN_IMG, self._origin_x + 4, self._origin_y + 4)
45-
M5.Lcd.drawImage(BAR4_IMG, self._origin_x, 220)
46-
47-
self._name_label = Label(
48-
"name",
49-
4 + 10,
50-
self._origin_y + 4 + 4,
51-
w=312,
52-
fg_color=0x000000,
53-
bg_color=0xEEEEEF,
54-
font=Widgets.FONTS.DejaVu18,
55-
)
56-
self._name_label.setText("main.py")
57-
58-
self._mtime_label = Label(
59-
"Time: 2023/5/14 12:23:43",
60-
4 + 10 + 8,
61-
self._origin_y + 4 + 4 + 20 + 6,
62-
w=312,
63-
fg_color=0x000000,
64-
bg_color=0xDCDDDD,
65-
font=Widgets.FONTS.DejaVu12,
66-
)
67-
self._mtime_label.setText(self._mtime_text)
68-
69-
self._account_label = Label(
70-
"Account: XXABC",
71-
4 + 10 + 8,
72-
self._origin_y + 4 + 4 + 20 + 6 + 18,
73-
w=312,
74-
fg_color=0x000000,
75-
bg_color=0xDCDDDD,
76-
font=Widgets.FONTS.DejaVu12,
77-
)
78-
self._account_label.setText(self._account_text)
79-
80-
self._ver_label = Label(
81-
"Ver: UIFLOW2.0 a18",
82-
4 + 10 + 8,
83-
self._origin_y + 4 + 4 + 20 + 6 + 18 + 18,
84-
w=312,
85-
fg_color=0x000000,
86-
bg_color=0xDCDDDD,
87-
font=Widgets.FONTS.DejaVu12,
88-
)
89-
self._ver_label.setText(self._ver_text)
51+
Lcd.setFont(Widgets.FONTS.DejaVu12)
52+
Lcd.setTextColor(0x000000, 0xDCDDDD)
53+
Lcd.drawString(self._account_text, 4 + 10 + 8, self._origin_y + 4 + 4 + 20 + 6 + 18)
54+
55+
Lcd.setFont(Widgets.FONTS.DejaVu12)
56+
Lcd.setTextColor(0x000000, 0xDCDDDD)
57+
Lcd.drawString(self._ver_text, 4 + 10 + 8, self._origin_y + 4 + 4 + 20 + 6 + 18 + 18)
9058

9159
def on_ready(self):
9260
pass
@@ -95,14 +63,13 @@ def on_hide(self):
9563
pass
9664

9765
def on_exit(self):
98-
M5.Lcd.drawImage(APPRUN_UNSELECTED_IMG, 5 + 62 * 2, 0)
99-
del self._name_label, self._mtime_label, self._account_label, self._ver_label
66+
Lcd.drawImage(APPRUN_UNSELECTED_IMG, 5 + 62 * 2, 0)
10067
del self._origin_x, self._origin_y
10168
del self._mtime_text, self._account_text, self._ver_text
10269

103-
async def _btna_event_handler(self, fw):
104-
# print("_btna_event_handler")
105-
pass
70+
# async def _btna_event_handler(self, fw):
71+
# # print("_btna_event_handler")
72+
# pass
10673

10774
async def _btnb_event_handler(self, fw):
10875
# print("_btnb_event_handler")

m5stack/modules/startup/basic/apps/dev.py

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
BATTERY_GREEN_IMG,
3232
BATTERY_BLACK_CHARGE_IMG,
3333
BATTERY_BLACK_IMG,
34+
AVATAR_IMG,
35+
USER_AVATAR_PATH,
3436
)
3537

3638
try:
@@ -85,8 +87,6 @@ def on_launch(self):
8587
self._status_bar_src = self._get_bar_src()
8688
self._network_status = self._get_network_status()
8789
self._cloud_status = self._get_cloud_status()
88-
self._network_status_src = _NETWORK_STATUS_ICOS[self._network_status]
89-
self._cloud_status_src = _CLOUD_STATUS_ICOS[self._cloud_status]
9090
self._battery_src = self._get_battery_src(
9191
M5.Power.getBatteryLevel(), M5.Power.isCharging()
9292
)
@@ -132,7 +132,11 @@ def on_view(self):
132132
self._avatar_img.set_pos(130, self._origin_y + 100)
133133
self._avatar_img.set_size(56, 56)
134134
self._avatar_img.set_scale(0.28, 0.28)
135-
self._avatar_img.set_src(self._avatar_src)
135+
try:
136+
os.stat(self._avatar_src)
137+
self._avatar_img.set_src(self._avatar_src)
138+
except OSError:
139+
self._avatar_img.set_src(AVATAR_IMG)
136140

137141
self._bar_img = Image(use_sprite=False)
138142
self._bar_img.set_pos(0, self._origin_y + 164)
@@ -142,12 +146,12 @@ def on_view(self):
142146
self._network_img = Image(use_sprite=False)
143147
self._network_img.set_pos(320 - 56 - 20 - 5 - 20 - 5, self._origin_y + 164)
144148
self._network_img.set_size(20, 20)
145-
self._network_img.set_src(self._network_status_src)
149+
self._network_img.set_src(_NETWORK_STATUS_ICOS[self._network_status])
146150

147151
self._cloud_img = Image(use_sprite=False)
148152
self._cloud_img.set_pos(320 - 56 - 20 - 5, self._origin_y + 164)
149153
self._cloud_img.set_size(20, 20)
150-
self._cloud_img.set_src(self._cloud_status_src)
154+
self._cloud_img.set_src(_CLOUD_STATUS_ICOS[self._cloud_status])
151155

152156
self._battery_img = Image(use_sprite=False)
153157
self._battery_img.set_pos(320 - 56, self._origin_y + 164)
@@ -181,9 +185,6 @@ async def on_run(self):
181185

182186
t = self._get_account()
183187
if t != self._account_text or refresh_bg:
184-
print(refresh_bg)
185-
print(self._account_text)
186-
print(t)
187188
self._account_text = t
188189
self._account_label.setText(self._account_text)
189190

@@ -194,7 +195,7 @@ async def on_run(self):
194195
os.stat(self._avatar_src)
195196
self._avatar_img.set_src(self._avatar_src)
196197
except OSError:
197-
asyncio.create_task(self._dl_avatar(self._avatar_src))
198+
self._dl_task = asyncio.create_task(self._dl_avatar(self._avatar_src))
198199
elif refresh_bg:
199200
self._avatar_img._draw(False)
200201

@@ -234,6 +235,11 @@ async def on_run(self):
234235
refresh_bar = False
235236
await asyncio.sleep_ms(1500)
236237

238+
def on_hide(self):
239+
if hasattr(self, "_dl_task"):
240+
self._dl_task.cancel()
241+
self._task.cancel()
242+
237243
def on_exit(self):
238244
M5.Lcd.drawImage(DEVELOP_UNSELECTED_IMG, 5 + 62 * 1, 0)
239245
del self._bg_img, self._mac_label, self._account_label, self._avatar_img
@@ -246,8 +252,6 @@ def on_exit(self):
246252
del self._status_bar_src
247253
del self._network_status
248254
del self._cloud_status
249-
del self._network_status_src
250-
del self._cloud_status_src
251255
del self._battery_src
252256
del self._battery_text
253257
del self._avatar_src
@@ -268,18 +272,22 @@ async def _dl_avatar(self, dst):
268272
if _HAS_SERVER is True and M5Things.status() is 2:
269273
infos = M5Things.info()
270274
if len(infos[4]) is 0:
271-
self._avatar_img.set_src("/system/common/img/avatar.jpg")
275+
self._avatar_img.set_src(AVATAR_IMG)
272276
else:
273277
try:
274-
rsp = requests.get("https://community.m5stack.com" + str(infos[4]))
278+
rsp = requests.get("http://community.m5stack.com" + str(infos[4]))
275279
f = open(dst, "wb")
276280
f.write(rsp.content)
277281
f.close()
282+
self._avatar_img.set_src(dst)
283+
except Exception as e:
284+
print(e)
285+
os.remove(dst)
286+
self._avatar_img.set_src(AVATAR_IMG)
287+
finally:
278288
rsp.close()
279-
except:
280-
self._avatar_img.set_src("/system/common/img/avatar.jpg")
281289
else:
282-
self._avatar_img.set_src("/system/common/img/avatar.jpg")
290+
self._avatar_img.set_src(AVATAR_IMG)
283291

284292
@staticmethod
285293
def _get_mac():
@@ -298,11 +306,11 @@ def _get_avatar():
298306
if _HAS_SERVER is True and M5Things.status() is 2:
299307
infos = M5Things.info()
300308
if len(infos[4]) is 0:
301-
return "/system/common/img/avatar.jpg"
309+
return AVATAR_IMG
302310
else:
303-
return "/system/common/" + str(infos[4]).split("/")[-1]
311+
return USER_AVATAR_PATH + str(infos[4]).split("/")[-1]
304312
else:
305-
return "/system/common/img/avatar.jpg"
313+
return AVATAR_IMG
306314

307315
def _get_bg_src(self):
308316
if _HAS_SERVER is True and M5Things.status() is 2:

m5stack/modules/startup/basic/apps/ezdata.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ def on_exit(self):
2828
M5.Lcd.drawImage(EZDATA_UNSELECTED_IMG, 5 + 62 * 4, 0)
2929
del self._origin_x, self._origin_y
3030

31-
async def _btna_event_handler(self, fw):
32-
pass
31+
# async def _btna_event_handler(self, fw):
32+
# pass
3333

34-
async def _btnb_event_handler(self, fw):
35-
pass
34+
# async def _btnb_event_handler(self, fw):
35+
# pass
3636

37-
async def _btnc_event_handler(self, fw):
38-
pass
37+
# async def _btnc_event_handler(self, fw):
38+
# pass

0 commit comments

Comments
 (0)