diff --git a/.github/workflows/build-arm64-mac.yml b/.github/workflows/build-arm64-mac.yml
new file mode 100644
index 0000000..f87c91a
--- /dev/null
+++ b/.github/workflows/build-arm64-mac.yml
@@ -0,0 +1,47 @@
+name: Build Retro-Imager for ARM64 Macs
+
+on:
+ push:
+ branches:
+ - dev
+ pull_request:
+ branches:
+ - dev
+
+jobs:
+ build:
+ name: Build on macOS ARM64
+ runs-on: macos-13
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ - name: Install Dependencies
+ run: |
+ brew update
+ brew install cmake qt@6
+
+ - name: Verify Qt Installation Path
+ run: |
+ echo "Qt is installed at: $(brew --prefix qt@6)"
+ ls -la $(brew --prefix qt@6)
+
+ - name: Configure and Build Retro-Imager
+ run: |
+ mkdir -p build
+ cd build
+ cmake -DCMAKE_PREFIX_PATH=$(brew --prefix qt@6) ../src
+ make
+
+ - name: Archive Build Artifacts
+ if: success()
+ run: |
+ mkdir -p build_artifacts
+ tar -czvf build_artifacts/retro-imager-arm64-mac.tar.gz build/
+
+ - name: Upload Build Artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: retro-imager-arm64-mac
+ path: build_artifacts/retro-imager-arm64-mac.tar.gz
diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml
deleted file mode 100644
index d0e0302..0000000
--- a/.github/workflows/windows-build.yml
+++ /dev/null
@@ -1,46 +0,0 @@
-name: Windows x64 Build
-
-on:
- push:
- branches:
- - boogaloo
- pull_request:
- branches:
- - boogaloo
-
-jobs:
- build:
- runs-on: windows-latest
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v3
-
- - name: Set up Qt
- uses: jurplel/install-qt-action@v3
- with:
- version: '6.7.3'
- host: 'windows'
- target: 'desktop'
- arch: 'win64_msvc2019_64'
-
- - name: Install CMake
- run: |
- choco install cmake --installargs '"ADD_CMAKE_TO_PATH=System"' --yes
-
- - name: Install Visual Studio Build Tools
- run: |
- choco install visualstudio2019buildtools --version=16.11.9 --yes
- choco install visualstudio2019-workload-vctools --yes
-
- - name: Configure CMake
- shell: cmd
- run: |
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
- cmake -S src -B build -G "NMake Makefiles" -DCMAKE_PREFIX_PATH:PATH="%Qt5_DIR%"
-
- - name: Build the project
- shell: cmd
- run: |
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
- cmake --build build --config Release
diff --git a/README.md b/README.md
index b8ba31e..70654da 100644
--- a/README.md
+++ b/README.md
@@ -1,154 +1,65 @@
-# Raspberry Pi Imager
+# Retro-Imager
-Raspberry Pi Imaging Utility
+**Retro-Imager** is a fork of the official Raspberry Pi Imager, specially tailored for retro gaming handhelds and the custom firmwares that power them. This project simplifies the process of flashing custom firmware images to your retro handheld devices, allowing you to quickly get set up and start gaming.
-- To install on Raspberry Pi OS, use `sudo apt update && sudo apt install rpi-imager`.
-- Download the latest version for Windows, macOS and Ubuntu from the [Raspberry Pi downloads page](https://www.raspberrypi.com/software/).
+## Supported Devices & Custom Firmwares
-## How to use Raspberry Pi Imager
+At present, **Retro-Imager** supports:
+**muOS** and **Rocknix**.
+More devices and firmwares will be added in future releases!
-Please see our [official documentation](https://www.raspberrypi.com/documentation/computers/getting-started.html#raspberry-pi-imager).
+## Features
+
+- **Easy-to-use interface**: Retro-Imager retains the familiar look and feel of Raspberry Pi Imager, making it accessible to anyone.
+- **Handheld Focus**: Tailored specifically for retro handheld gaming devices, eliminating unnecessary options for general-purpose single-board computers.
+- **Custom Firmware Support**: Flash custom OS images like muOS and Rocknix quickly and easily.
+- **Firmware Recommendations**: The top-most firmware option for each device is our recommended choice, ensuring optimal performance and compatibility.
+
+## Getting Started
+
+### Prerequisites
+
+- A computer running Linux (x86_64) or Windows (x86_64)
+- A microSD card reader
+- A microSD card (at least 8GB, though larger is recommended)
+
+### Installation
+
+1. Download the most recent release from the [GitHub releases page](https://github.com/cmclark00/retro-imager/releases).
+2. Extract the files (if necessary) and run the application on your system:
+ - For Linux: Make the file executable and run it.
+ ```bash
+ chmod +x retro-imager.AppImage
+ ./retro-imager.AppImage
+ ```
+ - For Windows: Double-click the `.exe` file.
+
+### Using Retro-Imager
+
+1. Launch Retro-Imager.
+2. Select your device from the list (e.g., RG35XX Plus, RG28XX, RGB30).
+3. Choose the custom firmware you would like to install. The top-most option is the recommended firmware for your selected device.
+4. Insert your microSD card into your computer.
+5. Select the correct device from the list and click "Write".
+6. Safely remove the microSD card and insert it into your retro gaming handheld.
## Contributing
-### Linux
+We welcome contributions! Whether you're improving code, fixing bugs, or expanding firmware support, your help is appreciated.
-#### Get dependencies
+To contribute:
-- Install the build dependencies (Debian used as an example):
-
-```sh
-sudo apt install --no-install-recommends build-essential cmake git libgnutls28-dev
-```
-
-- Get the Qt online installer from: https://www.qt.io/download-open-source
-- During installation, choose Qt 6.7, CMake and Qt Creator.
-
-#### Get the source
-
-```sh
-git clone --depth 1 https://github.com/raspberrypi/rpi-imager
-```
-
-#### Build the AppImage
-
-Modify appimagecraft.yml:
-
-- First, you _must_ set Qt6_ROOT (as a extra_variables item under build/cmake) to the root of your Qt6 installation. eg: `/opt/Qt/6.7.2/gcc_arm64/`
-- Second, you _must_ set QMAKE (as a raw_environment variable of the linuxdeploy plugin) to the full path of qmake inside that Qt6 installation. eg: `/opt/Qt/6.7.2./gcc_arm64/bin/qmake`
-
-Now, use AppImageCraft to build your AppImage:
-
-```sh
-cd rpi-imager
-export LD_LIBRARY_PATH=${your_Qt6_install_path}/lib
-./${your_platform_appimagecraft}.AppImage
-```
-
-Now mark the AppImage as executable, and run it:
-
-```sh
-chmod +x ./Raspberry_Pi_Imager-*.AppImage
-./Raspberry_Pi_Imager-*.AppImage
-```
-
-### Windows
-
-#### Get dependencies
-
-- Get the Qt online installer from: https://www.qt.io/download-open-source
-During installation, choose Qt 6.7 with Mingw64 64-bit toolchain, CMake and Qt Creator.
-
-- For building the installer, get Nullsoft scriptable install system: https://nsis.sourceforge.io/Download
-
-- It is assumed you already have a valid code signing certificate, and the Windows 10 Kit (SDK) installed.
-
-#### Building
-
-Building Raspberry Pi Imager on Windows is best done with the Qt Creator GUI.
-
-- Download source .zip from github and extract it to a folder on disk
-- Open src/CMakeLists.txt in Qt Creator.
-- Use Qt Creator to set the MINGW64_ROOT CMake variable to your MingGW64 installation path, eg `C:\Qt\Tools\mingw64`
-- For builds you distribute to others, make sure you choose "Release" in the toolchain settings and not the Debug configuration.
-- Menu "Build" -> "Build all"
-- Result will be in build_rpi-imager_someversion
-- Go to the BUILD folder, right click on the .nsi script "Compile NSIS script", to create installer.
-
-### macOS
-
-#### Get dependencies
-
-- Get the Qt online installer from: https://www.qt.io/download-open-source
-During installation, choose Qt 6.7, CMake and Qt Creator.
-- It is assumed you have an Apple developer subscription, and already have a "Developer ID" code signing certificate for distribution outside the Mac Store.
-
-#### Building
-
-- Download source .zip from github and extract it to a folder on disk
-- Start Qt Creator and open src/CMakeLists.txt
-- Use Qt Creator to set the Qt6_ROOT CMake variable to your Qt6 installation path, eg `/opt/Qt6/6.7.2/gcc_arm64`
-- Menu "Build" -> "Build all"
-- Result will be in build_rpi-imager_someversion
-- For distribution to others:
- - Use the IMAGER_SIGNED_APP flag to enable Application signing
- - Use the IMAGER_SIGNING_IDENTITY string to specify the Developer ID certificate Common Name
- - Use the IMAGER_NOTARIZE_APP flag to enable notarization as part of the build
- - Use the IMAGER_NOTARIZE_KEYCHAIN_PROFILE string to specify the name of the keychain item containing your Apple ID credentials for notarizing.
-
-### Linux embedded (netboot) build
-
-The embedded build runs under a minimalistic Linux distribution compiled by buildroot.
-To build:
-
-- You must be running a Linux system, and have the buildroot dependencies installed as listed in the buildroot manual: https://buildroot.org/downloads/manual/manual.html#requirement
-- Run:
-
-```sh
-cd rpi-imager/embedded
-./build.sh
-```
-
-The result will be in the "output" directory.
-The files can be copied to a FAT32 formatted SD card, and inserted in a Pi for testing.
-If you would like to build a (signed) netboot image there are tools for that at: https://github.com/raspberrypi/usbboot/tree/master/tools
-
-## Other notes
-
-### Custom repository
-
-If the application is started with "--repo [your own URL]" it will use a custom image repository.
-So can simply create another 'start menu shortcut' to the application with that parameter to use the application with your own images.
-
-### Telemetry
-
-In order to understand usage of the application (e.g. uptake of Raspberry Pi Imager versions and which images and operating systems are most popular) when using the default image repository, the URL, operating system name and category (if present) of a selected image are sent along with the running version of Raspberry Pi Imager, your operating system, CPU architecture, locale and Raspberry Pi revision (if applicable) to https://rpi-imager-stats.raspberrypi.com by downloadstatstelemetry.cpp.
-
-This web service is hosted by [Heroku](https://www.heroku.com) and only stores an incrementing counter using a [Redis Sorted Set](https://redis.io/topics/data-types#sorted-sets) for each URL, operating system name and category per day in the `eu-west-1` region and does not associate any personal data with those counts. This allows us to query the number of downloads over time and nothing else.
-
-The last 1,500 requests to the service are logged for one week before expiring as this is the [minimum log retention period for Heroku](https://devcenter.heroku.com/articles/logging#log-history-limits).
-
-On Windows, you can opt out of telemetry by disabling it in the Registry:
-
-```pwsh
-reg add "HKCU\Software\Raspberry Pi\Imager" /v telemetry /t REG_DWORD /d 0
-```
-
-On Linux, run `rpi-imager --disable-telemetry` or add the following to `~/.config/Raspberry Pi/Imager.conf`:
-
-```ini
-[General]
-telemetry=false
-```
-
-On macOS, disable it by editing the property list for the application:
-
-```sh
-defaults write org.raspberrypi.Imager.plist telemetry -bool NO
-```
+1. Fork the repository.
+2. Create a new branch:
+ ```bash
+ git checkout -b feature/YourFeature
+3. Commit your changes:
+ ```bash
+ git commit -m "Add some feature"
+4. Push to the branch:
+ ```bash
+ git push origin feature/YourFeature
+5. Open a Pull Request.
### License
-
-The main code of the Imaging Utility is made available under the terms of the Apache license.
-See license.txt and files in "src/dependencies" folder for more information about the various open source licenses that apply to the third-party dependencies used such as Qt, libarchive, drivelist, mountutils and libcurl.
-For the embedded (netboot) build see also "embedded/legal-info" for more information about the extra system software included in that.
+This project is licensed under the MIT License. See the LICENSE file for details.
diff --git a/appimagecraft.yml b/appimagecraft.yml
index 82bd195..83cbde4 100644
--- a/appimagecraft.yml
+++ b/appimagecraft.yml
@@ -1,8 +1,8 @@
version: 1
project:
- name: org.raspberrypi.rpi-imager
- version: 1.9.2
+ name: org.coreymclark.retro-imager
+ version: 0.3.0
build:
cmake:
diff --git a/minimal_test.json b/minimal_test.json
new file mode 100644
index 0000000..75c3838
--- /dev/null
+++ b/minimal_test.json
@@ -0,0 +1,16 @@
+{
+ "os_list": [
+ {
+ "name": "Test OS 1",
+ "description": "A test OS for verifying functionality",
+ "icon": "icons/erase.png",
+ "url": "internal://format"
+ },
+ {
+ "name": "Test OS 2",
+ "description": "Another test OS",
+ "icon": "icons/erase.png",
+ "url": "internal://format"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/os_list.json b/os_list.json
new file mode 100644
index 0000000..fedc395
--- /dev/null
+++ b/os_list.json
@@ -0,0 +1,552 @@
+{
+ "os_list": [
+ {
+ "name": "muOS 2410.1 Banana for RG35XX Plus",
+ "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XX Plus.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
+ "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-PLUS-2410.1-BANANA-d1bae326.img.gz",
+ "release_date": "2024-10-12",
+ "image_download_size": 2151537628,
+ "extract_size": 4504682496,
+ "extract_sha256": "62c492047923e3e8709e0b015760b7f1e0db2ccab40e741fe067b49d96957624",
+ "devices": [
+ "rg35xx_plus"
+ ]
+ },
+ {
+ "name": "muOS 2410.1 Banana for RG28XX",
+ "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG28XX.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
+ "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG28XX-2410.1-BANANA-d1bae326.img.gz",
+ "release_date": "2024-10-12",
+ "image_download_size": 2158432397,
+ "extract_size": 4504682496,
+ "extract_sha256": "62c492047923e3e8709e0b015760b7f1e0db2ccab40e741fe067b49d96957624",
+ "devices": [
+ "rg28xx"
+ ]
+ },
+ {
+ "name": "muOS 2410.1 Banana for RG35XXH",
+ "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XXH.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
+ "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-H-2410.1-BANANA-a10951c4.img.gz",
+ "release_date": "2024-10-12",
+ "image_download_size": 2118435484,
+ "extract_size": 4504682496,
+ "extract_sha256": "a84a1386de3b046aea05c75a4ccc8da0fbc2ee42f89b7b78a720cf657f45d3d2",
+ "devices": [
+ "rg35xxh"
+ ]
+ },
+ {
+ "name": "muOS 2410.1 Banana for RG35XXSP",
+ "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XXSP.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
+ "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-SP-2410.1-BANANA-d1bae326.img.gz",
+ "release_date": "2024-10-12",
+ "image_download_size": 2176694960,
+ "extract_size": 4504682496,
+ "extract_sha256": "9a529d2f089bba6616615026c6ec16e282d622adbc6ae97172b7ab73d32092c4",
+ "devices": [
+ "rg35xx_sp"
+ ]
+ },
+ {
+ "name": "muOS 2410.1 Banana for RG35XX24",
+ "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XX24.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
+ "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-2024-2410.1-BANANA-d1bae326.img.gz",
+ "release_date": "2024-10-12",
+ "image_download_size": 2151137645,
+ "extract_size": 4504682496,
+ "extract_sha256": "fc0da5aa0dcda244be8dec28115210200fe259c374bb7b25d6d26f4db812d351",
+ "devices": [
+ "rg35xx_2024"
+ ]
+ },
+ {
+ "name": "muOS 2410.1 Banana for RG40XXH",
+ "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG40XXH.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
+ "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-H-2410.1-BANANA-d1bae326.img.gz",
+ "release_date": "2024-10-12",
+ "image_download_size": 2132388103,
+ "extract_size": 4504682496,
+ "extract_sha256": "fe51f4f3a7f9e51c34eb78ef704a9a6af0233d6fdf87ccd070444034003afe5c",
+ "devices": [
+ "rg40xxh"
+ ]
+ },
+ {
+ "name": "muOS 2410.1 Banana for RG40XXV",
+ "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG40XXV.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
+ "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-V-2410.1-BANANA-d1bae326.img.gz",
+ "release_date": "2024-10-12",
+ "image_download_size": 2132476961,
+ "extract_size": 4504682496,
+ "extract_sha256": "aa2cd35010e1414c62b0460d8f193d7a3c56ebcf3f59a220aebe995ab93bb051",
+ "devices": [
+ "rg40xxv"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Rockchip RK3326 devices, A image.",
+ "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3326 devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3326.aarch64-20241120-a.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1348717111,
+ "extract_size": 2197815296,
+ "extract_sha256": "8cc28cca1d4d88464cf156691a540111385c5b94f30aa067456cc80fcd12b747",
+ "devices": [
+ "rg351p",
+ "rg351m",
+ "rg351v",
+ "r33s",
+ "r35s",
+ "r36s",
+ "oga",
+ "ogs",
+ "xu10",
+ "v10",
+ "rgb10"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Rockchip RK3326 devices, B image.",
+ "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3326 devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3326.aarch64-20241120-b.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1348619756,
+ "extract_size": 2197815296,
+ "extract_sha256": "e43ed5ea9c8c93408a180e57409e9a07d7594ecb1ffe46f21024655f46ea9050",
+ "devices": [
+ "xu_mini_m",
+ "rgb10x"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Rockchip RK3399 devices",
+ "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3399 devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3399.aarch64-20241120.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1288581465,
+ "extract_size": 2198863872,
+ "extract_sha256": "53091696a540d693d99d515524816825a057823c0fe1f91a0b5e4837baeb24b9",
+ "devices": [
+ "rg552"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Rockchip RK3566 devices",
+ "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3566 devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3566.aarch64-20241120-Generic.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1391749865,
+ "extract_size": 2198863872,
+ "extract_sha256": "4917f090e9364f47de5cf8663c0741eb79b8236c4b455a5ae4d3c8889744de27",
+ "devices": [
+ "rg353p",
+ "rg353m",
+ "rg353v",
+ "rg353vs",
+ "rg353ps",
+ "rg503",
+ "rg_arc_d",
+ "rg_arc_s",
+ "rk2023",
+ "rgb10_max_3",
+ "rgb30",
+ "rgb20sx"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Powkiddy X55 devices",
+ "description": "ROCKNIX 20241120 firmware optimized for Powkiddy X55 devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3566.aarch64-20241120-Powkiddy_x55.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1391396234,
+ "extract_size": 2198863872,
+ "extract_sha256": "35391e0a49de413a2672893a07ed6ca116f90746baef620eebf8d3ab7b2ad5f7",
+ "devices": [
+ "x55"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Hardkernel ODROID Go Ultra and Powkiddy RGB10 Max 3 Pro devices",
+ "description": "ROCKNIX 20241120 firmware optimized for ODROID Go Ultra and RGB10 Max 3 Pro devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-S922X.aarch64-20241120.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1416924259,
+ "extract_size": 2185232384,
+ "extract_sha256": "86cd0a48d541e3e68582107748e2f77656c153d11f6efd14563fb65a0f9c5076",
+ "devices": [
+ "ogu",
+ "rgb10_max_3_pro"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20240815 for Hardkernel ODROID N2/N2+ devices",
+ "description": "ROCKNIX 20240815 firmware optimized for Hardkernel ODROID N2/N2+ devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-S922X.aarch64-20240815-Odroid_N2.img.gz",
+ "release_date": "2024-08-15",
+ "image_download_size": 1249723275,
+ "extract_size": 2185232384,
+ "extract_sha256": "7e5b56f4a0c0a9d9c64e7b1ba4472dd7e2dac9c28a23585098e16349f30c7fc9",
+ "devices": [
+ "on2",
+ "on2_plus"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20240815 for Hardkernel ODROID N2L devices",
+ "description": "ROCKNIX 20240815 firmware optimized for Hardkernel ODROID N2L devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-S922X.aarch64-20240815-Odroid_N2L.img.gz",
+ "release_date": "2024-08-15",
+ "image_download_size": 1249707786,
+ "extract_size": 2185232384,
+ "extract_sha256": "5af36c78b57dcb35c910bb72c2ed28208fe94c94d5b7fda83d73ef33a2419910",
+ "devices": [
+ "on2l"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Rockchip RK3588 devices",
+ "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3588 devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3588.aarch64-20241120.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1451047021,
+ "extract_size": 2198863872,
+ "extract_sha256": "ec81027b7d9b757f09ccd78ce38c6993009e66ddd4b7e1a1206dc104ad739754",
+ "devices": [
+ "ace",
+ "orange_pi_5",
+ "orange_pi_5_plus",
+ "radxa_rock_5a",
+ "radxa_rock_5b",
+ "radxa_rock_5b_plus",
+ "radxa_rock_cm5",
+ "nova"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Retroid Pocket Mini and Retroid Pocket 5 devices",
+ "description": "ROCKNIX 20241120 firmware optimized for Snapdragon 865 devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-SD865.aarch64-20241120.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1404994449,
+ "extract_size": 2198863872,
+ "extract_sha256": "82f9336c27c9b733322e7e9f685bc1e98aa4eedb0c17f9ae297edb983ada6f39",
+ "devices": [
+ "rpmini",
+ "rp5"
+ ]
+ }
+ ],
+ "imager": {
+ "devices": [
+ {
+ "name": "Anbernic",
+ "subitems": [
+ {
+ "name": "Anbernic RG40XXH",
+ "tags": ["rg40xxh"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG40XX%20H.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG40XXV",
+ "tags": ["rg40xxv"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG40XX%20V.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG35XXH",
+ "tags": ["rg35xxh"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20H.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG35XX Plus",
+ "tags": ["rg35xx_plus"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20-%20PLUS.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG35XX SP",
+ "tags": ["rg35xx_sp"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20SP.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG35XX 2024",
+ "tags": ["rg35xx_2024"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20-%202024.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG28XX",
+ "tags": ["rg28xx"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG28XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG351P",
+ "tags": ["rg351p"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG351M",
+ "tags": ["rg351m"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG351V",
+ "tags": ["rg351v"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG353P",
+ "tags": ["rg353p"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG353M",
+ "tags": ["rg353m"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG353V",
+ "tags": ["rg353v"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG353VS",
+ "tags": ["rg353vs"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG353PS",
+ "tags": ["rg353ps"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG503",
+ "tags": ["rg503"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG Arc-D",
+ "tags": ["rg_arc_d"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG Arc-S",
+ "tags": ["rg_arc_s"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "Game Console",
+ "subitems": [
+ {
+ "name": "Game Console R33S",
+ "tags": ["r33s"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Game Console R35S",
+ "tags": ["r35s"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Game Console R36S",
+ "tags": ["r36s"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "ODROID",
+ "subitems": [
+ {
+ "name": "ODROID Go Advance",
+ "tags": ["oga"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "ODROID Go Super",
+ "tags": ["ogs"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "ODROID N2",
+ "tags": ["on2"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "ODROID N2 Plus",
+ "tags": ["on2_plus"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "ODROID N2L",
+ "tags": ["on2l"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "MagicX",
+ "subitems": [
+ {
+ "name": "MagicX XU10",
+ "tags": ["xu10"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "MagicX XU Mini M",
+ "tags": ["xu_mini_m"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "Powkiddy",
+ "subitems": [
+ {
+ "name": "Powkiddy V10",
+ "tags": ["v10"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Powkiddy RGB10",
+ "tags": ["rgb10"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Powkiddy RK2023",
+ "tags": ["rk2023"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Powkiddy RGB10 Max 3",
+ "tags": ["rgb10_max_3"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Powkiddy RGB30",
+ "tags": ["rgb30"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Powkiddy RGB20SX",
+ "tags": ["rgb20sx"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG552",
+ "tags": ["rg552"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "ODROID Go Ultra",
+ "tags": ["ogu"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Powkiddy RGB10 Max 3 Pro",
+ "tags": ["rgb10_max_3_pro"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Powkiddy X55",
+ "tags": ["x55"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "Gameforce",
+ "subitems": [
+ {
+ "name": "Gameforce Ace (default)",
+ "tags": ["ace"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "Orange Pi",
+ "subitems": [
+ {
+ "name": "Orange Pi 5",
+ "tags": ["orange_pi_5"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Orange Pi 5 Plus",
+ "tags": ["orange_pi_5_plus"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "Radxa",
+ "subitems": [
+ {
+ "name": "Radxa Rock 5a",
+ "tags": ["radxa_rock_5a"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Radxa Rock 5b",
+ "tags": ["radxa_rock_5b"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Radxa Rock 5b Plus",
+ "tags": ["radxa_rock_5b_plus"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Radxa Rock CM5",
+ "tags": ["radxa_rock_cm5"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "Indiedroid",
+ "subitems": [
+ {
+ "name": "Indiedroid Nova (Must set dtb in extlinuix.conf)",
+ "tags": ["nova"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "Retroid",
+ "subitems": [
+ {
+ "name": "Retroid Pocket Mini",
+ "tags": ["rpmini"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Retroid Pocket 5",
+ "tags": ["rp5"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ }
+ ]
+ }
+}
+
diff --git a/qt_plugins/assetimporters/libassimp.dylib b/qt_plugins/assetimporters/libassimp.dylib
new file mode 100755
index 0000000..fcc24b2
Binary files /dev/null and b/qt_plugins/assetimporters/libassimp.dylib differ
diff --git a/qt_plugins/canbus/libqtpassthrucanbus.dylib b/qt_plugins/canbus/libqtpassthrucanbus.dylib
new file mode 100755
index 0000000..f81d632
Binary files /dev/null and b/qt_plugins/canbus/libqtpassthrucanbus.dylib differ
diff --git a/qt_plugins/canbus/libqtpeakcanbus.dylib b/qt_plugins/canbus/libqtpeakcanbus.dylib
new file mode 100755
index 0000000..b481c0a
Binary files /dev/null and b/qt_plugins/canbus/libqtpeakcanbus.dylib differ
diff --git a/qt_plugins/canbus/libqttinycanbus.dylib b/qt_plugins/canbus/libqttinycanbus.dylib
new file mode 100755
index 0000000..e25a98b
Binary files /dev/null and b/qt_plugins/canbus/libqttinycanbus.dylib differ
diff --git a/qt_plugins/canbus/libqtvirtualcanbus.dylib b/qt_plugins/canbus/libqtvirtualcanbus.dylib
new file mode 100755
index 0000000..1d0afa2
Binary files /dev/null and b/qt_plugins/canbus/libqtvirtualcanbus.dylib differ
diff --git a/qt_plugins/designer/libqquickwidget.dylib b/qt_plugins/designer/libqquickwidget.dylib
new file mode 100755
index 0000000..fa42225
Binary files /dev/null and b/qt_plugins/designer/libqquickwidget.dylib differ
diff --git a/qt_plugins/designer/libqwebengineview.dylib b/qt_plugins/designer/libqwebengineview.dylib
new file mode 100755
index 0000000..c0e98f8
Binary files /dev/null and b/qt_plugins/designer/libqwebengineview.dylib differ
diff --git a/qt_plugins/generic/libqtuiotouchplugin.dylib b/qt_plugins/generic/libqtuiotouchplugin.dylib
new file mode 100755
index 0000000..5d77bc6
Binary files /dev/null and b/qt_plugins/generic/libqtuiotouchplugin.dylib differ
diff --git a/qt_plugins/geometryloaders/libdefaultgeometryloader.dylib b/qt_plugins/geometryloaders/libdefaultgeometryloader.dylib
new file mode 100755
index 0000000..915e18b
Binary files /dev/null and b/qt_plugins/geometryloaders/libdefaultgeometryloader.dylib differ
diff --git a/qt_plugins/geometryloaders/libgltfgeometryloader.dylib b/qt_plugins/geometryloaders/libgltfgeometryloader.dylib
new file mode 100755
index 0000000..c26e1e3
Binary files /dev/null and b/qt_plugins/geometryloaders/libgltfgeometryloader.dylib differ
diff --git a/qt_plugins/geoservices/libqtgeoservices_itemsoverlay.dylib b/qt_plugins/geoservices/libqtgeoservices_itemsoverlay.dylib
new file mode 100755
index 0000000..47ec78f
Binary files /dev/null and b/qt_plugins/geoservices/libqtgeoservices_itemsoverlay.dylib differ
diff --git a/qt_plugins/geoservices/libqtgeoservices_osm.dylib b/qt_plugins/geoservices/libqtgeoservices_osm.dylib
new file mode 100755
index 0000000..ead5dd9
Binary files /dev/null and b/qt_plugins/geoservices/libqtgeoservices_osm.dylib differ
diff --git a/qt_plugins/help/libhelpplugin.dylib b/qt_plugins/help/libhelpplugin.dylib
new file mode 100755
index 0000000..e615f84
Binary files /dev/null and b/qt_plugins/help/libhelpplugin.dylib differ
diff --git a/qt_plugins/iconengines/libqsvgicon.dylib b/qt_plugins/iconengines/libqsvgicon.dylib
new file mode 100755
index 0000000..2334c1f
Binary files /dev/null and b/qt_plugins/iconengines/libqsvgicon.dylib differ
diff --git a/qt_plugins/imageformats/libqgif.dylib b/qt_plugins/imageformats/libqgif.dylib
new file mode 100755
index 0000000..80c37d6
Binary files /dev/null and b/qt_plugins/imageformats/libqgif.dylib differ
diff --git a/qt_plugins/imageformats/libqicns.dylib b/qt_plugins/imageformats/libqicns.dylib
new file mode 100755
index 0000000..2a906b9
Binary files /dev/null and b/qt_plugins/imageformats/libqicns.dylib differ
diff --git a/qt_plugins/imageformats/libqico.dylib b/qt_plugins/imageformats/libqico.dylib
new file mode 100755
index 0000000..f8c1a2c
Binary files /dev/null and b/qt_plugins/imageformats/libqico.dylib differ
diff --git a/qt_plugins/imageformats/libqjp2.dylib b/qt_plugins/imageformats/libqjp2.dylib
new file mode 100755
index 0000000..589265b
Binary files /dev/null and b/qt_plugins/imageformats/libqjp2.dylib differ
diff --git a/qt_plugins/imageformats/libqjpeg.dylib b/qt_plugins/imageformats/libqjpeg.dylib
new file mode 100755
index 0000000..9b4c006
Binary files /dev/null and b/qt_plugins/imageformats/libqjpeg.dylib differ
diff --git a/qt_plugins/imageformats/libqmacheif.dylib b/qt_plugins/imageformats/libqmacheif.dylib
new file mode 100755
index 0000000..a5ca073
Binary files /dev/null and b/qt_plugins/imageformats/libqmacheif.dylib differ
diff --git a/qt_plugins/imageformats/libqmng.dylib b/qt_plugins/imageformats/libqmng.dylib
new file mode 100755
index 0000000..b03723d
Binary files /dev/null and b/qt_plugins/imageformats/libqmng.dylib differ
diff --git a/qt_plugins/imageformats/libqpdf.dylib b/qt_plugins/imageformats/libqpdf.dylib
new file mode 100755
index 0000000..10a7c59
Binary files /dev/null and b/qt_plugins/imageformats/libqpdf.dylib differ
diff --git a/qt_plugins/imageformats/libqsvg.dylib b/qt_plugins/imageformats/libqsvg.dylib
new file mode 100755
index 0000000..a9cc580
Binary files /dev/null and b/qt_plugins/imageformats/libqsvg.dylib differ
diff --git a/qt_plugins/imageformats/libqtga.dylib b/qt_plugins/imageformats/libqtga.dylib
new file mode 100755
index 0000000..67f39da
Binary files /dev/null and b/qt_plugins/imageformats/libqtga.dylib differ
diff --git a/qt_plugins/imageformats/libqtiff.dylib b/qt_plugins/imageformats/libqtiff.dylib
new file mode 100755
index 0000000..bf7ea97
Binary files /dev/null and b/qt_plugins/imageformats/libqtiff.dylib differ
diff --git a/qt_plugins/imageformats/libqwbmp.dylib b/qt_plugins/imageformats/libqwbmp.dylib
new file mode 100755
index 0000000..f057406
Binary files /dev/null and b/qt_plugins/imageformats/libqwbmp.dylib differ
diff --git a/qt_plugins/imageformats/libqwebp.dylib b/qt_plugins/imageformats/libqwebp.dylib
new file mode 100755
index 0000000..557482f
Binary files /dev/null and b/qt_plugins/imageformats/libqwebp.dylib differ
diff --git a/qt_plugins/multimedia/libdarwinmediaplugin.dylib b/qt_plugins/multimedia/libdarwinmediaplugin.dylib
new file mode 100755
index 0000000..a2c0e2c
Binary files /dev/null and b/qt_plugins/multimedia/libdarwinmediaplugin.dylib differ
diff --git a/qt_plugins/networkinformation/libqglib.dylib b/qt_plugins/networkinformation/libqglib.dylib
new file mode 100755
index 0000000..0855317
Binary files /dev/null and b/qt_plugins/networkinformation/libqglib.dylib differ
diff --git a/qt_plugins/networkinformation/libqscnetworkreachability.dylib b/qt_plugins/networkinformation/libqscnetworkreachability.dylib
new file mode 100755
index 0000000..72b348b
Binary files /dev/null and b/qt_plugins/networkinformation/libqscnetworkreachability.dylib differ
diff --git a/qt_plugins/opcua/libopen62541_backend.dylib b/qt_plugins/opcua/libopen62541_backend.dylib
new file mode 100755
index 0000000..5578936
Binary files /dev/null and b/qt_plugins/opcua/libopen62541_backend.dylib differ
diff --git a/qt_plugins/permissions/libqdarwinbluetoothpermission.a b/qt_plugins/permissions/libqdarwinbluetoothpermission.a
new file mode 100644
index 0000000..b8122f3
Binary files /dev/null and b/qt_plugins/permissions/libqdarwinbluetoothpermission.a differ
diff --git a/qt_plugins/permissions/libqdarwinbluetoothpermission.prl b/qt_plugins/permissions/libqdarwinbluetoothpermission.prl
new file mode 100644
index 0000000..9f6d1ba
--- /dev/null
+++ b/qt_plugins/permissions/libqdarwinbluetoothpermission.prl
@@ -0,0 +1,5 @@
+QMAKE_PRL_TARGET = libqdarwinbluetoothpermission.a
+QMAKE_PRL_CONFIG = static
+QMAKE_PRL_VERSION = 6.8.2
+QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework CoreBluetooth
+QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework CoreBluetooth
diff --git a/qt_plugins/permissions/libqdarwincalendarpermission.a b/qt_plugins/permissions/libqdarwincalendarpermission.a
new file mode 100644
index 0000000..21e7ec4
Binary files /dev/null and b/qt_plugins/permissions/libqdarwincalendarpermission.a differ
diff --git a/qt_plugins/permissions/libqdarwincalendarpermission.prl b/qt_plugins/permissions/libqdarwincalendarpermission.prl
new file mode 100644
index 0000000..fb7e5e9
--- /dev/null
+++ b/qt_plugins/permissions/libqdarwincalendarpermission.prl
@@ -0,0 +1,5 @@
+QMAKE_PRL_TARGET = libqdarwincalendarpermission.a
+QMAKE_PRL_CONFIG = static
+QMAKE_PRL_VERSION = 6.8.2
+QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework EventKit
+QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework EventKit
diff --git a/qt_plugins/permissions/libqdarwincamerapermission.a b/qt_plugins/permissions/libqdarwincamerapermission.a
new file mode 100644
index 0000000..f319588
Binary files /dev/null and b/qt_plugins/permissions/libqdarwincamerapermission.a differ
diff --git a/qt_plugins/permissions/libqdarwincamerapermission.prl b/qt_plugins/permissions/libqdarwincamerapermission.prl
new file mode 100644
index 0000000..1085b53
--- /dev/null
+++ b/qt_plugins/permissions/libqdarwincamerapermission.prl
@@ -0,0 +1,5 @@
+QMAKE_PRL_TARGET = libqdarwincamerapermission.a
+QMAKE_PRL_CONFIG = static
+QMAKE_PRL_VERSION = 6.8.2
+QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework AVFoundation
+QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework AVFoundation
diff --git a/qt_plugins/permissions/libqdarwincontactspermission.a b/qt_plugins/permissions/libqdarwincontactspermission.a
new file mode 100644
index 0000000..548b88c
Binary files /dev/null and b/qt_plugins/permissions/libqdarwincontactspermission.a differ
diff --git a/qt_plugins/permissions/libqdarwincontactspermission.prl b/qt_plugins/permissions/libqdarwincontactspermission.prl
new file mode 100644
index 0000000..a2d9c0e
--- /dev/null
+++ b/qt_plugins/permissions/libqdarwincontactspermission.prl
@@ -0,0 +1,5 @@
+QMAKE_PRL_TARGET = libqdarwincontactspermission.a
+QMAKE_PRL_CONFIG = static
+QMAKE_PRL_VERSION = 6.8.2
+QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework Contacts
+QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework Contacts
diff --git a/qt_plugins/permissions/libqdarwinlocationpermission.a b/qt_plugins/permissions/libqdarwinlocationpermission.a
new file mode 100644
index 0000000..6642bed
Binary files /dev/null and b/qt_plugins/permissions/libqdarwinlocationpermission.a differ
diff --git a/qt_plugins/permissions/libqdarwinlocationpermission.prl b/qt_plugins/permissions/libqdarwinlocationpermission.prl
new file mode 100644
index 0000000..fe1aa38
--- /dev/null
+++ b/qt_plugins/permissions/libqdarwinlocationpermission.prl
@@ -0,0 +1,5 @@
+QMAKE_PRL_TARGET = libqdarwinlocationpermission.a
+QMAKE_PRL_CONFIG = static
+QMAKE_PRL_VERSION = 6.8.2
+QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework CoreLocation
+QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework CoreLocation
diff --git a/qt_plugins/permissions/libqdarwinmicrophonepermission.a b/qt_plugins/permissions/libqdarwinmicrophonepermission.a
new file mode 100644
index 0000000..77ed4ff
Binary files /dev/null and b/qt_plugins/permissions/libqdarwinmicrophonepermission.a differ
diff --git a/qt_plugins/permissions/libqdarwinmicrophonepermission.prl b/qt_plugins/permissions/libqdarwinmicrophonepermission.prl
new file mode 100644
index 0000000..ca6f7b7
--- /dev/null
+++ b/qt_plugins/permissions/libqdarwinmicrophonepermission.prl
@@ -0,0 +1,5 @@
+QMAKE_PRL_TARGET = libqdarwinmicrophonepermission.a
+QMAKE_PRL_CONFIG = static
+QMAKE_PRL_VERSION = 6.8.2
+QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework AVFoundation
+QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework AVFoundation
diff --git a/qt_plugins/permissions/objects-Release/QDarwinBluetoothPermissionPlugin_init/QDarwinBluetoothPermissionPlugin_init.cpp.o b/qt_plugins/permissions/objects-Release/QDarwinBluetoothPermissionPlugin_init/QDarwinBluetoothPermissionPlugin_init.cpp.o
new file mode 100644
index 0000000..1f5594e
Binary files /dev/null and b/qt_plugins/permissions/objects-Release/QDarwinBluetoothPermissionPlugin_init/QDarwinBluetoothPermissionPlugin_init.cpp.o differ
diff --git a/qt_plugins/permissions/objects-Release/QDarwinCalendarPermissionPlugin_init/QDarwinCalendarPermissionPlugin_init.cpp.o b/qt_plugins/permissions/objects-Release/QDarwinCalendarPermissionPlugin_init/QDarwinCalendarPermissionPlugin_init.cpp.o
new file mode 100644
index 0000000..8476489
Binary files /dev/null and b/qt_plugins/permissions/objects-Release/QDarwinCalendarPermissionPlugin_init/QDarwinCalendarPermissionPlugin_init.cpp.o differ
diff --git a/qt_plugins/permissions/objects-Release/QDarwinCameraPermissionPlugin_init/QDarwinCameraPermissionPlugin_init.cpp.o b/qt_plugins/permissions/objects-Release/QDarwinCameraPermissionPlugin_init/QDarwinCameraPermissionPlugin_init.cpp.o
new file mode 100644
index 0000000..f974b34
Binary files /dev/null and b/qt_plugins/permissions/objects-Release/QDarwinCameraPermissionPlugin_init/QDarwinCameraPermissionPlugin_init.cpp.o differ
diff --git a/qt_plugins/permissions/objects-Release/QDarwinContactsPermissionPlugin_init/QDarwinContactsPermissionPlugin_init.cpp.o b/qt_plugins/permissions/objects-Release/QDarwinContactsPermissionPlugin_init/QDarwinContactsPermissionPlugin_init.cpp.o
new file mode 100644
index 0000000..2410986
Binary files /dev/null and b/qt_plugins/permissions/objects-Release/QDarwinContactsPermissionPlugin_init/QDarwinContactsPermissionPlugin_init.cpp.o differ
diff --git a/qt_plugins/permissions/objects-Release/QDarwinLocationPermissionPlugin_init/QDarwinLocationPermissionPlugin_init.cpp.o b/qt_plugins/permissions/objects-Release/QDarwinLocationPermissionPlugin_init/QDarwinLocationPermissionPlugin_init.cpp.o
new file mode 100644
index 0000000..d836b6f
Binary files /dev/null and b/qt_plugins/permissions/objects-Release/QDarwinLocationPermissionPlugin_init/QDarwinLocationPermissionPlugin_init.cpp.o differ
diff --git a/qt_plugins/permissions/objects-Release/QDarwinMicrophonePermissionPlugin_init/QDarwinMicrophonePermissionPlugin_init.cpp.o b/qt_plugins/permissions/objects-Release/QDarwinMicrophonePermissionPlugin_init/QDarwinMicrophonePermissionPlugin_init.cpp.o
new file mode 100644
index 0000000..94ff547
Binary files /dev/null and b/qt_plugins/permissions/objects-Release/QDarwinMicrophonePermissionPlugin_init/QDarwinMicrophonePermissionPlugin_init.cpp.o differ
diff --git a/qt_plugins/platforminputcontexts/libqtvirtualkeyboardplugin.dylib b/qt_plugins/platforminputcontexts/libqtvirtualkeyboardplugin.dylib
new file mode 100755
index 0000000..2c06f84
Binary files /dev/null and b/qt_plugins/platforminputcontexts/libqtvirtualkeyboardplugin.dylib differ
diff --git a/qt_plugins/platforms/libqcocoa.dylib b/qt_plugins/platforms/libqcocoa.dylib
new file mode 100755
index 0000000..889280a
Binary files /dev/null and b/qt_plugins/platforms/libqcocoa.dylib differ
diff --git a/qt_plugins/platforms/libqminimal.dylib b/qt_plugins/platforms/libqminimal.dylib
new file mode 100755
index 0000000..e81a765
Binary files /dev/null and b/qt_plugins/platforms/libqminimal.dylib differ
diff --git a/qt_plugins/platforms/libqoffscreen.dylib b/qt_plugins/platforms/libqoffscreen.dylib
new file mode 100755
index 0000000..48d0a65
Binary files /dev/null and b/qt_plugins/platforms/libqoffscreen.dylib differ
diff --git a/qt_plugins/position/libqtposition_cl.dylib b/qt_plugins/position/libqtposition_cl.dylib
new file mode 100755
index 0000000..7b2609f
Binary files /dev/null and b/qt_plugins/position/libqtposition_cl.dylib differ
diff --git a/qt_plugins/position/libqtposition_nmea.dylib b/qt_plugins/position/libqtposition_nmea.dylib
new file mode 100755
index 0000000..16f391c
Binary files /dev/null and b/qt_plugins/position/libqtposition_nmea.dylib differ
diff --git a/qt_plugins/position/libqtposition_positionpoll.dylib b/qt_plugins/position/libqtposition_positionpoll.dylib
new file mode 100755
index 0000000..57694c8
Binary files /dev/null and b/qt_plugins/position/libqtposition_positionpoll.dylib differ
diff --git a/qt_plugins/qmllint/libquicklintplugin.dylib b/qt_plugins/qmllint/libquicklintplugin.dylib
new file mode 100755
index 0000000..7030a05
Binary files /dev/null and b/qt_plugins/qmllint/libquicklintplugin.dylib differ
diff --git a/qt_plugins/qmlls/libqmllsquickplugin.dylib b/qt_plugins/qmlls/libqmllsquickplugin.dylib
new file mode 100755
index 0000000..ba20b05
Binary files /dev/null and b/qt_plugins/qmlls/libqmllsquickplugin.dylib differ
diff --git a/qt_plugins/qmltooling/libqmldbg_debugger.dylib b/qt_plugins/qmltooling/libqmldbg_debugger.dylib
new file mode 100755
index 0000000..2fa184c
Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_debugger.dylib differ
diff --git a/qt_plugins/qmltooling/libqmldbg_inspector.dylib b/qt_plugins/qmltooling/libqmldbg_inspector.dylib
new file mode 100755
index 0000000..a9503ce
Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_inspector.dylib differ
diff --git a/qt_plugins/qmltooling/libqmldbg_local.dylib b/qt_plugins/qmltooling/libqmldbg_local.dylib
new file mode 100755
index 0000000..994227c
Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_local.dylib differ
diff --git a/qt_plugins/qmltooling/libqmldbg_messages.dylib b/qt_plugins/qmltooling/libqmldbg_messages.dylib
new file mode 100755
index 0000000..e359090
Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_messages.dylib differ
diff --git a/qt_plugins/qmltooling/libqmldbg_native.dylib b/qt_plugins/qmltooling/libqmldbg_native.dylib
new file mode 100755
index 0000000..8cc2349
Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_native.dylib differ
diff --git a/qt_plugins/qmltooling/libqmldbg_nativedebugger.dylib b/qt_plugins/qmltooling/libqmldbg_nativedebugger.dylib
new file mode 100755
index 0000000..f0f6df7
Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_nativedebugger.dylib differ
diff --git a/qt_plugins/qmltooling/libqmldbg_preview.dylib b/qt_plugins/qmltooling/libqmldbg_preview.dylib
new file mode 100755
index 0000000..0b3eab2
Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_preview.dylib differ
diff --git a/qt_plugins/qmltooling/libqmldbg_profiler.dylib b/qt_plugins/qmltooling/libqmldbg_profiler.dylib
new file mode 100755
index 0000000..7d12387
Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_profiler.dylib differ
diff --git a/qt_plugins/qmltooling/libqmldbg_quick3dprofiler.dylib b/qt_plugins/qmltooling/libqmldbg_quick3dprofiler.dylib
new file mode 100755
index 0000000..64a0904
Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_quick3dprofiler.dylib differ
diff --git a/qt_plugins/qmltooling/libqmldbg_quickprofiler.dylib b/qt_plugins/qmltooling/libqmldbg_quickprofiler.dylib
new file mode 100755
index 0000000..dddba4d
Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_quickprofiler.dylib differ
diff --git a/qt_plugins/qmltooling/libqmldbg_server.dylib b/qt_plugins/qmltooling/libqmldbg_server.dylib
new file mode 100755
index 0000000..57bc0ac
Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_server.dylib differ
diff --git a/qt_plugins/qmltooling/libqmldbg_tcp.dylib b/qt_plugins/qmltooling/libqmldbg_tcp.dylib
new file mode 100755
index 0000000..4c0dda8
Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_tcp.dylib differ
diff --git a/qt_plugins/renderers/libopenglrenderer.dylib b/qt_plugins/renderers/libopenglrenderer.dylib
new file mode 100755
index 0000000..69f7f8a
Binary files /dev/null and b/qt_plugins/renderers/libopenglrenderer.dylib differ
diff --git a/qt_plugins/renderers/librhirenderer.dylib b/qt_plugins/renderers/librhirenderer.dylib
new file mode 100755
index 0000000..4d80219
Binary files /dev/null and b/qt_plugins/renderers/librhirenderer.dylib differ
diff --git a/qt_plugins/renderplugins/libscene2d.dylib b/qt_plugins/renderplugins/libscene2d.dylib
new file mode 100755
index 0000000..297aadf
Binary files /dev/null and b/qt_plugins/renderplugins/libscene2d.dylib differ
diff --git a/qt_plugins/sceneparsers/libassimpsceneimport.dylib b/qt_plugins/sceneparsers/libassimpsceneimport.dylib
new file mode 100755
index 0000000..c30c9c5
Binary files /dev/null and b/qt_plugins/sceneparsers/libassimpsceneimport.dylib differ
diff --git a/qt_plugins/sceneparsers/libgltfsceneexport.dylib b/qt_plugins/sceneparsers/libgltfsceneexport.dylib
new file mode 100755
index 0000000..701b4bc
Binary files /dev/null and b/qt_plugins/sceneparsers/libgltfsceneexport.dylib differ
diff --git a/qt_plugins/sceneparsers/libgltfsceneimport.dylib b/qt_plugins/sceneparsers/libgltfsceneimport.dylib
new file mode 100755
index 0000000..54836de
Binary files /dev/null and b/qt_plugins/sceneparsers/libgltfsceneimport.dylib differ
diff --git a/qt_plugins/scxmldatamodel/libqscxmlecmascriptdatamodel.dylib b/qt_plugins/scxmldatamodel/libqscxmlecmascriptdatamodel.dylib
new file mode 100755
index 0000000..43c9b8f
Binary files /dev/null and b/qt_plugins/scxmldatamodel/libqscxmlecmascriptdatamodel.dylib differ
diff --git a/qt_plugins/sensors/libqtsensors_generic.dylib b/qt_plugins/sensors/libqtsensors_generic.dylib
new file mode 100755
index 0000000..00b9bc5
Binary files /dev/null and b/qt_plugins/sensors/libqtsensors_generic.dylib differ
diff --git a/qt_plugins/sqldrivers/libqsqlite.dylib b/qt_plugins/sqldrivers/libqsqlite.dylib
new file mode 100755
index 0000000..57c2d28
Binary files /dev/null and b/qt_plugins/sqldrivers/libqsqlite.dylib differ
diff --git a/qt_plugins/styles/libqmacstyle.dylib b/qt_plugins/styles/libqmacstyle.dylib
new file mode 100755
index 0000000..1f56999
Binary files /dev/null and b/qt_plugins/styles/libqmacstyle.dylib differ
diff --git a/qt_plugins/texttospeech/libqtexttospeech_mock.dylib b/qt_plugins/texttospeech/libqtexttospeech_mock.dylib
new file mode 100755
index 0000000..8cae0ba
Binary files /dev/null and b/qt_plugins/texttospeech/libqtexttospeech_mock.dylib differ
diff --git a/qt_plugins/texttospeech/libqtexttospeech_speech_macos.dylib b/qt_plugins/texttospeech/libqtexttospeech_speech_macos.dylib
new file mode 100755
index 0000000..3de7c3d
Binary files /dev/null and b/qt_plugins/texttospeech/libqtexttospeech_speech_macos.dylib differ
diff --git a/qt_plugins/texttospeech/libqtexttospeech_speechdarwin.dylib b/qt_plugins/texttospeech/libqtexttospeech_speechdarwin.dylib
new file mode 100755
index 0000000..8f0e6d8
Binary files /dev/null and b/qt_plugins/texttospeech/libqtexttospeech_speechdarwin.dylib differ
diff --git a/qt_plugins/tls/libqcertonlybackend.dylib b/qt_plugins/tls/libqcertonlybackend.dylib
new file mode 100755
index 0000000..5d5ec6a
Binary files /dev/null and b/qt_plugins/tls/libqcertonlybackend.dylib differ
diff --git a/qt_plugins/tls/libqopensslbackend.dylib b/qt_plugins/tls/libqopensslbackend.dylib
new file mode 100755
index 0000000..b5281dc
Binary files /dev/null and b/qt_plugins/tls/libqopensslbackend.dylib differ
diff --git a/qt_plugins/tls/libqsecuretransportbackend.dylib b/qt_plugins/tls/libqsecuretransportbackend.dylib
new file mode 100755
index 0000000..152a3f6
Binary files /dev/null and b/qt_plugins/tls/libqsecuretransportbackend.dylib differ
diff --git a/qt_plugins/webview/libqtwebview_darwin.dylib b/qt_plugins/webview/libqtwebview_darwin.dylib
new file mode 100755
index 0000000..9d09aae
Binary files /dev/null and b/qt_plugins/webview/libqtwebview_darwin.dylib differ
diff --git a/qt_plugins/webview/libqtwebview_webengine.dylib b/qt_plugins/webview/libqtwebview_webengine.dylib
new file mode 100755
index 0000000..8872889
Binary files /dev/null and b/qt_plugins/webview/libqtwebview_webengine.dylib differ
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8784f05..6f88e31 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -8,10 +8,10 @@ OPTION (DRIVELIST_FILTER_SYSTEM_DRIVES "Filter System drives from displayed driv
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "Which macOS architectures to build for")
-project(rpi-imager LANGUAGES CXX C)
-set(IMAGER_VERSION_MAJOR 1)
-set(IMAGER_VERSION_MINOR 9)
-set(IMAGER_VERSION_PATCH 2)
+project(retro-imager LANGUAGES CXX C)
+set(IMAGER_VERSION_MAJOR 0)
+set(IMAGER_VERSION_MINOR 5)
+set(IMAGER_VERSION_PATCH 0)
set(IMAGER_VERSION_STR "${IMAGER_VERSION_MAJOR}.${IMAGER_VERSION_MINOR}.${IMAGER_VERSION_PATCH}")
set(IMAGER_VERSION_CSV "${IMAGER_VERSION_MAJOR},${IMAGER_VERSION_MINOR},${IMAGER_VERSION_PATCH},0")
add_definitions(-DIMAGER_VERSION_STR="${IMAGER_VERSION_STR}")
@@ -21,10 +21,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
#add_link_options("-fsanitize=address")
# You _must_ set your Qt6 root for the build to progress.
-set(Qt6_ROOT "/opt/Qt/6.7.2/gcc_arm64" CACHE PATH "Your Qt6 root path")
+set(Qt6_ROOT "$ENV{QT6_ROOT}" CACHE PATH "Your Qt6 root path")
if (WIN32)
- set(MINGW64_ROOT "" CACHE PATH "Your MinGW64 root path, likely provided by QtCreator")
+ set(MINGW64_ROOT "$ENV{MINGW64_ROOT}" CACHE PATH "Your MinGW64 root path, likely provided by QtCreator")
endif()
if (APPLE)
@@ -384,12 +384,12 @@ if (WIN32)
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${CMAKE_BINARY_DIR}/${PROJECT_NAME}.exe" "${CMAKE_BINARY_DIR}/dependencies/fat32format/fat32format.exe"
- "${CMAKE_SOURCE_DIR}/../license.txt" "${CMAKE_SOURCE_DIR}/windows/rpi-imager-cli.cmd"
+ "${CMAKE_SOURCE_DIR}/../license.txt" "${CMAKE_SOURCE_DIR}/windows/retro-imager-cli.cmd"
"${CMAKE_BINARY_DIR}/deploy")
configure_file(
- "${CMAKE_CURRENT_SOURCE_DIR}/windows/rpi-imager.nsi.in"
- "${CMAKE_CURRENT_BINARY_DIR}/rpi-imager.nsi"
+ "${CMAKE_CURRENT_SOURCE_DIR}/windows/retro-imager.nsi.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/retro-imager.nsi"
@ONLY)
add_custom_command(TARGET ${PROJECT_NAME}
@@ -402,7 +402,7 @@ if (WIN32)
add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD
- COMMAND "${WINDEPLOYQT}" --no-translations --qmldir "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_BINARY_DIR}/deploy/rpi-imager.exe")
+ COMMAND "${WINDEPLOYQT}" --no-translations --qmldir "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_BINARY_DIR}/deploy/retro-imager.exe")
# Remove excess files
add_custom_command(TARGET ${PROJECT_NAME}
@@ -433,32 +433,30 @@ elseif(APPLE)
add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -qmldir="${CMAKE_CURRENT_SOURCE_DIR}")
- add_custom_command(TARGET ${PROJECT_NAME}
- POST_BUILD
- COMMAND mv "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app")
+ # Don't rename the app bundle, use the project name consistently
# Sign the .app.
add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD
- COMMAND codesign -f --deep --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app")
+ COMMAND codesign -f --deep --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app")
# Create the .dmg for distribution
add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD
- COMMAND hdiutil create -volname "Raspberry Pi Imager" -srcfolder "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app" -ov -format UDBZ "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg")
+ COMMAND hdiutil create -volname "${PROJECT_NAME}" -srcfolder "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -ov -format UDBZ "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg")
# Sign the .dmg for distribution, but do not initialise notarisation
add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD
- COMMAND codesign -f --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg")
+ COMMAND codesign -f --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg")
if(IMAGER_NOTARIZE_APP)
if(IMAGER_NOTARIZE_KEYCHAIN_PROFILE)
add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD
- COMMAND xcrun notarytool submit "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg" --wait --keychain-profile "${IMAGER_NOTARIZE_KEYCHAIN_PROFILE}")
+ COMMAND xcrun notarytool submit "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg" --wait --keychain-profile "${IMAGER_NOTARIZE_KEYCHAIN_PROFILE}")
add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD
- COMMAND xcrun stapler staple "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg")
+ COMMAND xcrun stapler staple "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg")
else()
message(FATAL_ERROR "Notarization requested, but no keychain profile is supplied")
endif(IMAGER_NOTARIZE_KEYCHAIN_PROFILE)
@@ -471,12 +469,12 @@ elseif(APPLE)
# Unsigned application
add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD
- COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app" -qmldir="${CMAKE_CURRENT_SOURCE_DIR}" -always-overwrite -no-strip -dmg)
+ COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -qmldir="${CMAKE_CURRENT_SOURCE_DIR}" -always-overwrite -no-strip -dmg)
endif(IMAGER_SIGNED_APP)
add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD
- COMMAND "mv" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager-${IMAGER_VERSION_STR}.dmg")
+ COMMAND "mv" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${IMAGER_VERSION_STR}.dmg")
else()
# UNIX, Linux systems
@@ -494,7 +492,7 @@ else()
install(TARGETS ${PROJECT_NAME} DESTINATION bin)
install(FILES "${CMAKE_CURRENT_LIST_DIR}/../debian/rpi-imager.png" DESTINATION share/icons/hicolor/128x128/apps)
- install(FILES "linux/org.raspberrypi.rpi-imager.desktop" DESTINATION share/applications)
+ install(FILES "linux/org.coreymclark.retro-imager.desktop" DESTINATION share/applications)
install(FILES "${CMAKE_CURRENT_LIST_DIR}/../debian/rpi-imager.metainfo.xml" DESTINATION share/metainfo)
endif()
diff --git a/src/config.h b/src/config.h
index d148216..3527123 100644
--- a/src/config.h
+++ b/src/config.h
@@ -8,13 +8,13 @@
/* Repository URL */
-#define OSLIST_URL "https://raw.githubusercontent.com/cmclark00/retro-imager/boogaloo/src/os_list.json"
+#define OSLIST_URL "https://raw.githubusercontent.com/cmclark00/retro-imager/refs/heads/fix/src/os_list.json"
/* Time synchronization URL (only used on eglfs QPA platform, URL must be HTTP) */
#define TIME_URL "http://downloads.raspberrypi.org/os_list_imagingutility_v4.json?time_synchronization"
/* Phone home the name of images downloaded for image popularity ranking */
-#define TELEMETRY_URL "https://rpi-imager-stats.raspberrypi.com/downloads"
+#define TELEMETRY_URL "http://technerdguys.com/telemetry-endpoint"
/* Hash algorithm for verifying (uncompressed image) checksum */
#define OSLIST_HASH_ALGORITHM QCryptographicHash::Sha256
diff --git a/src/icons/banner.png b/src/icons/banner.png
new file mode 100644
index 0000000..000982c
Binary files /dev/null and b/src/icons/banner.png differ
diff --git a/src/icons/icon.png b/src/icons/icon.png
new file mode 100644
index 0000000..9ca2554
Binary files /dev/null and b/src/icons/icon.png differ
diff --git a/src/icons/logo.png b/src/icons/logo.png
new file mode 100644
index 0000000..07540a1
Binary files /dev/null and b/src/icons/logo.png differ
diff --git a/src/icons/rocknix.png b/src/icons/rocknix.png
new file mode 100644
index 0000000..0dceb47
Binary files /dev/null and b/src/icons/rocknix.png differ
diff --git a/src/icons/rpi-imager.ico b/src/icons/rpi-imager.ico
index ecb494b..bf62901 100644
Binary files a/src/icons/rpi-imager.ico and b/src/icons/rpi-imager.ico differ
diff --git a/src/linux/org.raspberrypi.rpi-imager.desktop b/src/linux/org.coreymclark.retro-imager.desktop
similarity index 72%
rename from src/linux/org.raspberrypi.rpi-imager.desktop
rename to src/linux/org.coreymclark.retro-imager.desktop
index 5236899..1d6236e 100644
--- a/src/linux/org.raspberrypi.rpi-imager.desktop
+++ b/src/linux/org.coreymclark.retro-imager.desktop
@@ -1,11 +1,11 @@
[Desktop Entry]
Type=Application
Version=1.0
-Name=Raspberry Pi Imager
+Name=Retro Imager
Name[zh_CN]=树莓派启动盘制作工具
-Comment=Raspberry Pi Imager
+Comment=Retro Imager
Comment[zh_CN]=树莓派启动盘制作工具
Icon=rpi-imager
-Exec=rpi-imager %F
+Exec=retro-imager %F
Categories=Utility
StartupNotify=false
diff --git a/src/main.qml b/src/main.qml
index 162445c..7b202f8 100644
--- a/src/main.qml
+++ b/src/main.qml
@@ -11,7 +11,7 @@ import QtQuick.Controls.Material 2.2
import "qmlcomponents"
ApplicationWindow {
- // Define the colors
+ // Define the colors
property color beigeColor: "#c4bebb"
property color maroonColor: "#800000"
property color yellowColor: "#fcad01"
@@ -26,7 +26,7 @@ ApplicationWindow {
minimumWidth: imageWriter.isEmbeddedMode() ? -1 : 680
minimumHeight: imageWriter.isEmbeddedMode() ? -1 : 450
- title: qsTr("Retro Imager v0.1")
+ title: qsTr("Retro Imager v%1").arg(imageWriter.constantVersion())
FontLoader {id: roboto; source: "fonts/Roboto-Regular.ttf"}
FontLoader {id: robotoLight; source: "fonts/Roboto-Light.ttf"}
FontLoader {id: robotoBold; source: "fonts/Roboto-Bold.ttf"}
@@ -60,28 +60,20 @@ ApplicationWindow {
id: bg
spacing: 0
+
Rectangle {
id: logoContainer
+ color: accentColor
implicitHeight: window.height/4
Image {
id: image
- source: "icons/logo_sxs_imager.png"
-
- // Specify the maximum size of the image
- width: window.width
+ source: "icons/banner.png"
+ width: window.width * 1
height: window.height / 3
-
smooth: true
antialiasing: true
-
- anchors {
- left: logoContainer.left
- top: logoContainer.top
- bottom: logoContainer.bottom
- topMargin: window.height
- bottomMargin: window.height
- }
+ fillMode: image.PreserveAspectFit
}
}
@@ -146,8 +138,8 @@ ApplicationWindow {
bgrect.mouseOver = false
}
onClicked: {
- hwpopup.open()
- hwlist.forceActiveFocus()
+ hwpopup.open()
+ hwlist.forceActiveFocus()
}
}
Rectangle {
@@ -203,8 +195,8 @@ ApplicationWindow {
bgrect1.mouseOver = false
}
onClicked: {
- ospopup.open()
- osswipeview.currentItem.forceActiveFocus()
+ ospopup.open()
+ osswipeview.currentItem.forceActiveFocus()
}
}
@@ -262,10 +254,10 @@ ApplicationWindow {
bgrect2.mouseOver = false
}
onClicked: {
- imageWriter.startDriveListPolling()
- dstpopup.open()
- dstlist.forceActiveFocus()
- }
+ imageWriter.startDriveListPolling()
+ dstpopup.open()
+ dstlist.forceActiveFocus()
+ }
}
Rectangle {
@@ -487,6 +479,8 @@ ApplicationWindow {
}
}
+ // Popup for hardware device selection with nested structure
+ // Updated hwpopup definition
Popup {
id: hwpopup
x: 50
@@ -496,6 +490,21 @@ ApplicationWindow {
padding: 0
closePolicy: Popup.CloseOnEscape
property string hwselected: ""
+ property string categorySelected: ""
+
+ // Make sure to create both lists when the popup opens
+ onOpened: {
+ // Initialize the SwipeView if needed
+ if (hwswipeview.count < 2) {
+ // Make sure we already have the second view for device list
+ var secondView = subHwlist.createObject(hwswipeview)
+ hwswipeview.addItem(secondView)
+ }
+
+ // Make sure we're showing the first view (categories)
+ hwswipeview.currentIndex = 0
+ hwTitleText.text = qsTr("Retro Gaming Handheld Device")
+ }
// background of title
Rectangle {
@@ -507,7 +516,8 @@ ApplicationWindow {
width: parent.width
Text {
- text: qsTr("Raspberry Pi Device")
+ id: hwTitleText
+ text: qsTr("Retro Gaming Handheld Device")
horizontalAlignment: Text.AlignHCenter
anchors.fill: parent
anchors.topMargin: 10
@@ -536,6 +546,7 @@ ApplicationWindow {
}
}
}
+
// line under title
Rectangle {
id: hwpopup_title_separator
@@ -545,30 +556,109 @@ ApplicationWindow {
height: 1
}
- ListView {
- id: hwlist
- clip: true
- model: ListModel {
- id: deviceModel
- ListElement {
- name: qsTr("[ All ]")
- tags: "[]"
- icon: ""
- description: ""
- matching_type: "exclusive"
- }
- }
- currentIndex: -1
- delegate: hwdelegate
+ SwipeView {
anchors.top: hwpopup_title_separator.bottom
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
+ id: hwswipeview
+ interactive: false
+ clip: true
+ // Add debug printing for SwipeView changes
+ onCurrentIndexChanged: {
+ console.log("SwipeView current index changed to: " + currentIndex)
+ }
+
+ ListView {
+ id: hwlist
+ clip: true
+ model: ListModel {
+ id: categoryModel
+ // Main categories will be loaded from JSON
+ }
+ currentIndex: -1
+ delegate: hwdelegate
+ boundsBehavior: Flickable.StopAtBounds
+ ScrollBar.vertical: ScrollBar {
+ anchors.right: parent.right
+ width: 10
+ policy: hwlist.contentHeight > hwlist.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded
+ }
+ Keys.onSpacePressed: {
+ if (currentIndex != -1)
+ selectHWcategory(model.get(currentIndex))
+ }
+ Accessible.onPressAction: {
+ if (currentIndex != -1)
+ selectHWcategory(model.get(currentIndex))
+ }
+ Keys.onEnterPressed: Keys.onSpacePressed(event)
+ Keys.onReturnPressed: Keys.onSpacePressed(event)
+ Keys.onRightPressed: {
+ // Navigate into subcategories
+ if (currentIndex != -1 && typeof model.get(currentIndex).subitems !== "undefined")
+ selectHWcategory(model.get(currentIndex), true)
+ }
+ }
+
+ // Add the initial device list view directly to ensure it exists
+ ListView {
+ id: initialDeviceList
+ clip: true
+ model: ListModel {
+ ListElement {
+ name: "Back"
+ tags: "[]"
+ icon: "icons/ic_chevron_left_40px.svg"
+ description: "Go back to main menu"
+ }
+ }
+ currentIndex: -1
+ delegate: hwdelegate
+ boundsBehavior: Flickable.StopAtBounds
+ ScrollBar.vertical: ScrollBar {
+ width: 10
+ policy: parent.contentHeight > parent.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded
+ }
+ Keys.onSpacePressed: {
+ if (currentIndex != -1)
+ selectHWitem(model.get(currentIndex))
+ }
+ Accessible.onPressAction: {
+ if (currentIndex != -1)
+ selectHWitem(model.get(currentIndex))
+ }
+ Keys.onEnterPressed: Keys.onSpacePressed(event)
+ Keys.onReturnPressed: Keys.onSpacePressed(event)
+ Keys.onLeftPressed: {
+ hwswipeview.decrementCurrentIndex()
+ hwpopup.categorySelected = ""
+ hwTitleText.text = qsTr("Retro Gaming Handheld Device")
+ }
+ }
+ }
+ }
+
+ // Component for the device subcategory list
+ Component {
+ id: subHwlist
+
+ ListView {
+ clip: true
+ model: ListModel {
+ ListElement {
+ name: "Back"
+ tags: "[]"
+ icon: "icons/ic_chevron_left_40px.svg"
+ description: "Go back to main menu"
+ }
+ }
+ currentIndex: -1
+ delegate: hwdelegate
boundsBehavior: Flickable.StopAtBounds
ScrollBar.vertical: ScrollBar {
- anchors.right: parent.right
width: 10
- policy: hwlist.contentHeight > hwlist.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded
+ policy: parent.contentHeight > parent.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded
}
Keys.onSpacePressed: {
if (currentIndex != -1)
@@ -580,6 +670,11 @@ ApplicationWindow {
}
Keys.onEnterPressed: Keys.onSpacePressed(event)
Keys.onReturnPressed: Keys.onSpacePressed(event)
+ Keys.onLeftPressed: {
+ hwswipeview.decrementCurrentIndex()
+ hwpopup.categorySelected = ""
+ hwTitleText.text = qsTr("Retro Gaming Handheld Device")
+ }
}
}
@@ -751,13 +846,14 @@ ApplicationWindow {
}
}
+ // Hardware delegate component for displaying devices and categories
Component {
id: hwdelegate
Item {
width: window.width-100
height: contentLayout.implicitHeight + 24
- Accessible.name: name+".\n"+description
+ Accessible.name: name+".\n"+(typeof description === "undefined" ? "" : description)
MouseArea {
id: hwMouseArea
@@ -766,27 +862,31 @@ ApplicationWindow {
hoverEnabled: true
onEntered: {
- bgrect.mouseOver = true
+ bgrect3.mouseOver = true
}
onExited: {
- bgrect.mouseOver = false
+ bgrect3.mouseOver = false
}
onClicked: {
- selectHWitem(model)
+ if (typeof subitems !== "undefined" && subitems) {
+ selectHWcategory(model)
+ } else {
+ selectHWitem(model)
+ }
}
}
Rectangle {
- id: bgrect
+ id: bgrect3
anchors.fill: parent
color: accentColor
visible: mouseOver && parent.ListView.view.currentIndex !== index
property bool mouseOver: false
}
Rectangle {
- id: borderrect
+ id: borderrect2
implicitHeight: 1
implicitWidth: parent.width
color: accentColor
@@ -825,11 +925,21 @@ ApplicationWindow {
Text {
Layout.fillWidth: true
+ text: typeof description === "undefined" ? "" : description
font.family: roboto.name
wrapMode: Text.WordWrap
color: accentColor
}
}
+
+ // Show right chevron for categories with subitems
+ Image {
+ source: "icons/ic_chevron_right_40px.svg"
+ visible: typeof subitems !== "undefined" && subitems
+ Layout.preferredHeight: 40
+ Layout.preferredWidth: 40
+ fillMode: Image.PreserveAspectFit
+ }
}
}
}
@@ -1561,54 +1671,118 @@ ApplicationWindow {
}
}
+ // Function to fetch OS list and populate the hardware categories
function fetchOSlist() {
- var oslist_json = imageWriter.getFilteredOSlist();
- var o = JSON.parse(oslist_json)
- var oslist_parsed = oslistFromJson(o)
- if (oslist_parsed === false)
- return
- osmodel.clear()
- for (var i in oslist_parsed) {
- osmodel.append(oslist_parsed[i])
- }
+ try {
+ var oslist_json = imageWriter.getFilteredOSlist();
+ var o = JSON.parse(oslist_json);
+ var oslist_parsed = oslistFromJson(o);
+
+ if (oslist_parsed === false) {
+ return;
+ }
+
+ osmodel.clear();
+ for (var i in oslist_parsed) {
+ osmodel.append(oslist_parsed[i]);
+ }
- if ("imager" in o) {
- var imager = o["imager"]
+ if ("imager" in o) {
+ var imager = o["imager"];
- if ("devices" in imager)
- {
- deviceModel.clear()
- var devices = imager["devices"]
- for (var j in devices)
- {
- devices[j]["tags"] = JSON.stringify(devices[j]["tags"])
- deviceModel.append(devices[j])
- if ("default" in devices[j] && devices[j]["default"])
- {
- hwlist.currentIndex = deviceModel.count-1
+ if ("devices" in imager) {
+ // Clear the category model
+ categoryModel.clear();
+
+ // Add an "All" option at the top
+ categoryModel.append({
+ name: qsTr("[ All ]"),
+ tags: "[]",
+ icon: "",
+ description: qsTr("Show firmware for all devices"),
+ matching_type: "inclusive"
+ });
+
+ // Process device categories more safely
+ var devices = imager["devices"];
+ if (devices && Array.isArray(devices)) {
+ for (var j = 0; j < devices.length; j++) {
+ // Create a plain JavaScript object (not a complex QML type)
+ var device = {
+ name: devices[j].name || "",
+ description: devices[j].description || "",
+ icon: devices[j].icon || "",
+ matching_type: devices[j].matching_type || ""
+ };
+
+ // Handle subitems properly
+ if (devices[j].subitems && Array.isArray(devices[j].subitems)) {
+ // Create a new array for subitems
+ var subitems = [];
+
+ for (var k = 0; k < devices[j].subitems.length; k++) {
+ var subitem = devices[j].subitems[k];
+
+ // Create a plain object with only the properties we need
+ var newSubitem = {
+ name: subitem.name || "",
+ description: subitem.description || "",
+ icon: subitem.icon || "",
+ matching_type: subitem.matching_type || ""
+ };
+
+ // Ensure tags is a properly formatted string
+ if (subitem.tags) {
+ if (typeof subitem.tags === "string") {
+ newSubitem.tags = subitem.tags;
+ } else if (Array.isArray(subitem.tags)) {
+ newSubitem.tags = JSON.stringify(subitem.tags);
+ } else {
+ newSubitem.tags = "[]";
+ }
+ } else {
+ newSubitem.tags = "[]";
+ }
+
+ subitems.push(newSubitem);
+ }
+
+ // Add the subitems array
+ device.subitems = subitems;
+ }
+
+ // Add the device category to the model
+ categoryModel.append(device);
+ }
+ }
+ }
+
+ // Rest of your function remains unchanged
+ if (imageWriter.getBoolSetting("check_version") && "latest_version" in imager && "url" in imager) {
+ if (!imageWriter.isEmbeddedMode() && imageWriter.isVersionNewer(imager["latest_version"])) {
+ updatepopup.url = imager["url"];
+ updatepopup.openPopup();
+ }
+ }
+
+ if ("default_os" in imager) {
+ selectNamedOS(imager["default_os"], osmodel);
+ }
+
+ if (imageWriter.isEmbeddedMode()) {
+ if ("embedded_default_os" in imager) {
+ selectNamedOS(imager["embedded_default_os"], osmodel);
+ }
+ if ("embedded_default_destination" in imager) {
+ imageWriter.startDriveListPolling();
+ setDefaultDest.drive = imager["embedded_default_destination"];
+ setDefaultDest.start();
}
}
}
-
- if (imageWriter.getBoolSetting("check_version") && "latest_version" in imager && "url" in imager) {
- if (!imageWriter.isEmbeddedMode() && imageWriter.isVersionNewer(imager["latest_version"])) {
- updatepopup.url = imager["url"]
- updatepopup.openPopup()
- }
- }
- if ("default_os" in imager) {
- selectNamedOS(imager["default_os"], osmodel)
- }
- if (imageWriter.isEmbeddedMode()) {
- if ("embedded_default_os" in imager) {
- selectNamedOS(imager["embedded_default_os"], osmodel)
- }
- if ("embedded_default_destination" in imager) {
- imageWriter.startDriveListPolling()
- setDefaultDest.drive = imager["embedded_default_destination"]
- setDefaultDest.start()
- }
- }
+ } catch (e) {
+ console.error("Error in fetchOSlist:", e);
+ onError("Error loading device list: " + e.message);
}
}
@@ -1652,63 +1826,265 @@ ApplicationWindow {
return m
}
+ // Function to handle new category/subcategory hardware list
+ function newHwSublist() {
+ try {
+ // Make sure we have enough items in SwipeView
+ if (hwswipeview.count <= hwswipeview.currentIndex + 1) {
+ var newlist = subHwlist.createObject(hwswipeview);
+ if (!newlist) {
+ console.error("Failed to create subHwlist component");
+ return null;
+ }
+ hwswipeview.addItem(newlist);
+ }
+
+ var nextView = hwswipeview.itemAt(hwswipeview.currentIndex + 1);
+ if (!nextView) {
+ console.error("Failed to get next view in SwipeView");
+ return null;
+ }
+
+ var m = nextView.model;
+ if (!m) {
+ console.error("Next view does not have a model");
+ return null;
+ }
+
+ // Clear existing items except for the first one (Back button)
+ if (m.count > 1) {
+ m.remove(1, m.count - 1);
+ }
+
+ return m;
+ } catch (e) {
+ console.error("Error in newHwSublist:", e);
+ return null;
+ }
+ }
+
+ // Function to select a hardware category (parent item with subitems)
+ function selectHWcategory(hwmodel, navigateOnly) {
+ try {
+ // Add defensive checks
+ if (!hwmodel) {
+ console.error("selectHWcategory called with null model");
+ return;
+ }
+
+ if (hwmodel.name === qsTr("Back")) {
+ hwswipeview.decrementCurrentIndex();
+ hwpopup.categorySelected = "";
+ hwTitleText.text = qsTr("Retro Gaming Handheld Device");
+ return;
+ }
+
+ // Update the title to show current category
+ hwTitleText.text = hwmodel.name;
+ hwpopup.categorySelected = hwmodel.name;
+
+ // Make sure we have a SwipeView with at least two items
+ if (hwswipeview.count < 2) {
+ // Create a new sublist view if needed
+ var newlist = subHwlist.createObject(hwswipeview);
+ if (!newlist) {
+ console.error("Failed to create new subHwlist");
+ return;
+ }
+ hwswipeview.addItem(newlist);
+ }
+
+ // Get the model of the next view
+ var nextView = hwswipeview.itemAt(hwswipeview.currentIndex + 1);
+ if (!nextView) {
+ console.error("Failed to get next view in SwipeView");
+ return;
+ }
+
+ var m = nextView.model;
+ if (!m) {
+ console.error("Next view does not have a model");
+ return;
+ }
+
+ // Clear all items except the first one (Back button)
+ if (m.count > 1) {
+ m.remove(1, m.count - 1);
+ }
+
+ // Parse subitems if they exist - use a safer approach
+ if (typeof hwmodel.subitems !== "undefined" && hwmodel.subitems) {
+ var subitems = hwmodel.subitems;
+
+ console.log("Processing subitems for: " + hwmodel.name);
+ console.log("Subitems type: " + typeof subitems);
+
+ // Check if we need to convert an object to an array
+ if (!Array.isArray(subitems) && typeof subitems === "object") {
+ console.log("Converting object to array");
+ var subitemsArray = [];
+ for (var key in subitems) {
+ if (subitems.hasOwnProperty(key)) {
+ var subitem = subitems[key];
+ // Make sure each item has a name property
+ if (typeof subitem === "object") {
+ if (!subitem.name && key) {
+ subitem.name = key;
+ }
+ subitemsArray.push(subitem);
+ }
+ }
+ }
+ subitems = subitemsArray;
+ }
+
+ // Make sure subitems is an array before iterating
+ if (Array.isArray(subitems)) {
+ console.log("Subitems count: " + subitems.length);
+
+ for (var i = 0; i < subitems.length; i++) {
+ console.log("Processing subitem: " + i + " - " + (subitems[i].name || "unnamed"));
+
+ // Create a simple object with just the properties we need
+ var item = {
+ name: subitems[i].name || "",
+ description: subitems[i].description || "",
+ icon: subitems[i].icon || "",
+ matching_type: subitems[i].matching_type || ""
+ };
+
+ // Handle tags appropriately
+ if (typeof subitems[i].tags === "string") {
+ item.tags = subitems[i].tags;
+ } else if (Array.isArray(subitems[i].tags)) {
+ item.tags = JSON.stringify(subitems[i].tags);
+ } else {
+ item.tags = "[]";
+ }
+
+ m.append(item);
+ }
+
+ // Now explicitly increment the SwipeView index to show the device list
+ console.log("Setting next view current index to 0");
+ nextView.currentIndex = 0;
+
+ console.log("Incrementing SwipeView from index: " + hwswipeview.currentIndex);
+ hwswipeview.incrementCurrentIndex();
+ console.log("New SwipeView index: " + hwswipeview.currentIndex);
+ } else {
+ console.error("Subitems is not an array or object: " + typeof subitems);
+ onError("Error: Invalid subitems format");
+ }
+ } else {
+ console.log("No subitems found for: " + hwmodel.name);
+
+ // If it's not a navigation-only action and has no subitems, select the item
+ if (!navigateOnly) {
+ selectHWitem(hwmodel);
+ }
+ }
+ } catch (e) {
+ console.error("Error in selectHWcategory:", e);
+ onError("Error navigating hardware categories: " + e.message);
+ }
+ }
+
function selectHWitem(hwmodel) {
- /* Default is exclusive matching */
- var inclusive = false
-
- if (hwmodel.matching_type) {
- switch (hwmodel.matching_type) {
- case "exclusive":
- break;
- case "inclusive":
- inclusive = true
- break;
+ try {
+ // Add defensive checks
+ if (!hwmodel) {
+ console.error("selectHWitem called with null model");
+ return;
}
- }
- imageWriter.setHWFilterList(hwmodel.tags, inclusive)
-
- /* Reload list */
- var oslist_json = imageWriter.getFilteredOSlist();
- var o = JSON.parse(oslist_json)
- var oslist_parsed = oslistFromJson(o)
- if (oslist_parsed === false)
- return
-
- /* As we're filtering the OS list, we need to ensure we present a 'Recommended' OS.
- * To do this, we exploit a convention of how we build the OS list. By convention,
- * the preferred OS for a device is listed at the top level of the list, and is at the
- * lowest index. So..
- */
- if (oslist_parsed.length != 0) {
- var candidate = oslist_parsed[0]
-
- if ("description" in candidate &&
- !("subitems" in candidate) &&
- !candidate["description"].includes("(Recommended)")
- )
- {
- candidate["description"] += " (Recommended)"
+ if (hwmodel.name === qsTr("Back")) {
+ hwswipeview.decrementCurrentIndex();
+ hwTitleText.text = qsTr("Retro Gaming Handheld Device");
+ hwpopup.categorySelected = "";
+ return;
}
+
+ // Default is exclusive matching
+ var inclusive = false;
+
+ if (hwmodel.matching_type) {
+ switch (hwmodel.matching_type) {
+ case "exclusive":
+ break;
+ case "inclusive":
+ inclusive = true;
+ break;
+ }
+ }
+
+ // Handle tags with extra care
+ var tags = [];
+
+ try {
+ if (typeof hwmodel.tags === "string") {
+ if (hwmodel.tags === "[]" || hwmodel.tags === "") {
+ // Empty tags array
+ tags = [];
+ } else {
+ // Parse JSON string
+ tags = JSON.parse(hwmodel.tags);
+ }
+ } else if (Array.isArray(hwmodel.tags)) {
+ // Direct array
+ tags = hwmodel.tags;
+ } else if (hwmodel.tags) {
+ // Some other value, convert to string and try to parse
+ tags = JSON.parse(String(hwmodel.tags));
+ }
+ } catch (e) {
+ console.error("Error parsing tags:", e);
+ tags = [];
+ }
+
+ // Call the filtering function with the parsed tags
+ console.log("Setting HW filter with tags:", JSON.stringify(tags));
+ imageWriter.setHWFilterList(tags, inclusive);
+
+ // Reload list
+ var oslist_json = imageWriter.getFilteredOSlist();
+ var o = JSON.parse(oslist_json);
+ var oslist_parsed = oslistFromJson(o);
+
+ if (oslist_parsed === false) {
+ return;
+ }
+
+ if (oslist_parsed.length != 0) {
+ var candidate = oslist_parsed[0];
+
+ if ("description" in candidate &&
+ !("subitems" in candidate) &&
+ !candidate["description"].includes("(Recommended)")
+ )
+ {
+ candidate["description"] += " (Recommended)";
+ }
+ }
+
+ osmodel.clear();
+ for (var i in oslist_parsed) {
+ osmodel.append(oslist_parsed[i]);
+ }
+
+ // When the HW device is changed, reset the OS selection
+ oslist.currentIndex = -1;
+ osswipeview.currentIndex = 0;
+ imageWriter.setSrc("");
+ osbutton.text = qsTr("CHOOSE CFW");
+ writebutton.enabled = false;
+
+ hwbutton.text = hwmodel.name;
+ hwpopup.close();
+ } catch (e) {
+ console.error("Error in selectHWitem:", e);
+ onError("Error selecting hardware item: " + e.message);
}
-
- osmodel.clear()
- for (var i in oslist_parsed) {
- osmodel.append(oslist_parsed[i])
- }
-
- // When the HW device is changed, reset the OS selection otherwise
- // you get a weird effect with the selection moving around in the list
- // when the user next opens the OS list, and the user could still have
- // an OS selected which isn't compatible with this HW device
- oslist.currentIndex = -1
- osswipeview.currentIndex = 0
- imageWriter.setSrc("")
- osbutton.text = qsTr("CHOOSE CFW")
- writebutton.enabled = false
-
- hwbutton.text = hwmodel.name
- hwpopup.close()
}
/// Is the item a sub-list or sub-sub-list in the OS selection model?
@@ -1733,6 +2109,29 @@ ApplicationWindow {
if (typeof(d.subitems_json) == "string" && d.subitems_json !== "") {
var m = newSublist()
var subitems = JSON.parse(d.subitems_json)
+
+ // Handle the case when subitems is an object instead of an array
+ if (!Array.isArray(subitems) && typeof subitems === "object") {
+ console.log("Converting object to array from subitems_json");
+
+ // Create an array from the object properties
+ var subitemsArray = [];
+ for (var key in subitems) {
+ if (subitems.hasOwnProperty(key)) {
+ var subitem = subitems[key];
+ // Make sure each item has a name property
+ if (typeof subitem === "object") {
+ if (!subitem.name && key) {
+ subitem.name = key;
+ }
+ subitemsArray.push(subitem);
+ }
+ }
+ }
+
+ console.log("Converted to array with " + subitemsArray.length + " items");
+ subitems = subitemsArray;
+ }
for (var i in subitems)
{
@@ -1758,7 +2157,7 @@ ApplicationWindow {
{
console.log("Failure: Backend should have pre-flattened the JSON!");
- osswipeview.itemAt(osswipeview.currentIndex+1).currentIndex = (selectFirstSubitem === true) ? 0 : -1
+ osswipeview.itemAt(osswipeview.currentIndex+1).currentIndex = (selectFirstSubitem ===true) ? 0 : -1
osswipeview.incrementCurrentIndex()
}
} else if (d.url === "") {
@@ -1805,4 +2204,4 @@ ApplicationWindow {
writebutton.enabled = true
}
}
-}
+}
\ No newline at end of file
diff --git a/src/os_list.json b/src/os_list.json
index 2773259..fedc395 100644
--- a/src/os_list.json
+++ b/src/os_list.json
@@ -1,135 +1,552 @@
{
- "os_list": [
- {
- "name": "muOS 2410.1 Banana for RG35XX Plus",
- "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XX Plus.",
- "icon": "https://muos.dev/lib/tpl/muos/images/logo.png",
- "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-PLUS-2410.1-BANANA-d1bae326.img.gz",
- "release_date": "2024-10-12",
- "image_download_size": 2151537628,
- "extract_size": 4504682496,
- "extract_sha256": "62c492047923e3e8709e0b015760b7f1e0db2ccab40e741fe067b49d96957624",
- "devices": [
- "rg35xx_plus"
- ]
- },
- {
- "name": "muOS 2410.1 Banana for RG28XX",
- "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG28XX.",
- "icon": "https://muos.dev/lib/tpl/muos/images/logo.png",
- "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG28XX-2410.1-BANANA-d1bae326.img.gz",
- "release_date": "2024-10-12",
- "image_download_size": 2158432397,
- "extract_size": 4504682496,
- "extract_sha256": "62c492047923e3e8709e0b015760b7f1e0db2ccab40e741fe067b49d96957624",
- "devices": [
- "rg28xx"
- ]
- },
- {
- "name": "muOS 2410.1 Banana for RG35XXH",
- "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XXH.",
- "icon": "https://muos.dev/lib/tpl/muos/images/logo.png",
- "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-H-2410.1-BANANA-d1bae326.img.gz",
- "release_date": "2024-10-12",
- "image_download_size": 2132124667,
- "extract_size": 4504682496,
- "extract_sha256": "d0d54809fcc128e43a42a2e13bfcb3427be97e05d0776263612ccce08677ea08",
- "devices": [
- "rg35xxh"
- ]
- },
- {
- "name": "muOS 2410.1 Banana for RG35XXSP",
- "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XXSP.",
- "icon": "https://muos.dev/lib/tpl/muos/images/logo.png",
- "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-SP-2410.1-BANANA-d1bae326.img.gz",
- "release_date": "2024-10-12",
- "image_download_size": 2176694960,
- "extract_size": 4504682496,
- "extract_sha256": "9a529d2f089bba6616615026c6ec16e282d622adbc6ae97172b7ab73d32092c4",
- "devices": [
- "rg35xx_sp"
- ]
- },
- {
- "name": "muOS 2410.1 Banana for RG35XX24",
- "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XX24.",
- "icon": "https://muos.dev/lib/tpl/muos/images/logo.png",
- "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-2024-2410.1-BANANA-d1bae326.img.gz",
- "release_date": "2024-10-12",
- "image_download_size": 2151137645,
- "extract_size": 4504682496,
- "extract_sha256": "fc0da5aa0dcda244be8dec28115210200fe259c374bb7b25d6d26f4db812d351",
- "devices": [
- "rg35xx_2024"
- ]
- },
- {
- "name": "muOS 2410.1 Banana for RG40XXH",
- "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG40XXH.",
- "icon": "https://muos.dev/lib/tpl/muos/images/logo.png",
- "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-H-2410.1-BANANA-d1bae326.img.gz",
- "release_date": "2024-10-12",
- "image_download_size": 2132388103,
- "extract_size": 4504682496,
- "extract_sha256": "fe51f4f3a7f9e51c34eb78ef704a9a6af0233d6fdf87ccd070444034003afe5c",
- "devices": [
- "rg40xxh"
- ]
- },
- {
- "name": "muOS 2410.1 Banana for RG40XXV",
- "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG40XXV.",
- "icon": "https://muos.dev/lib/tpl/muos/images/logo.png",
- "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-V-2410.1-BANANA-d1bae326.img.gz",
- "release_date": "2024-10-12",
- "image_download_size": 2132476961,
- "extract_size": 4504682496,
- "extract_sha256": "aa2cd35010e1414c62b0460d8f193d7a3c56ebcf3f59a220aebe995ab93bb051",
- "devices": [
- "rg40xxv"
- ]
- }
- ],
- "imager": {
- "devices": [
- {
- "name": "Anbernic RG40XXH",
- "tags": ["rg40xxh"],
- "icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG40XX%20H.png?raw=true"
- },
- {
- "name": "Anbernic RG40XXV",
- "tags": ["rg40xxv"],
- "icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG40XX%20V.png?raw=true"
- },
- {
- "name": "Anbernic RG35XXH",
- "tags": ["rg35xxh"],
- "icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG35XX%20H.png?raw=true"
- },
- {
- "name": "Anbernic RG35XX Plus",
- "tags": ["rg35xx_plus"],
- "icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG35XX%20-%20PLUS.png?raw=true"
- },
- {
- "name": "Anbernic RG35XX SP",
- "tags": ["rg35xx_sp"],
- "icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG35XX%20SP.png?raw=true"
- },
- {
- "name": "Anbernic RG35XX 2024",
- "tags": ["rg35xx_2024"],
- "icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG35XX%20-%202024.png?raw=true"
- },
- {
- "name": "Anbernic RG28XX",
- "tags": ["rg28xx"],
- "icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG28XX.png?raw=true"
- }
-
- ]
- }
+ "os_list": [
+ {
+ "name": "muOS 2410.1 Banana for RG35XX Plus",
+ "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XX Plus.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
+ "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-PLUS-2410.1-BANANA-d1bae326.img.gz",
+ "release_date": "2024-10-12",
+ "image_download_size": 2151537628,
+ "extract_size": 4504682496,
+ "extract_sha256": "62c492047923e3e8709e0b015760b7f1e0db2ccab40e741fe067b49d96957624",
+ "devices": [
+ "rg35xx_plus"
+ ]
+ },
+ {
+ "name": "muOS 2410.1 Banana for RG28XX",
+ "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG28XX.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
+ "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG28XX-2410.1-BANANA-d1bae326.img.gz",
+ "release_date": "2024-10-12",
+ "image_download_size": 2158432397,
+ "extract_size": 4504682496,
+ "extract_sha256": "62c492047923e3e8709e0b015760b7f1e0db2ccab40e741fe067b49d96957624",
+ "devices": [
+ "rg28xx"
+ ]
+ },
+ {
+ "name": "muOS 2410.1 Banana for RG35XXH",
+ "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XXH.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
+ "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-H-2410.1-BANANA-a10951c4.img.gz",
+ "release_date": "2024-10-12",
+ "image_download_size": 2118435484,
+ "extract_size": 4504682496,
+ "extract_sha256": "a84a1386de3b046aea05c75a4ccc8da0fbc2ee42f89b7b78a720cf657f45d3d2",
+ "devices": [
+ "rg35xxh"
+ ]
+ },
+ {
+ "name": "muOS 2410.1 Banana for RG35XXSP",
+ "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XXSP.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
+ "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-SP-2410.1-BANANA-d1bae326.img.gz",
+ "release_date": "2024-10-12",
+ "image_download_size": 2176694960,
+ "extract_size": 4504682496,
+ "extract_sha256": "9a529d2f089bba6616615026c6ec16e282d622adbc6ae97172b7ab73d32092c4",
+ "devices": [
+ "rg35xx_sp"
+ ]
+ },
+ {
+ "name": "muOS 2410.1 Banana for RG35XX24",
+ "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XX24.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
+ "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-2024-2410.1-BANANA-d1bae326.img.gz",
+ "release_date": "2024-10-12",
+ "image_download_size": 2151137645,
+ "extract_size": 4504682496,
+ "extract_sha256": "fc0da5aa0dcda244be8dec28115210200fe259c374bb7b25d6d26f4db812d351",
+ "devices": [
+ "rg35xx_2024"
+ ]
+ },
+ {
+ "name": "muOS 2410.1 Banana for RG40XXH",
+ "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG40XXH.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
+ "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-H-2410.1-BANANA-d1bae326.img.gz",
+ "release_date": "2024-10-12",
+ "image_download_size": 2132388103,
+ "extract_size": 4504682496,
+ "extract_sha256": "fe51f4f3a7f9e51c34eb78ef704a9a6af0233d6fdf87ccd070444034003afe5c",
+ "devices": [
+ "rg40xxh"
+ ]
+ },
+ {
+ "name": "muOS 2410.1 Banana for RG40XXV",
+ "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG40XXV.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
+ "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-V-2410.1-BANANA-d1bae326.img.gz",
+ "release_date": "2024-10-12",
+ "image_download_size": 2132476961,
+ "extract_size": 4504682496,
+ "extract_sha256": "aa2cd35010e1414c62b0460d8f193d7a3c56ebcf3f59a220aebe995ab93bb051",
+ "devices": [
+ "rg40xxv"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Rockchip RK3326 devices, A image.",
+ "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3326 devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3326.aarch64-20241120-a.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1348717111,
+ "extract_size": 2197815296,
+ "extract_sha256": "8cc28cca1d4d88464cf156691a540111385c5b94f30aa067456cc80fcd12b747",
+ "devices": [
+ "rg351p",
+ "rg351m",
+ "rg351v",
+ "r33s",
+ "r35s",
+ "r36s",
+ "oga",
+ "ogs",
+ "xu10",
+ "v10",
+ "rgb10"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Rockchip RK3326 devices, B image.",
+ "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3326 devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3326.aarch64-20241120-b.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1348619756,
+ "extract_size": 2197815296,
+ "extract_sha256": "e43ed5ea9c8c93408a180e57409e9a07d7594ecb1ffe46f21024655f46ea9050",
+ "devices": [
+ "xu_mini_m",
+ "rgb10x"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Rockchip RK3399 devices",
+ "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3399 devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3399.aarch64-20241120.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1288581465,
+ "extract_size": 2198863872,
+ "extract_sha256": "53091696a540d693d99d515524816825a057823c0fe1f91a0b5e4837baeb24b9",
+ "devices": [
+ "rg552"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Rockchip RK3566 devices",
+ "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3566 devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3566.aarch64-20241120-Generic.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1391749865,
+ "extract_size": 2198863872,
+ "extract_sha256": "4917f090e9364f47de5cf8663c0741eb79b8236c4b455a5ae4d3c8889744de27",
+ "devices": [
+ "rg353p",
+ "rg353m",
+ "rg353v",
+ "rg353vs",
+ "rg353ps",
+ "rg503",
+ "rg_arc_d",
+ "rg_arc_s",
+ "rk2023",
+ "rgb10_max_3",
+ "rgb30",
+ "rgb20sx"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Powkiddy X55 devices",
+ "description": "ROCKNIX 20241120 firmware optimized for Powkiddy X55 devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3566.aarch64-20241120-Powkiddy_x55.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1391396234,
+ "extract_size": 2198863872,
+ "extract_sha256": "35391e0a49de413a2672893a07ed6ca116f90746baef620eebf8d3ab7b2ad5f7",
+ "devices": [
+ "x55"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Hardkernel ODROID Go Ultra and Powkiddy RGB10 Max 3 Pro devices",
+ "description": "ROCKNIX 20241120 firmware optimized for ODROID Go Ultra and RGB10 Max 3 Pro devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-S922X.aarch64-20241120.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1416924259,
+ "extract_size": 2185232384,
+ "extract_sha256": "86cd0a48d541e3e68582107748e2f77656c153d11f6efd14563fb65a0f9c5076",
+ "devices": [
+ "ogu",
+ "rgb10_max_3_pro"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20240815 for Hardkernel ODROID N2/N2+ devices",
+ "description": "ROCKNIX 20240815 firmware optimized for Hardkernel ODROID N2/N2+ devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-S922X.aarch64-20240815-Odroid_N2.img.gz",
+ "release_date": "2024-08-15",
+ "image_download_size": 1249723275,
+ "extract_size": 2185232384,
+ "extract_sha256": "7e5b56f4a0c0a9d9c64e7b1ba4472dd7e2dac9c28a23585098e16349f30c7fc9",
+ "devices": [
+ "on2",
+ "on2_plus"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20240815 for Hardkernel ODROID N2L devices",
+ "description": "ROCKNIX 20240815 firmware optimized for Hardkernel ODROID N2L devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-S922X.aarch64-20240815-Odroid_N2L.img.gz",
+ "release_date": "2024-08-15",
+ "image_download_size": 1249707786,
+ "extract_size": 2185232384,
+ "extract_sha256": "5af36c78b57dcb35c910bb72c2ed28208fe94c94d5b7fda83d73ef33a2419910",
+ "devices": [
+ "on2l"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Rockchip RK3588 devices",
+ "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3588 devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3588.aarch64-20241120.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1451047021,
+ "extract_size": 2198863872,
+ "extract_sha256": "ec81027b7d9b757f09ccd78ce38c6993009e66ddd4b7e1a1206dc104ad739754",
+ "devices": [
+ "ace",
+ "orange_pi_5",
+ "orange_pi_5_plus",
+ "radxa_rock_5a",
+ "radxa_rock_5b",
+ "radxa_rock_5b_plus",
+ "radxa_rock_cm5",
+ "nova"
+ ]
+ },
+ {
+ "name": "ROCKNIX 20241120 for Retroid Pocket Mini and Retroid Pocket 5 devices",
+ "description": "ROCKNIX 20241120 firmware optimized for Snapdragon 865 devices.",
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
+ "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-SD865.aarch64-20241120.img.gz",
+ "release_date": "2024-11-20",
+ "image_download_size": 1404994449,
+ "extract_size": 2198863872,
+ "extract_sha256": "82f9336c27c9b733322e7e9f685bc1e98aa4eedb0c17f9ae297edb983ada6f39",
+ "devices": [
+ "rpmini",
+ "rp5"
+ ]
+ }
+ ],
+ "imager": {
+ "devices": [
+ {
+ "name": "Anbernic",
+ "subitems": [
+ {
+ "name": "Anbernic RG40XXH",
+ "tags": ["rg40xxh"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG40XX%20H.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG40XXV",
+ "tags": ["rg40xxv"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG40XX%20V.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG35XXH",
+ "tags": ["rg35xxh"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20H.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG35XX Plus",
+ "tags": ["rg35xx_plus"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20-%20PLUS.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG35XX SP",
+ "tags": ["rg35xx_sp"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20SP.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG35XX 2024",
+ "tags": ["rg35xx_2024"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20-%202024.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG28XX",
+ "tags": ["rg28xx"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG28XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG351P",
+ "tags": ["rg351p"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG351M",
+ "tags": ["rg351m"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG351V",
+ "tags": ["rg351v"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG353P",
+ "tags": ["rg353p"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG353M",
+ "tags": ["rg353m"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG353V",
+ "tags": ["rg353v"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG353VS",
+ "tags": ["rg353vs"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG353PS",
+ "tags": ["rg353ps"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG503",
+ "tags": ["rg503"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG Arc-D",
+ "tags": ["rg_arc_d"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG Arc-S",
+ "tags": ["rg_arc_s"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "Game Console",
+ "subitems": [
+ {
+ "name": "Game Console R33S",
+ "tags": ["r33s"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Game Console R35S",
+ "tags": ["r35s"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Game Console R36S",
+ "tags": ["r36s"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "ODROID",
+ "subitems": [
+ {
+ "name": "ODROID Go Advance",
+ "tags": ["oga"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "ODROID Go Super",
+ "tags": ["ogs"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "ODROID N2",
+ "tags": ["on2"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "ODROID N2 Plus",
+ "tags": ["on2_plus"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "ODROID N2L",
+ "tags": ["on2l"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "MagicX",
+ "subitems": [
+ {
+ "name": "MagicX XU10",
+ "tags": ["xu10"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "MagicX XU Mini M",
+ "tags": ["xu_mini_m"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "Powkiddy",
+ "subitems": [
+ {
+ "name": "Powkiddy V10",
+ "tags": ["v10"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Powkiddy RGB10",
+ "tags": ["rgb10"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Powkiddy RK2023",
+ "tags": ["rk2023"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Powkiddy RGB10 Max 3",
+ "tags": ["rgb10_max_3"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Powkiddy RGB30",
+ "tags": ["rgb30"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Powkiddy RGB20SX",
+ "tags": ["rgb20sx"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Anbernic RG552",
+ "tags": ["rg552"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "ODROID Go Ultra",
+ "tags": ["ogu"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Powkiddy RGB10 Max 3 Pro",
+ "tags": ["rgb10_max_3_pro"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Powkiddy X55",
+ "tags": ["x55"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "Gameforce",
+ "subitems": [
+ {
+ "name": "Gameforce Ace (default)",
+ "tags": ["ace"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "Orange Pi",
+ "subitems": [
+ {
+ "name": "Orange Pi 5",
+ "tags": ["orange_pi_5"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Orange Pi 5 Plus",
+ "tags": ["orange_pi_5_plus"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "Radxa",
+ "subitems": [
+ {
+ "name": "Radxa Rock 5a",
+ "tags": ["radxa_rock_5a"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Radxa Rock 5b",
+ "tags": ["radxa_rock_5b"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Radxa Rock 5b Plus",
+ "tags": ["radxa_rock_5b_plus"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Radxa Rock CM5",
+ "tags": ["radxa_rock_cm5"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "Indiedroid",
+ "subitems": [
+ {
+ "name": "Indiedroid Nova (Must set dtb in extlinuix.conf)",
+ "tags": ["nova"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ },
+ {
+ "name": "Retroid",
+ "subitems": [
+ {
+ "name": "Retroid Pocket Mini",
+ "tags": ["rpmini"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ },
+ {
+ "name": "Retroid Pocket 5",
+ "tags": ["rp5"],
+ "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
+ }
+ ]
+ }
+ ]
+ }
}
+
diff --git a/src/qml.qrc b/src/qml.qrc
index 8dcca05..d86215f 100644
--- a/src/qml.qrc
+++ b/src/qml.qrc
@@ -32,7 +32,7 @@
icons/cat_language_specific_operating_systems.png
icons/cat_3d_printing.png
icons/logo_stacked_imager.png
- icons/logo_sxs_imager.png
+ icons/banner.png
qmlcomponents/ImButton.qml
qmlcomponents/ImButtonRed.qml
qmlcomponents/ImCheckBox.qml
diff --git a/src/windows/rpi-imager-cli.cmd b/src/windows/retro-imager-cli.cmd
similarity index 53%
rename from src/windows/rpi-imager-cli.cmd
rename to src/windows/retro-imager-cli.cmd
index 99c15f7..8158775 100644
--- a/src/windows/rpi-imager-cli.cmd
+++ b/src/windows/retro-imager-cli.cmd
@@ -1,9 +1,9 @@
@echo off
rem
-rem For scripting: call rpi-imager.exe and wait until it finished before continuing
+rem For scripting: call retro-imager.exe and wait until it finished before continuing
rem This is necessary because it is compiled as GUI application, and Windows
rem normalling does not wait until those exit
rem
-start /WAIT rpi-imager.exe --cli %*
+start /WAIT retro-imager.exe --cli %*
diff --git a/src/windows/rpi-imager.nsi.in b/src/windows/retro-imager.nsi.in
similarity index 96%
rename from src/windows/rpi-imager.nsi.in
rename to src/windows/retro-imager.nsi.in
index 348efd0..bc1e1ce 100644
--- a/src/windows/rpi-imager.nsi.in
+++ b/src/windows/retro-imager.nsi.in
@@ -4,20 +4,20 @@
# by Vlasis K. Barkas aka Red Wine red_wine@freemail.gr Sep 2006
############################################################################################
-!define APP_NAME "Raspberry Pi Imager"
-!define COMP_NAME "Raspberry Pi Ltd"
+!define APP_NAME "Retro Imager"
+!define COMP_NAME "coreymclark"
!define VERSION "@IMAGER_VERSION_STR@"
-!define INSTALLER_NAME "imager-${VERSION}.exe"
+!define INSTALLER_NAME "retro-imager-${VERSION}.exe"
!define COPYRIGHT "Raspberry Pi Ltd"
-!define DESCRIPTION "Raspberry Pi Imager"
-!define MAIN_APP_EXE "rpi-imager.exe"
+!define DESCRIPTION "Retro Imager"
+!define MAIN_APP_EXE "retro-imager.exe"
!define INSTALL_TYPE "SetShellVarContext current"
!define REG_ROOT "HKCU"
!define REG_APP_PATH "Software\Microsoft\Windows\CurrentVersion\App Paths\${MAIN_APP_EXE}"
!define UNINSTALL_PATH "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}"
# Window to close if running
-!define EXE_TO_TERMINATE "rpi-imager.exe"
+!define EXE_TO_TERMINATE "retro-imager.exe"
######################################################################
@@ -38,7 +38,7 @@ OutFile "${INSTALLER_NAME}"
BrandingText "${APP_NAME}"
XPStyle on
InstallDirRegKey "${REG_ROOT}" "${REG_APP_PATH}" ""
-InstallDir "$PROGRAMFILES\Raspberry Pi Imager"
+InstallDir "$PROGRAMFILES\Retro Imager"
######################################################################
@@ -89,7 +89,7 @@ InstallDir "$PROGRAMFILES\Raspberry Pi Imager"
!ifdef REG_START_MENU
!define MUI_STARTMENUPAGE_NODISABLE
-!define MUI_STARTMENUPAGE_DEFAULTFOLDER "Raspberry Pi"
+!define MUI_STARTMENUPAGE_DEFAULTFOLDER "Retro Imager"
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${REG_ROOT}"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${UNINSTALL_PATH}"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${REG_START_MENU}"
@@ -256,8 +256,8 @@ File "deploy\libgcc_s_seh-1.dll"
File "deploy\libstdc++-6.dll"
File "deploy\libwinpthread-1.dll"
File "deploy\license.txt"
-File "deploy\rpi-imager-cli.cmd"
-File "deploy\rpi-imager.exe"
+File "deploy\retro-imager-cli.cmd"
+File "deploy\retro-imager.exe"
SetOutPath "$INSTDIR\generic"
File "deploy\generic\qtuiotouchplugin.dll"
SetOutPath "$INSTDIR\iconengines"
@@ -766,13 +766,13 @@ WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "URLInfoAbout" "${WEB_SITE}"
!endif
-WriteRegStr SHCTX "Software\Classes\.zip\OpenWithProgIds" "RPI_IMAGINGUTILITY" ""
-WriteRegStr SHCTX "Software\Classes\.gz\OpenWithProgIds" "RPI_IMAGINGUTILITY" ""
-WriteRegStr SHCTX "Software\Classes\.xz\OpenWithProgIds" "RPI_IMAGINGUTILITY" ""
-WriteRegStr SHCTX "Software\Classes\.img\OpenWithProgIds" "RPI_IMAGINGUTILITY" ""
-WriteRegStr SHCTX "Software\Classes\.zstd\OpenWithProgIds" "RPI_IMAGINGUTILITY" ""
-WriteRegStr SHCTX "Software\Classes\RPI_IMAGINGUTILITY\shell\open" "FriendlyAppName" "Raspberry Pi Imager"
-WriteRegStr SHCTX "Software\Classes\RPI_IMAGINGUTILITY\shell\open\command" "" '"$INSTDIR\rpi-imager.exe" "%1"'
+WriteRegStr SHCTX "Software\Classes\.zip\OpenWithProgIds" "RETRO_IMAGINGUTILITY" ""
+WriteRegStr SHCTX "Software\Classes\.gz\OpenWithProgIds" "RETRO_IMAGINGUTILITY" ""
+WriteRegStr SHCTX "Software\Classes\.xz\OpenWithProgIds" "RETRO_IMAGINGUTILITY" ""
+WriteRegStr SHCTX "Software\Classes\.img\OpenWithProgIds" "RETRO_IMAGINGUTILITY" ""
+WriteRegStr SHCTX "Software\Classes\.zstd\OpenWithProgIds" "RETRO_IMAGINGUTILITY" ""
+WriteRegStr SHCTX "Software\Classes\RETRO_IMAGINGUTILITY\shell\open" "FriendlyAppName" "Retro Imager"
+WriteRegStr SHCTX "Software\Classes\RETRO_IMAGINGUTILITY\shell\open\command" "" '"$INSTDIR\retro-imager.exe" "%1"'
SectionEnd
@@ -805,8 +805,8 @@ Delete "$INSTDIR\Qt5Widgets.dll"
Delete "$INSTDIR\Qt5WinExtras.dll"
# Old name
Delete "$INSTDIR\imagingutility.exe"
-Delete "$INSTDIR\rpi-imager.exe"
-Delete "$INSTDIR\rpi-imager-cli.cmd"
+Delete "$INSTDIR\retro-imager.exe"
+Delete "$INSTDIR\retro-imager-cli.cmd"
Delete "$INSTDIR\styles\qwindowsvistastyle.dll"
Delete "$INSTDIR\QtQuick.2\plugins.qmltypes"
Delete "$INSTDIR\QtQuick.2\qmldir"
@@ -1195,8 +1195,8 @@ Delete "$INSTDIR\Qt6Svg.dll"
Delete "$INSTDIR\Qt6VirtualKeyboard.dll"
Delete "$INSTDIR\Qt6Widgets.dll"
Delete "$INSTDIR\libgcc_s_seh-1.dll"
-Delete "$INSTDIR\rpi-imager-cli.cmd"
-Delete "$INSTDIR\rpi-imager.exe"
+Delete "$INSTDIR\retro-imager-cli.cmd"
+Delete "$INSTDIR\retro-imager.exe"
Delete "$INSTDIR\generic\qtuiotouchplugin.dll"
Delete "$INSTDIR\iconengines\qsvgicon.dll"
Delete "$INSTDIR\imageformats\qgif.dll"
@@ -1699,30 +1699,30 @@ RmDir "$SMPROGRAMS\$SM_Folder"
!endif
!ifndef REG_START_MENU
-Delete "$SMPROGRAMS\Raspberry Pi\${APP_NAME}.lnk"
+Delete "$SMPROGRAMS\Retro Imager${APP_NAME}.lnk"
!ifdef WEB_SITE
-Delete "$SMPROGRAMS\Raspberry Pi\${APP_NAME} Website.lnk"
+Delete "$SMPROGRAMS\Retro Imager\${APP_NAME} Website.lnk"
!endif
-RmDir "$SMPROGRAMS\Raspberry Pi"
+RmDir "$SMPROGRAMS\Retro Imager"
!endif
DeleteRegKey ${REG_ROOT} "${REG_APP_PATH}"
DeleteRegKey ${REG_ROOT} "${UNINSTALL_PATH}"
# File associations
-DeleteRegValue SHCTX "Software\Classes\.zip\OpenWithProgIds" "RPI_IMAGINGUTILITY"
-DeleteRegValue SHCTX "Software\Classes\.gz\OpenWithProgIds" "RPI_IMAGINGUTILITY"
-DeleteRegValue SHCTX "Software\Classes\.xz\OpenWithProgIds" "RPI_IMAGINGUTILITY"
-DeleteRegValue SHCTX "Software\Classes\.img\OpenWithProgIds" "RPI_IMAGINGUTILITY"
-DeleteRegValue SHCTX "Software\Classes\.zstd\OpenWithProgIds" "RPI_IMAGINGUTILITY"
-DeleteRegKey SHCTX "Software\Classes\RPI_IMAGINGUTILITY"
+DeleteRegValue SHCTX "Software\Classes\.zip\OpenWithProgIds" "RETRO_IMAGINGUTILITY"
+DeleteRegValue SHCTX "Software\Classes\.gz\OpenWithProgIds" "RETRO_IMAGINGUTILITY"
+DeleteRegValue SHCTX "Software\Classes\.xz\OpenWithProgIds" "RETRO_IMAGINGUTILITY"
+DeleteRegValue SHCTX "Software\Classes\.img\OpenWithProgIds" "RETRO_IMAGINGUTILITY"
+DeleteRegValue SHCTX "Software\Classes\.zstd\OpenWithProgIds" "RETRO_IMAGINGUTILITY"
+DeleteRegKey SHCTX "Software\Classes\RETRO_IMAGINGUTILITY"
DeleteRegKey ${REG_ROOT} ""
-RMDir /r "$APPDATA\Raspberry Pi\Imager"
-RMDir "$APPDATA\Raspberry Pi"
-RMDir /r "$LOCALAPPDATA\Raspberry Pi\Imager"
-RMDir "$LOCALAPPDATA\Raspberry Pi"
+RMDir /r "$APPDATA\Retro Imager\Imager"
+RMDir "$APPDATA\Retro Imager"
+RMDir /r "$LOCALAPPDATA\Retro Imager\Imager"
+RMDir "$LOCALAPPDATA\Retro Imager"
SectionEnd
diff --git a/test_os_list.json b/test_os_list.json
new file mode 100644
index 0000000..de84dde
--- /dev/null
+++ b/test_os_list.json
@@ -0,0 +1,37 @@
+{
+ "os_list": [
+ {
+ "name": "Test OS 1",
+ "description": "A test OS for verifying functionality",
+ "icon": "icons/erase.png",
+ "url": "internal://format",
+ "devices": ["rg40xxh"]
+ },
+ {
+ "name": "Test OS 2",
+ "description": "Another test OS",
+ "icon": "icons/erase.png",
+ "url": "internal://format",
+ "devices": ["rg35xx_plus"]
+ }
+ ],
+ "imager": {
+ "devices": [
+ {
+ "name": "Test Device Category",
+ "subitems": [
+ {
+ "name": "Test Device 1",
+ "tags": ["rg40xxh"],
+ "icon": "icons/erase.png"
+ },
+ {
+ "name": "Test Device 2",
+ "tags": ["rg35xx_plus"],
+ "icon": "icons/erase.png"
+ }
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file