From 29ac3e0eb512dffb4f61e32639b23479a37a9e61 Mon Sep 17 00:00:00 2001 From: Thomas Farstrike Date: Thu, 1 May 2025 23:21:34 +0200 Subject: [PATCH] Move to mpk format, add icon for LVGLTest, add more apps to appstore --- .gitignore | 2 + appstore_backend/apps.json | 42 +++++++++++++++--- appstore_backend/bundleapps.sh | 6 --- .../res/mipmap-mdpi/icon_64x64.png | Bin 0 -> 23115 bytes .../com.example.appstore/assets/appstore.py | 14 +++--- internal_filesystem/lib/shutil.mpy | Bin 0 -> 543 bytes scripts/bundleapps.sh | 10 +++++ 7 files changed, 55 insertions(+), 19 deletions(-) delete mode 100755 appstore_backend/bundleapps.sh create mode 100644 internal_filesystem/apps/com.example.lvgltest/res/mipmap-mdpi/icon_64x64.png create mode 100644 internal_filesystem/lib/shutil.mpy create mode 100755 scripts/bundleapps.sh diff --git a/.gitignore b/.gitignore index c19f64f3..a7a8d5e8 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ output/ notes.txt trash/ + +appstore_backend/bundled_apps/ diff --git a/appstore_backend/apps.json b/appstore_backend/apps.json index 958277d9..2b6c104b 100644 --- a/appstore_backend/apps.json +++ b/appstore_backend/apps.json @@ -1,4 +1,34 @@ [ + { + "name": "Camera Tester", + "publisher": "ACME Inc", + "short_description": "Simple test of the camera", + "long_description": "A simple test of the camera makes it possible to validate the hardware.", + "icon_url": "http://demo.lnpiggy.com:2121/apps/com.example.camtest_0.0.1.mpk_icon_64x64.png", + "download_url": "http://demo.lnpiggy.com:2121/apps/com.example.camtest_0.0.1.mpk", + "fullname": "com.example.camtest", + "version": "0.0.1" + }, + { + "name": "IMU Tester", + "publisher": "ACME Inc", + "short_description": "Testing the Inertial Measurement Unit", + "long_description": "It is always good to make sure the accelerometer is working properly. How else can you measure acceleration and position?", + "icon_url": "http://demo.lnpiggy.com:2121/apps/com.example.imutest_0.0.1.mpk_icon_64x64.png", + "download_url": "http://demo.lnpiggy.com:2121/apps/com.example.imutest_0.0.1.mpk", + "fullname": "com.example.imutest", + "version": "0.0.1" + }, + { + "name": "Animation Tester", + "publisher": "ACME Inc", + "short_description": "Testing on-display animations", + "long_description": "Stress testing multiple concurrent animations on the display by adding more and more spinners", + "icon_url": "http://demo.lnpiggy.com:2121/apps/com.example.lvgltest_0.0.1.mpk_icon_64x64.png", + "download_url": "http://demo.lnpiggy.com:2121/apps/com.example.lvgltest_0.0.1.mpk", + "fullname": "com.example.imutest", + "version": "0.0.1" + }, { "name": "Weather Pro", "publisher": "SkyTech", @@ -10,23 +40,23 @@ "version": "0.0.1" }, { - "name": "Task Manager", + "name": "Task Manager (broken download link)", "publisher": "Productivity Inc.", "short_description": "Organize your tasks", "long_description": "Task Manager helps you stay organized with customizable to-do lists, reminders, and progress tracking for personal and team projects.", "icon_url": "http://demo.lnpiggy.com:2121/icons/task_manager.png", - "download_url": "http://demo.lnpiggy.com:2121/zips/com.example.app2_0.0.1.zip", - "fullname": "com_example_app2", + "download_url": "httpppp://completelybrokendownloadlink", + "fullname": "com.productivityinc.taskmanager", "version": "0.0.1" }, { - "name": "Fitness Tracker", + "name": "Fitness Tracker (broken icon)", "publisher": "HealthCo", "short_description": "Track your workouts", "long_description": "Fitness Tracker monitors your daily activities, workouts, and sleep patterns, offering personalized insights to help you achieve your fitness goals.", - "icon_url": "http://demo.lnpiggy.com:2121/icons/fitness_tracker.png", + "icon_url": "httppp://completelybrokeniconurl", "download_url": "http://demo.lnpiggy.com:2121/zips/com.example.imutest_0.0.1.zip", - "fullname": "com_example_imutest", + "fullname": "com.healthco.fitnesstracker", "version": "0.0.1" } ] diff --git a/appstore_backend/bundleapps.sh b/appstore_backend/bundleapps.sh deleted file mode 100755 index d202daf5..00000000 --- a/appstore_backend/bundleapps.sh +++ /dev/null @@ -1,6 +0,0 @@ -ls -1 internal_filesystem/apps | while read appdir; do - echo "$appdir" - pushd internal_filesystem/apps/"$appdir" - zip -r0 ../../../bundled_apps/"$appdir"_0.0.1.zip . - popd -done diff --git a/internal_filesystem/apps/com.example.lvgltest/res/mipmap-mdpi/icon_64x64.png b/internal_filesystem/apps/com.example.lvgltest/res/mipmap-mdpi/icon_64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..a17fe3a470e28b55fe0436f54b5ffc7144bcba56 GIT binary patch literal 23115 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 literal 0 HcmV?d00001 diff --git a/internal_filesystem/builtin/apps/com.example.appstore/assets/appstore.py b/internal_filesystem/builtin/apps/com.example.appstore/assets/appstore.py index 6121d0c7..174ed815 100644 --- a/internal_filesystem/builtin/apps/com.example.appstore/assets/appstore.py +++ b/internal_filesystem/builtin/apps/com.example.appstore/assets/appstore.py @@ -94,8 +94,8 @@ def download_and_unzip(zip_url, dest_folder, label): progress_bar.set_value(20, lv.ANIM.ON) time.sleep_ms(500) try: - # Step 1: Download the .zip file - print(f"Downloading .zip file from: {zip_url}") + # Step 1: Download the .mpk file + print(f"Downloading .mpk file from: {zip_url}") response = urequests.get(zip_url, timeout=10) if response.status_code != 200: print("Download failed: Status code", response.status_code) @@ -103,7 +103,7 @@ def download_and_unzip(zip_url, dest_folder, label): label.set_text(action_label_install) progress_bar.set_value(40, lv.ANIM.ON) time.sleep_ms(500) - # Save the .zip file to a temporary location + # Save the .mpk file to a temporary location try: os.remove(temp_zip_path) except Exception: @@ -112,15 +112,15 @@ def download_and_unzip(zip_url, dest_folder, label): os.mkdir("/tmp") except Exception: pass - temp_zip_path = "/tmp/temp.zip" - print(f"Writing to temporary zip path: {temp_zip_path}") + temp_zip_path = "/tmp/temp.mpk" + print(f"Writing to temporary mpk path: {temp_zip_path}") # TODO: check free available space first! with open(temp_zip_path, "wb") as f: f.write(response.content) progress_bar.set_value(60, lv.ANIM.ON) time.sleep_ms(500) response.close() - print("Downloaded .zip file, size:", os.stat(temp_zip_path)[6], "bytes") + print("Downloaded .mpk file, size:", os.stat(temp_zip_path)[6], "bytes") # Step 2: Unzip the file if zipfile is None: print("WARNING: zipfile module not available in this MicroPython build, unzip will fail!") @@ -132,7 +132,7 @@ def download_and_unzip(zip_url, dest_folder, label): print("Unzipped successfully") # Step 3: Clean up os.remove(temp_zip_path) - print("Removed temporary .zip file") + print("Removed temporary .mpk file") except Exception as e: print("Operation failed:", str(e)) finally: diff --git a/internal_filesystem/lib/shutil.mpy b/internal_filesystem/lib/shutil.mpy new file mode 100644 index 0000000000000000000000000000000000000000..b87577e79d41d622f8911365db4eebd4c62f1837 GIT binary patch literal 543 zcmeZeW003+6e`XrEy>K$E2w1PXUQ*S5Xno-O-(5&Eyzh_5KGR_$w^Hv$;{6yX5cC< zPE1c_;4;uN&@*M=DatJ=N=;=D$jr$sE=kEOV<|&CAKm%Vyvz$_4SolJg5H(=u~X z^OLd|8f%+88>>Z9GK;h0A?ENEmn4>yr4=(M#pi)-iw8+UY6z5O5@Tu*VAf)kW|3hQV~!ML7GPCo zFkuoCGGY*8S88Fu|wt~cjoI*E<@NY6>JiOW2$qBAh zJ21Ja!c#~cQyd{jti^VTgU G%*g;Y=b#n< literal 0 HcmV?d00001 diff --git a/scripts/bundleapps.sh b/scripts/bundleapps.sh new file mode 100755 index 00000000..6f0e7142 --- /dev/null +++ b/scripts/bundleapps.sh @@ -0,0 +1,10 @@ +mkdir -p appstore_backend/bundled_apps +ls -1 internal_filesystem/apps | while read appdir; do + echo "Bundling $appdir" + pushd internal_filesystem/apps/"$appdir" + # TODO: get and append version from manifest instead of hardcoding: + mpkname="../../../appstore_backend/bundled_apps/"$appdir"_0.0.1.mpk" + zip -r0 "$mpkname" . + cp res/mipmap-mdpi/icon_64x64.png "$mpkname"_icon_64x64.png + popd +done