Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit543ff1c

Browse files
AppStore app: only download icon if needed
1 parent1f0dfcc commit543ff1c

File tree

3 files changed

+39
-38
lines changed

3 files changed

+39
-38
lines changed

‎internal_filesystem/builtin/apps/com.micropythonos.appstore/assets/appstore.py‎

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class AppStore(Activity):
2424
install_label=None
2525
please_wait_label=None
2626
progress_bar=None
27+
_icon_widgets= {}
2728

2829
defonCreate(self):
2930
self.main_screen=lv.obj()
@@ -56,7 +57,6 @@ def download_app_index(self, json_url):
5657
ifresponseandresponse.status_code==200:
5758
#print(f"Got response text: {response.text}")
5859
try:
59-
applist=json.loads(response.text)
6060
forappinjson.loads(response.text):
6161
try:
6262
self.apps.append(App(app["name"],app["publisher"],app["short_description"],app["long_description"],app["icon_url"],app["download_url"],app["fullname"],app["version"],app["category"],app["activities"]))
@@ -70,6 +70,7 @@ def download_app_index(self, json_url):
7070
time.sleep_ms(200)
7171
self.update_ui_threadsafe_if_foreground(self.please_wait_label.add_flag,lv.obj.FLAG.HIDDEN)
7272
self.update_ui_threadsafe_if_foreground(self.create_apps_list)
73+
time.sleep(0.1)# give the UI time to display the app list before starting to download
7374
self.download_icons()
7475
exceptExceptionase:
7576
print(f"ERROR: could not parse reponse.text JSON:{e}")
@@ -78,12 +79,13 @@ def download_app_index(self, json_url):
7879

7980
defcreate_apps_list(self):
8081
print("create_apps_list")
81-
default_icon_dsc=self.load_icon("builtin/res/mipmap-mdpi/default_icon_64x64.png")
8282
apps_list=lv.list(self.main_screen)
8383
apps_list.set_style_border_width(0,0)
8484
apps_list.set_style_radius(0,0)
8585
apps_list.set_style_pad_all(0,0)
8686
apps_list.set_size(lv.pct(100),lv.pct(100))
87+
# Clear old icons
88+
self._icon_widgets= {}
8789
print("create_apps_list iterating")
8890
forappinself.apps:
8991
print(app)
@@ -103,7 +105,8 @@ def create_apps_list(self):
103105
cont.add_event_cb(lambdae,a=app:self.show_app_detail(a),lv.EVENT.CLICKED,None)
104106
icon_spacer=lv.image(cont)
105107
icon_spacer.set_size(64,64)
106-
app.image=icon_spacer
108+
icon_spacer.set_src(lv.SYMBOL.REFRESH)
109+
self._icon_widgets[app.fullname]=icon_spacer
107110
icon_spacer.add_event_cb(lambdae,a=app:self.show_app_detail(a),lv.EVENT.CLICKED,None)
108111
label_cont=lv.obj(cont)
109112
label_cont.set_style_border_width(0,0)
@@ -123,18 +126,21 @@ def create_apps_list(self):
123126

124127
defdownload_icons(self):
125128
forappinself.apps:
126-
ifapp.image_dsc:
127-
print(f"Skipping icon download for{app.name} because already downloaded.")
128-
continue
129129
ifnotself.has_foreground():
130130
print(f"App is stopping, aborting icon downloads.")
131131
break
132-
#if app.icon_path:
133-
print(f"Downloading icon for{app.name}")
134-
image_dsc=self.download_icon(app.icon_url)
135-
app.image_dsc=image_dsc# save it for the app detail page
136-
self.update_ui_threadsafe_if_foreground(app.image.set_src,image_dsc)
137-
time.sleep_ms(200)# not waiting here will result in some async_calls() not being executed
132+
ifnotapp.icon_data:
133+
print(f"No icon_data found for{app}, downloading...")
134+
app.icon_data=self.download_icon_data(app.icon_url)
135+
ifapp.icon_data:
136+
print("download_icons has icon_data, showing it...")
137+
icon_widget=self._icon_widgets.get(app.fullname)
138+
ificon_widget:
139+
image_dsc=lv.image_dsc_t({
140+
'data_size':len(app.icon_data),
141+
'data':app.icon_data
142+
})
143+
self.update_ui_threadsafe_if_foreground(icon_widget.set_src,image_dsc)# error: 'App' object has no attribute 'image'
138144
print("Finished downloading icons.")
139145

140146
defshow_app_detail(self,app):
@@ -143,34 +149,20 @@ def show_app_detail(self, app):
143149
self.startActivity(intent)
144150

145151
@staticmethod
146-
defdownload_icon(url):
152+
defdownload_icon_data(url):
147153
print(f"Downloading icon from{url}")
148154
try:
149155
response=requests.get(url,timeout=5)
150156
ifresponse.status_code==200:
151157
image_data=response.content
152158
print("Downloaded image, size:",len(image_data),"bytes")
153-
image_dsc=lv.image_dsc_t({
154-
'data_size':len(image_data),
155-
'data':image_data
156-
})
157-
returnimage_dsc
159+
returnimage_data
158160
else:
159161
print("Failed to download image: Status code",response.status_code)
160162
exceptExceptionase:
161163
print(f"Exception during download of icon:{e}")
162164
returnNone
163165

164-
@staticmethod
165-
defload_icon(icon_path):
166-
withopen(icon_path,'rb')asf:
167-
image_data=f.read()
168-
image_dsc=lv.image_dsc_t({
169-
'data_size':len(image_data),
170-
'data':image_data
171-
})
172-
returnimage_dsc
173-
174166
classAppDetail(Activity):
175167

176168
action_label_install="Install"
@@ -192,18 +184,23 @@ def onCreate(self):
192184
app_detail_screen.set_size(lv.pct(100),lv.pct(100))
193185
app_detail_screen.set_pos(0,40)
194186
app_detail_screen.set_flex_flow(lv.FLEX_FLOW.COLUMN)
195-
#
187+
196188
headercont=lv.obj(app_detail_screen)
197189
headercont.set_style_border_width(0,0)
198190
headercont.set_style_pad_all(0,0)
199191
headercont.set_flex_flow(lv.FLEX_FLOW.ROW)
200192
headercont.set_size(lv.pct(100),lv.SIZE_CONTENT)
201193
headercont.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
202194
icon_spacer=lv.image(headercont)
203-
ifapp.image_dsc:
204-
icon_spacer.set_src(app.image_dsc)
205195
icon_spacer.set_size(64,64)
206-
#
196+
ifapp.icon_data:
197+
image_dsc=lv.image_dsc_t({
198+
'data_size':len(app.icon_data),
199+
'data':app.icon_data
200+
})
201+
icon_spacer.set_src(image_dsc)
202+
else:
203+
icon_spacer.set_src(lv.SYMBOL.REFRESH)
207204
detail_cont=lv.obj(headercont)
208205
detail_cont.set_style_border_width(0,0)
209206
detail_cont.set_style_radius(0,0)
@@ -216,7 +213,7 @@ def onCreate(self):
216213
publisher_label=lv.label(detail_cont)
217214
publisher_label.set_text(app.publisher)
218215
publisher_label.set_style_text_font(lv.font_montserrat_16,0)
219-
#
216+
220217
self.progress_bar=lv.bar(app_detail_screen)
221218
self.progress_bar.set_width(lv.pct(100))
222219
self.progress_bar.set_range(0,100)

‎internal_filesystem/lib/mpos/app/app.py‎

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ def __init__(
1010
short_description="",
1111
long_description="",
1212
icon_url="",
13-
icon_path="builtin/res/mipmap-mdpi/default_icon_64x64.png",
1413
download_url="",
1514
fullname="Unknown",
1615
version="0.0.0",
1716
category="",
1817
activities=None,
1918
installed_path=None,
19+
icon_path="builtin/res/mipmap-mdpi/default_icon_64x64.png",
20+
icon_data=None,
2021
):
2122
self.name=name
2223
self.publisher=publisher
@@ -30,17 +31,19 @@ def __init__(
3031
self.activities=activitiesor []
3132
self.installed_path=installed_path
3233

33-
self.image=None
34-
self.image_dsc=None
3534
self.icon_path=self._find_icon_path()
35+
print(f"App constructor got icon_path:{self.icon_path}")
3636
ifself.icon_path:
3737
self.icon_data=self._load_icon_data(self.icon_path)
38+
else:
39+
self.icon_data=None
3840
self.main_launcher_activity=self._find_main_launcher_activity()
3941

4042
def__str__(self):
4143
returnf"App({self.name}, version{self.version},{self.category})"
4244

4345
def_load_icon_data(self,icon_path):
46+
print(f"App _load_icon_data for{icon_path}")
4447
try:
4548
f=open(icon_path,'rb')
4649
returnf.read()
@@ -49,12 +52,12 @@ def _load_icon_data(self, icon_path):
4952

5053
def_check_icon_path(self,tocheck):
5154
try:
52-
#print(f"checking {tocheck}")
55+
print(f"checking{tocheck}")
5356
st=os.stat(tocheck)
5457
print(f"_find_icon_path for{tocheck} found{st}")
5558
returntocheck
5659
exceptExceptionase:
57-
#print(f"No app icon found: {e}")
60+
print(f"No app icon found in{tocheck}:{e}")
5861
returnNone
5962

6063
def_find_icon_path(self):

‎tests/package_manager.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,4 @@ def test_get_app(self):
4747
hello_world_app=PackageManager.get("com.micropythonos.helloworld")
4848
self.assertIsInstance(hello_world_app,App)
4949
self.assertEqual(hello_world_app.icon_path,"apps/com.micropythonos.helloworld/res/mipmap-mdpi/icon_64x64.png")
50+
self.assertEqual(len(hello_world_app.icon_data),5378)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp