diff --git a/.github/workflows/build-arm64-mac.yml b/.github/workflows/build-arm64-mac.yml deleted file mode 100644 index f87c91a..0000000 --- a/.github/workflows/build-arm64-mac.yml +++ /dev/null @@ -1,47 +0,0 @@ -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 new file mode 100644 index 0000000..d0e0302 --- /dev/null +++ b/.github/workflows/windows-build.yml @@ -0,0 +1,46 @@ +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 70654da..b8ba31e 100644 --- a/README.md +++ b/README.md @@ -1,65 +1,154 @@ -# Retro-Imager +# Raspberry Pi Imager -**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. +Raspberry Pi Imaging Utility -## Supported Devices & Custom Firmwares +- 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/). -At present, **Retro-Imager** supports: -**muOS** and **Rocknix**. -More devices and firmwares will be added in future releases! +## How to use 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. +Please see our [official documentation](https://www.raspberrypi.com/documentation/computers/getting-started.html#raspberry-pi-imager). ## Contributing -We welcome contributions! Whether you're improving code, fixing bugs, or expanding firmware support, your help is appreciated. +### Linux -To contribute: +#### Get dependencies -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. +- 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 +``` ### License -This project is licensed under the MIT License. See the LICENSE file for details. + +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. diff --git a/appimagecraft.yml b/appimagecraft.yml index 83cbde4..82bd195 100644 --- a/appimagecraft.yml +++ b/appimagecraft.yml @@ -1,8 +1,8 @@ version: 1 project: - name: org.coreymclark.retro-imager - version: 0.3.0 + name: org.raspberrypi.rpi-imager + version: 1.9.2 build: cmake: diff --git a/minimal_test.json b/minimal_test.json deleted file mode 100644 index 75c3838..0000000 --- a/minimal_test.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "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 deleted file mode 100644 index fedc395..0000000 --- a/os_list.json +++ /dev/null @@ -1,552 +0,0 @@ -{ - "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 deleted file mode 100755 index fcc24b2..0000000 Binary files a/qt_plugins/assetimporters/libassimp.dylib and /dev/null differ diff --git a/qt_plugins/canbus/libqtpassthrucanbus.dylib b/qt_plugins/canbus/libqtpassthrucanbus.dylib deleted file mode 100755 index f81d632..0000000 Binary files a/qt_plugins/canbus/libqtpassthrucanbus.dylib and /dev/null differ diff --git a/qt_plugins/canbus/libqtpeakcanbus.dylib b/qt_plugins/canbus/libqtpeakcanbus.dylib deleted file mode 100755 index b481c0a..0000000 Binary files a/qt_plugins/canbus/libqtpeakcanbus.dylib and /dev/null differ diff --git a/qt_plugins/canbus/libqttinycanbus.dylib b/qt_plugins/canbus/libqttinycanbus.dylib deleted file mode 100755 index e25a98b..0000000 Binary files a/qt_plugins/canbus/libqttinycanbus.dylib and /dev/null differ diff --git a/qt_plugins/canbus/libqtvirtualcanbus.dylib b/qt_plugins/canbus/libqtvirtualcanbus.dylib deleted file mode 100755 index 1d0afa2..0000000 Binary files a/qt_plugins/canbus/libqtvirtualcanbus.dylib and /dev/null differ diff --git a/qt_plugins/designer/libqquickwidget.dylib b/qt_plugins/designer/libqquickwidget.dylib deleted file mode 100755 index fa42225..0000000 Binary files a/qt_plugins/designer/libqquickwidget.dylib and /dev/null differ diff --git a/qt_plugins/designer/libqwebengineview.dylib b/qt_plugins/designer/libqwebengineview.dylib deleted file mode 100755 index c0e98f8..0000000 Binary files a/qt_plugins/designer/libqwebengineview.dylib and /dev/null differ diff --git a/qt_plugins/generic/libqtuiotouchplugin.dylib b/qt_plugins/generic/libqtuiotouchplugin.dylib deleted file mode 100755 index 5d77bc6..0000000 Binary files a/qt_plugins/generic/libqtuiotouchplugin.dylib and /dev/null differ diff --git a/qt_plugins/geometryloaders/libdefaultgeometryloader.dylib b/qt_plugins/geometryloaders/libdefaultgeometryloader.dylib deleted file mode 100755 index 915e18b..0000000 Binary files a/qt_plugins/geometryloaders/libdefaultgeometryloader.dylib and /dev/null differ diff --git a/qt_plugins/geometryloaders/libgltfgeometryloader.dylib b/qt_plugins/geometryloaders/libgltfgeometryloader.dylib deleted file mode 100755 index c26e1e3..0000000 Binary files a/qt_plugins/geometryloaders/libgltfgeometryloader.dylib and /dev/null differ diff --git a/qt_plugins/geoservices/libqtgeoservices_itemsoverlay.dylib b/qt_plugins/geoservices/libqtgeoservices_itemsoverlay.dylib deleted file mode 100755 index 47ec78f..0000000 Binary files a/qt_plugins/geoservices/libqtgeoservices_itemsoverlay.dylib and /dev/null differ diff --git a/qt_plugins/geoservices/libqtgeoservices_osm.dylib b/qt_plugins/geoservices/libqtgeoservices_osm.dylib deleted file mode 100755 index ead5dd9..0000000 Binary files a/qt_plugins/geoservices/libqtgeoservices_osm.dylib and /dev/null differ diff --git a/qt_plugins/help/libhelpplugin.dylib b/qt_plugins/help/libhelpplugin.dylib deleted file mode 100755 index e615f84..0000000 Binary files a/qt_plugins/help/libhelpplugin.dylib and /dev/null differ diff --git a/qt_plugins/iconengines/libqsvgicon.dylib b/qt_plugins/iconengines/libqsvgicon.dylib deleted file mode 100755 index 2334c1f..0000000 Binary files a/qt_plugins/iconengines/libqsvgicon.dylib and /dev/null differ diff --git a/qt_plugins/imageformats/libqgif.dylib b/qt_plugins/imageformats/libqgif.dylib deleted file mode 100755 index 80c37d6..0000000 Binary files a/qt_plugins/imageformats/libqgif.dylib and /dev/null differ diff --git a/qt_plugins/imageformats/libqicns.dylib b/qt_plugins/imageformats/libqicns.dylib deleted file mode 100755 index 2a906b9..0000000 Binary files a/qt_plugins/imageformats/libqicns.dylib and /dev/null differ diff --git a/qt_plugins/imageformats/libqico.dylib b/qt_plugins/imageformats/libqico.dylib deleted file mode 100755 index f8c1a2c..0000000 Binary files a/qt_plugins/imageformats/libqico.dylib and /dev/null differ diff --git a/qt_plugins/imageformats/libqjp2.dylib b/qt_plugins/imageformats/libqjp2.dylib deleted file mode 100755 index 589265b..0000000 Binary files a/qt_plugins/imageformats/libqjp2.dylib and /dev/null differ diff --git a/qt_plugins/imageformats/libqjpeg.dylib b/qt_plugins/imageformats/libqjpeg.dylib deleted file mode 100755 index 9b4c006..0000000 Binary files a/qt_plugins/imageformats/libqjpeg.dylib and /dev/null differ diff --git a/qt_plugins/imageformats/libqmacheif.dylib b/qt_plugins/imageformats/libqmacheif.dylib deleted file mode 100755 index a5ca073..0000000 Binary files a/qt_plugins/imageformats/libqmacheif.dylib and /dev/null differ diff --git a/qt_plugins/imageformats/libqmng.dylib b/qt_plugins/imageformats/libqmng.dylib deleted file mode 100755 index b03723d..0000000 Binary files a/qt_plugins/imageformats/libqmng.dylib and /dev/null differ diff --git a/qt_plugins/imageformats/libqpdf.dylib b/qt_plugins/imageformats/libqpdf.dylib deleted file mode 100755 index 10a7c59..0000000 Binary files a/qt_plugins/imageformats/libqpdf.dylib and /dev/null differ diff --git a/qt_plugins/imageformats/libqsvg.dylib b/qt_plugins/imageformats/libqsvg.dylib deleted file mode 100755 index a9cc580..0000000 Binary files a/qt_plugins/imageformats/libqsvg.dylib and /dev/null differ diff --git a/qt_plugins/imageformats/libqtga.dylib b/qt_plugins/imageformats/libqtga.dylib deleted file mode 100755 index 67f39da..0000000 Binary files a/qt_plugins/imageformats/libqtga.dylib and /dev/null differ diff --git a/qt_plugins/imageformats/libqtiff.dylib b/qt_plugins/imageformats/libqtiff.dylib deleted file mode 100755 index bf7ea97..0000000 Binary files a/qt_plugins/imageformats/libqtiff.dylib and /dev/null differ diff --git a/qt_plugins/imageformats/libqwbmp.dylib b/qt_plugins/imageformats/libqwbmp.dylib deleted file mode 100755 index f057406..0000000 Binary files a/qt_plugins/imageformats/libqwbmp.dylib and /dev/null differ diff --git a/qt_plugins/imageformats/libqwebp.dylib b/qt_plugins/imageformats/libqwebp.dylib deleted file mode 100755 index 557482f..0000000 Binary files a/qt_plugins/imageformats/libqwebp.dylib and /dev/null differ diff --git a/qt_plugins/multimedia/libdarwinmediaplugin.dylib b/qt_plugins/multimedia/libdarwinmediaplugin.dylib deleted file mode 100755 index a2c0e2c..0000000 Binary files a/qt_plugins/multimedia/libdarwinmediaplugin.dylib and /dev/null differ diff --git a/qt_plugins/networkinformation/libqglib.dylib b/qt_plugins/networkinformation/libqglib.dylib deleted file mode 100755 index 0855317..0000000 Binary files a/qt_plugins/networkinformation/libqglib.dylib and /dev/null differ diff --git a/qt_plugins/networkinformation/libqscnetworkreachability.dylib b/qt_plugins/networkinformation/libqscnetworkreachability.dylib deleted file mode 100755 index 72b348b..0000000 Binary files a/qt_plugins/networkinformation/libqscnetworkreachability.dylib and /dev/null differ diff --git a/qt_plugins/opcua/libopen62541_backend.dylib b/qt_plugins/opcua/libopen62541_backend.dylib deleted file mode 100755 index 5578936..0000000 Binary files a/qt_plugins/opcua/libopen62541_backend.dylib and /dev/null differ diff --git a/qt_plugins/permissions/libqdarwinbluetoothpermission.a b/qt_plugins/permissions/libqdarwinbluetoothpermission.a deleted file mode 100644 index b8122f3..0000000 Binary files a/qt_plugins/permissions/libqdarwinbluetoothpermission.a and /dev/null differ diff --git a/qt_plugins/permissions/libqdarwinbluetoothpermission.prl b/qt_plugins/permissions/libqdarwinbluetoothpermission.prl deleted file mode 100644 index 9f6d1ba..0000000 --- a/qt_plugins/permissions/libqdarwinbluetoothpermission.prl +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index 21e7ec4..0000000 Binary files a/qt_plugins/permissions/libqdarwincalendarpermission.a and /dev/null differ diff --git a/qt_plugins/permissions/libqdarwincalendarpermission.prl b/qt_plugins/permissions/libqdarwincalendarpermission.prl deleted file mode 100644 index fb7e5e9..0000000 --- a/qt_plugins/permissions/libqdarwincalendarpermission.prl +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index f319588..0000000 Binary files a/qt_plugins/permissions/libqdarwincamerapermission.a and /dev/null differ diff --git a/qt_plugins/permissions/libqdarwincamerapermission.prl b/qt_plugins/permissions/libqdarwincamerapermission.prl deleted file mode 100644 index 1085b53..0000000 --- a/qt_plugins/permissions/libqdarwincamerapermission.prl +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index 548b88c..0000000 Binary files a/qt_plugins/permissions/libqdarwincontactspermission.a and /dev/null differ diff --git a/qt_plugins/permissions/libqdarwincontactspermission.prl b/qt_plugins/permissions/libqdarwincontactspermission.prl deleted file mode 100644 index a2d9c0e..0000000 --- a/qt_plugins/permissions/libqdarwincontactspermission.prl +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index 6642bed..0000000 Binary files a/qt_plugins/permissions/libqdarwinlocationpermission.a and /dev/null differ diff --git a/qt_plugins/permissions/libqdarwinlocationpermission.prl b/qt_plugins/permissions/libqdarwinlocationpermission.prl deleted file mode 100644 index fe1aa38..0000000 --- a/qt_plugins/permissions/libqdarwinlocationpermission.prl +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index 77ed4ff..0000000 Binary files a/qt_plugins/permissions/libqdarwinmicrophonepermission.a and /dev/null differ diff --git a/qt_plugins/permissions/libqdarwinmicrophonepermission.prl b/qt_plugins/permissions/libqdarwinmicrophonepermission.prl deleted file mode 100644 index ca6f7b7..0000000 --- a/qt_plugins/permissions/libqdarwinmicrophonepermission.prl +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index 1f5594e..0000000 Binary files a/qt_plugins/permissions/objects-Release/QDarwinBluetoothPermissionPlugin_init/QDarwinBluetoothPermissionPlugin_init.cpp.o and /dev/null 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 deleted file mode 100644 index 8476489..0000000 Binary files a/qt_plugins/permissions/objects-Release/QDarwinCalendarPermissionPlugin_init/QDarwinCalendarPermissionPlugin_init.cpp.o and /dev/null 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 deleted file mode 100644 index f974b34..0000000 Binary files a/qt_plugins/permissions/objects-Release/QDarwinCameraPermissionPlugin_init/QDarwinCameraPermissionPlugin_init.cpp.o and /dev/null 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 deleted file mode 100644 index 2410986..0000000 Binary files a/qt_plugins/permissions/objects-Release/QDarwinContactsPermissionPlugin_init/QDarwinContactsPermissionPlugin_init.cpp.o and /dev/null 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 deleted file mode 100644 index d836b6f..0000000 Binary files a/qt_plugins/permissions/objects-Release/QDarwinLocationPermissionPlugin_init/QDarwinLocationPermissionPlugin_init.cpp.o and /dev/null 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 deleted file mode 100644 index 94ff547..0000000 Binary files a/qt_plugins/permissions/objects-Release/QDarwinMicrophonePermissionPlugin_init/QDarwinMicrophonePermissionPlugin_init.cpp.o and /dev/null differ diff --git a/qt_plugins/platforminputcontexts/libqtvirtualkeyboardplugin.dylib b/qt_plugins/platforminputcontexts/libqtvirtualkeyboardplugin.dylib deleted file mode 100755 index 2c06f84..0000000 Binary files a/qt_plugins/platforminputcontexts/libqtvirtualkeyboardplugin.dylib and /dev/null differ diff --git a/qt_plugins/platforms/libqcocoa.dylib b/qt_plugins/platforms/libqcocoa.dylib deleted file mode 100755 index 889280a..0000000 Binary files a/qt_plugins/platforms/libqcocoa.dylib and /dev/null differ diff --git a/qt_plugins/platforms/libqminimal.dylib b/qt_plugins/platforms/libqminimal.dylib deleted file mode 100755 index e81a765..0000000 Binary files a/qt_plugins/platforms/libqminimal.dylib and /dev/null differ diff --git a/qt_plugins/platforms/libqoffscreen.dylib b/qt_plugins/platforms/libqoffscreen.dylib deleted file mode 100755 index 48d0a65..0000000 Binary files a/qt_plugins/platforms/libqoffscreen.dylib and /dev/null differ diff --git a/qt_plugins/position/libqtposition_cl.dylib b/qt_plugins/position/libqtposition_cl.dylib deleted file mode 100755 index 7b2609f..0000000 Binary files a/qt_plugins/position/libqtposition_cl.dylib and /dev/null differ diff --git a/qt_plugins/position/libqtposition_nmea.dylib b/qt_plugins/position/libqtposition_nmea.dylib deleted file mode 100755 index 16f391c..0000000 Binary files a/qt_plugins/position/libqtposition_nmea.dylib and /dev/null differ diff --git a/qt_plugins/position/libqtposition_positionpoll.dylib b/qt_plugins/position/libqtposition_positionpoll.dylib deleted file mode 100755 index 57694c8..0000000 Binary files a/qt_plugins/position/libqtposition_positionpoll.dylib and /dev/null differ diff --git a/qt_plugins/qmllint/libquicklintplugin.dylib b/qt_plugins/qmllint/libquicklintplugin.dylib deleted file mode 100755 index 7030a05..0000000 Binary files a/qt_plugins/qmllint/libquicklintplugin.dylib and /dev/null differ diff --git a/qt_plugins/qmlls/libqmllsquickplugin.dylib b/qt_plugins/qmlls/libqmllsquickplugin.dylib deleted file mode 100755 index ba20b05..0000000 Binary files a/qt_plugins/qmlls/libqmllsquickplugin.dylib and /dev/null differ diff --git a/qt_plugins/qmltooling/libqmldbg_debugger.dylib b/qt_plugins/qmltooling/libqmldbg_debugger.dylib deleted file mode 100755 index 2fa184c..0000000 Binary files a/qt_plugins/qmltooling/libqmldbg_debugger.dylib and /dev/null differ diff --git a/qt_plugins/qmltooling/libqmldbg_inspector.dylib b/qt_plugins/qmltooling/libqmldbg_inspector.dylib deleted file mode 100755 index a9503ce..0000000 Binary files a/qt_plugins/qmltooling/libqmldbg_inspector.dylib and /dev/null differ diff --git a/qt_plugins/qmltooling/libqmldbg_local.dylib b/qt_plugins/qmltooling/libqmldbg_local.dylib deleted file mode 100755 index 994227c..0000000 Binary files a/qt_plugins/qmltooling/libqmldbg_local.dylib and /dev/null differ diff --git a/qt_plugins/qmltooling/libqmldbg_messages.dylib b/qt_plugins/qmltooling/libqmldbg_messages.dylib deleted file mode 100755 index e359090..0000000 Binary files a/qt_plugins/qmltooling/libqmldbg_messages.dylib and /dev/null differ diff --git a/qt_plugins/qmltooling/libqmldbg_native.dylib b/qt_plugins/qmltooling/libqmldbg_native.dylib deleted file mode 100755 index 8cc2349..0000000 Binary files a/qt_plugins/qmltooling/libqmldbg_native.dylib and /dev/null differ diff --git a/qt_plugins/qmltooling/libqmldbg_nativedebugger.dylib b/qt_plugins/qmltooling/libqmldbg_nativedebugger.dylib deleted file mode 100755 index f0f6df7..0000000 Binary files a/qt_plugins/qmltooling/libqmldbg_nativedebugger.dylib and /dev/null differ diff --git a/qt_plugins/qmltooling/libqmldbg_preview.dylib b/qt_plugins/qmltooling/libqmldbg_preview.dylib deleted file mode 100755 index 0b3eab2..0000000 Binary files a/qt_plugins/qmltooling/libqmldbg_preview.dylib and /dev/null differ diff --git a/qt_plugins/qmltooling/libqmldbg_profiler.dylib b/qt_plugins/qmltooling/libqmldbg_profiler.dylib deleted file mode 100755 index 7d12387..0000000 Binary files a/qt_plugins/qmltooling/libqmldbg_profiler.dylib and /dev/null differ diff --git a/qt_plugins/qmltooling/libqmldbg_quick3dprofiler.dylib b/qt_plugins/qmltooling/libqmldbg_quick3dprofiler.dylib deleted file mode 100755 index 64a0904..0000000 Binary files a/qt_plugins/qmltooling/libqmldbg_quick3dprofiler.dylib and /dev/null differ diff --git a/qt_plugins/qmltooling/libqmldbg_quickprofiler.dylib b/qt_plugins/qmltooling/libqmldbg_quickprofiler.dylib deleted file mode 100755 index dddba4d..0000000 Binary files a/qt_plugins/qmltooling/libqmldbg_quickprofiler.dylib and /dev/null differ diff --git a/qt_plugins/qmltooling/libqmldbg_server.dylib b/qt_plugins/qmltooling/libqmldbg_server.dylib deleted file mode 100755 index 57bc0ac..0000000 Binary files a/qt_plugins/qmltooling/libqmldbg_server.dylib and /dev/null differ diff --git a/qt_plugins/qmltooling/libqmldbg_tcp.dylib b/qt_plugins/qmltooling/libqmldbg_tcp.dylib deleted file mode 100755 index 4c0dda8..0000000 Binary files a/qt_plugins/qmltooling/libqmldbg_tcp.dylib and /dev/null differ diff --git a/qt_plugins/renderers/libopenglrenderer.dylib b/qt_plugins/renderers/libopenglrenderer.dylib deleted file mode 100755 index 69f7f8a..0000000 Binary files a/qt_plugins/renderers/libopenglrenderer.dylib and /dev/null differ diff --git a/qt_plugins/renderers/librhirenderer.dylib b/qt_plugins/renderers/librhirenderer.dylib deleted file mode 100755 index 4d80219..0000000 Binary files a/qt_plugins/renderers/librhirenderer.dylib and /dev/null differ diff --git a/qt_plugins/renderplugins/libscene2d.dylib b/qt_plugins/renderplugins/libscene2d.dylib deleted file mode 100755 index 297aadf..0000000 Binary files a/qt_plugins/renderplugins/libscene2d.dylib and /dev/null differ diff --git a/qt_plugins/sceneparsers/libassimpsceneimport.dylib b/qt_plugins/sceneparsers/libassimpsceneimport.dylib deleted file mode 100755 index c30c9c5..0000000 Binary files a/qt_plugins/sceneparsers/libassimpsceneimport.dylib and /dev/null differ diff --git a/qt_plugins/sceneparsers/libgltfsceneexport.dylib b/qt_plugins/sceneparsers/libgltfsceneexport.dylib deleted file mode 100755 index 701b4bc..0000000 Binary files a/qt_plugins/sceneparsers/libgltfsceneexport.dylib and /dev/null differ diff --git a/qt_plugins/sceneparsers/libgltfsceneimport.dylib b/qt_plugins/sceneparsers/libgltfsceneimport.dylib deleted file mode 100755 index 54836de..0000000 Binary files a/qt_plugins/sceneparsers/libgltfsceneimport.dylib and /dev/null differ diff --git a/qt_plugins/scxmldatamodel/libqscxmlecmascriptdatamodel.dylib b/qt_plugins/scxmldatamodel/libqscxmlecmascriptdatamodel.dylib deleted file mode 100755 index 43c9b8f..0000000 Binary files a/qt_plugins/scxmldatamodel/libqscxmlecmascriptdatamodel.dylib and /dev/null differ diff --git a/qt_plugins/sensors/libqtsensors_generic.dylib b/qt_plugins/sensors/libqtsensors_generic.dylib deleted file mode 100755 index 00b9bc5..0000000 Binary files a/qt_plugins/sensors/libqtsensors_generic.dylib and /dev/null differ diff --git a/qt_plugins/sqldrivers/libqsqlite.dylib b/qt_plugins/sqldrivers/libqsqlite.dylib deleted file mode 100755 index 57c2d28..0000000 Binary files a/qt_plugins/sqldrivers/libqsqlite.dylib and /dev/null differ diff --git a/qt_plugins/styles/libqmacstyle.dylib b/qt_plugins/styles/libqmacstyle.dylib deleted file mode 100755 index 1f56999..0000000 Binary files a/qt_plugins/styles/libqmacstyle.dylib and /dev/null differ diff --git a/qt_plugins/texttospeech/libqtexttospeech_mock.dylib b/qt_plugins/texttospeech/libqtexttospeech_mock.dylib deleted file mode 100755 index 8cae0ba..0000000 Binary files a/qt_plugins/texttospeech/libqtexttospeech_mock.dylib and /dev/null differ diff --git a/qt_plugins/texttospeech/libqtexttospeech_speech_macos.dylib b/qt_plugins/texttospeech/libqtexttospeech_speech_macos.dylib deleted file mode 100755 index 3de7c3d..0000000 Binary files a/qt_plugins/texttospeech/libqtexttospeech_speech_macos.dylib and /dev/null differ diff --git a/qt_plugins/texttospeech/libqtexttospeech_speechdarwin.dylib b/qt_plugins/texttospeech/libqtexttospeech_speechdarwin.dylib deleted file mode 100755 index 8f0e6d8..0000000 Binary files a/qt_plugins/texttospeech/libqtexttospeech_speechdarwin.dylib and /dev/null differ diff --git a/qt_plugins/tls/libqcertonlybackend.dylib b/qt_plugins/tls/libqcertonlybackend.dylib deleted file mode 100755 index 5d5ec6a..0000000 Binary files a/qt_plugins/tls/libqcertonlybackend.dylib and /dev/null differ diff --git a/qt_plugins/tls/libqopensslbackend.dylib b/qt_plugins/tls/libqopensslbackend.dylib deleted file mode 100755 index b5281dc..0000000 Binary files a/qt_plugins/tls/libqopensslbackend.dylib and /dev/null differ diff --git a/qt_plugins/tls/libqsecuretransportbackend.dylib b/qt_plugins/tls/libqsecuretransportbackend.dylib deleted file mode 100755 index 152a3f6..0000000 Binary files a/qt_plugins/tls/libqsecuretransportbackend.dylib and /dev/null differ diff --git a/qt_plugins/webview/libqtwebview_darwin.dylib b/qt_plugins/webview/libqtwebview_darwin.dylib deleted file mode 100755 index 9d09aae..0000000 Binary files a/qt_plugins/webview/libqtwebview_darwin.dylib and /dev/null differ diff --git a/qt_plugins/webview/libqtwebview_webengine.dylib b/qt_plugins/webview/libqtwebview_webengine.dylib deleted file mode 100755 index 8872889..0000000 Binary files a/qt_plugins/webview/libqtwebview_webengine.dylib and /dev/null differ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6f88e31..8784f05 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(retro-imager LANGUAGES CXX C) -set(IMAGER_VERSION_MAJOR 0) -set(IMAGER_VERSION_MINOR 5) -set(IMAGER_VERSION_PATCH 0) +project(rpi-imager LANGUAGES CXX C) +set(IMAGER_VERSION_MAJOR 1) +set(IMAGER_VERSION_MINOR 9) +set(IMAGER_VERSION_PATCH 2) 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 "$ENV{QT6_ROOT}" CACHE PATH "Your Qt6 root path") +set(Qt6_ROOT "/opt/Qt/6.7.2/gcc_arm64" CACHE PATH "Your Qt6 root path") if (WIN32) - set(MINGW64_ROOT "$ENV{MINGW64_ROOT}" CACHE PATH "Your MinGW64 root path, likely provided by QtCreator") + set(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/retro-imager-cli.cmd" + "${CMAKE_SOURCE_DIR}/../license.txt" "${CMAKE_SOURCE_DIR}/windows/rpi-imager-cli.cmd" "${CMAKE_BINARY_DIR}/deploy") configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/windows/retro-imager.nsi.in" - "${CMAKE_CURRENT_BINARY_DIR}/retro-imager.nsi" + "${CMAKE_CURRENT_SOURCE_DIR}/windows/rpi-imager.nsi.in" + "${CMAKE_CURRENT_BINARY_DIR}/rpi-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/retro-imager.exe") + COMMAND "${WINDEPLOYQT}" --no-translations --qmldir "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_BINARY_DIR}/deploy/rpi-imager.exe") # Remove excess files add_custom_command(TARGET ${PROJECT_NAME} @@ -433,30 +433,32 @@ elseif(APPLE) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -qmldir="${CMAKE_CURRENT_SOURCE_DIR}") - # Don't rename the app bundle, use the project name consistently + add_custom_command(TARGET ${PROJECT_NAME} + POST_BUILD + COMMAND mv "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app") # 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}/${PROJECT_NAME}.app") + COMMAND codesign -f --deep --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app") # Create the .dmg for distribution add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND hdiutil create -volname "${PROJECT_NAME}" -srcfolder "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -ov -format UDBZ "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg") + 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") # 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}/${PROJECT_NAME}.dmg") + COMMAND codesign -f --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.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}/${PROJECT_NAME}.dmg" --wait --keychain-profile "${IMAGER_NOTARIZE_KEYCHAIN_PROFILE}") + COMMAND xcrun notarytool submit "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg" --wait --keychain-profile "${IMAGER_NOTARIZE_KEYCHAIN_PROFILE}") add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND xcrun stapler staple "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg") + COMMAND xcrun stapler staple "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg") else() message(FATAL_ERROR "Notarization requested, but no keychain profile is supplied") endif(IMAGER_NOTARIZE_KEYCHAIN_PROFILE) @@ -469,12 +471,12 @@ elseif(APPLE) # Unsigned application add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -qmldir="${CMAKE_CURRENT_SOURCE_DIR}" -always-overwrite -no-strip -dmg) + COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.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}/${PROJECT_NAME}.dmg" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${IMAGER_VERSION_STR}.dmg") + COMMAND "mv" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager-${IMAGER_VERSION_STR}.dmg") else() # UNIX, Linux systems @@ -492,7 +494,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.coreymclark.retro-imager.desktop" DESTINATION share/applications) + install(FILES "linux/org.raspberrypi.rpi-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 3527123..d148216 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/refs/heads/fix/src/os_list.json" +#define OSLIST_URL "https://raw.githubusercontent.com/cmclark00/retro-imager/boogaloo/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 "http://technerdguys.com/telemetry-endpoint" +#define TELEMETRY_URL "https://rpi-imager-stats.raspberrypi.com/downloads" /* 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 deleted file mode 100644 index 000982c..0000000 Binary files a/src/icons/banner.png and /dev/null differ diff --git a/src/icons/icon.png b/src/icons/icon.png deleted file mode 100644 index 9ca2554..0000000 Binary files a/src/icons/icon.png and /dev/null differ diff --git a/src/icons/logo.png b/src/icons/logo.png deleted file mode 100644 index 07540a1..0000000 Binary files a/src/icons/logo.png and /dev/null differ diff --git a/src/icons/rocknix.png b/src/icons/rocknix.png deleted file mode 100644 index 0dceb47..0000000 Binary files a/src/icons/rocknix.png and /dev/null differ diff --git a/src/icons/rpi-imager.ico b/src/icons/rpi-imager.ico index bf62901..ecb494b 100644 Binary files a/src/icons/rpi-imager.ico and b/src/icons/rpi-imager.ico differ diff --git a/src/linux/org.coreymclark.retro-imager.desktop b/src/linux/org.raspberrypi.rpi-imager.desktop similarity index 72% rename from src/linux/org.coreymclark.retro-imager.desktop rename to src/linux/org.raspberrypi.rpi-imager.desktop index 1d6236e..5236899 100644 --- a/src/linux/org.coreymclark.retro-imager.desktop +++ b/src/linux/org.raspberrypi.rpi-imager.desktop @@ -1,11 +1,11 @@ [Desktop Entry] Type=Application Version=1.0 -Name=Retro Imager +Name=Raspberry Pi Imager Name[zh_CN]=树莓派启动盘制作工具 -Comment=Retro Imager +Comment=Raspberry Pi Imager Comment[zh_CN]=树莓派启动盘制作工具 Icon=rpi-imager -Exec=retro-imager %F +Exec=rpi-imager %F Categories=Utility StartupNotify=false diff --git a/src/main.qml b/src/main.qml index 7b202f8..162445c 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 v%1").arg(imageWriter.constantVersion()) + title: qsTr("Retro Imager v0.1") 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,20 +60,28 @@ ApplicationWindow { id: bg spacing: 0 - Rectangle { id: logoContainer - color: accentColor implicitHeight: window.height/4 Image { id: image - source: "icons/banner.png" - width: window.width * 1 + source: "icons/logo_sxs_imager.png" + + // Specify the maximum size of the image + width: window.width height: window.height / 3 + smooth: true antialiasing: true - fillMode: image.PreserveAspectFit + + anchors { + left: logoContainer.left + top: logoContainer.top + bottom: logoContainer.bottom + topMargin: window.height + bottomMargin: window.height + } } } @@ -138,8 +146,8 @@ ApplicationWindow { bgrect.mouseOver = false } onClicked: { - hwpopup.open() - hwlist.forceActiveFocus() + hwpopup.open() + hwlist.forceActiveFocus() } } Rectangle { @@ -195,8 +203,8 @@ ApplicationWindow { bgrect1.mouseOver = false } onClicked: { - ospopup.open() - osswipeview.currentItem.forceActiveFocus() + ospopup.open() + osswipeview.currentItem.forceActiveFocus() } } @@ -254,10 +262,10 @@ ApplicationWindow { bgrect2.mouseOver = false } onClicked: { - imageWriter.startDriveListPolling() - dstpopup.open() - dstlist.forceActiveFocus() - } + imageWriter.startDriveListPolling() + dstpopup.open() + dstlist.forceActiveFocus() + } } Rectangle { @@ -479,8 +487,6 @@ ApplicationWindow { } } - // Popup for hardware device selection with nested structure - // Updated hwpopup definition Popup { id: hwpopup x: 50 @@ -490,21 +496,6 @@ 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 { @@ -516,8 +507,7 @@ ApplicationWindow { width: parent.width Text { - id: hwTitleText - text: qsTr("Retro Gaming Handheld Device") + text: qsTr("Raspberry Pi Device") horizontalAlignment: Text.AlignHCenter anchors.fill: parent anchors.topMargin: 10 @@ -546,7 +536,6 @@ ApplicationWindow { } } } - // line under title Rectangle { id: hwpopup_title_separator @@ -556,109 +545,30 @@ ApplicationWindow { height: 1 } - 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 { + id: hwlist clip: true model: ListModel { + id: deviceModel ListElement { - name: "Back" + name: qsTr("[ All ]") tags: "[]" - icon: "icons/ic_chevron_left_40px.svg" - description: "Go back to main menu" + icon: "" + description: "" + matching_type: "exclusive" } } currentIndex: -1 delegate: hwdelegate + anchors.top: hwpopup_title_separator.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom boundsBehavior: Flickable.StopAtBounds ScrollBar.vertical: ScrollBar { + anchors.right: parent.right width: 10 - policy: parent.contentHeight > parent.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded + policy: hwlist.contentHeight > hwlist.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded } Keys.onSpacePressed: { if (currentIndex != -1) @@ -670,11 +580,6 @@ ApplicationWindow { } Keys.onEnterPressed: Keys.onSpacePressed(event) Keys.onReturnPressed: Keys.onSpacePressed(event) - Keys.onLeftPressed: { - hwswipeview.decrementCurrentIndex() - hwpopup.categorySelected = "" - hwTitleText.text = qsTr("Retro Gaming Handheld Device") - } } } @@ -846,14 +751,13 @@ 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"+(typeof description === "undefined" ? "" : description) + Accessible.name: name+".\n"+description MouseArea { id: hwMouseArea @@ -862,31 +766,27 @@ ApplicationWindow { hoverEnabled: true onEntered: { - bgrect3.mouseOver = true + bgrect.mouseOver = true } onExited: { - bgrect3.mouseOver = false + bgrect.mouseOver = false } onClicked: { - if (typeof subitems !== "undefined" && subitems) { - selectHWcategory(model) - } else { - selectHWitem(model) - } + selectHWitem(model) } } Rectangle { - id: bgrect3 + id: bgrect anchors.fill: parent color: accentColor visible: mouseOver && parent.ListView.view.currentIndex !== index property bool mouseOver: false } Rectangle { - id: borderrect2 + id: borderrect implicitHeight: 1 implicitWidth: parent.width color: accentColor @@ -925,21 +825,11 @@ 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 - } } } } @@ -1671,118 +1561,54 @@ ApplicationWindow { } } - // Function to fetch OS list and populate the hardware categories function fetchOSlist() { - 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]); - } + 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) { - // 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 ("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 } } } - } catch (e) { - console.error("Error in fetchOSlist:", e); - onError("Error loading device list: " + e.message); + + 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() + } + } } } @@ -1826,265 +1652,63 @@ 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) { - try { - // Add defensive checks - if (!hwmodel) { - console.error("selectHWitem called with null model"); - return; + /* Default is exclusive matching */ + var inclusive = false + + if (hwmodel.matching_type) { + switch (hwmodel.matching_type) { + case "exclusive": + break; + case "inclusive": + inclusive = true + break; } - - 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); } + + 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)" + } + } + + 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? @@ -2109,29 +1733,6 @@ 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) { @@ -2157,7 +1758,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 === "") { @@ -2204,4 +1805,4 @@ ApplicationWindow { writebutton.enabled = true } } -} \ No newline at end of file +} diff --git a/src/os_list.json b/src/os_list.json index fedc395..2773259 100644 --- a/src/os_list.json +++ b/src/os_list.json @@ -1,552 +1,135 @@ { - "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" - } - ] - } - ] - } + "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" + } + + ] + } } - diff --git a/src/qml.qrc b/src/qml.qrc index d86215f..8dcca05 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/banner.png + icons/logo_sxs_imager.png qmlcomponents/ImButton.qml qmlcomponents/ImButtonRed.qml qmlcomponents/ImCheckBox.qml diff --git a/src/windows/retro-imager-cli.cmd b/src/windows/rpi-imager-cli.cmd similarity index 53% rename from src/windows/retro-imager-cli.cmd rename to src/windows/rpi-imager-cli.cmd index 8158775..99c15f7 100644 --- a/src/windows/retro-imager-cli.cmd +++ b/src/windows/rpi-imager-cli.cmd @@ -1,9 +1,9 @@ @echo off rem -rem For scripting: call retro-imager.exe and wait until it finished before continuing +rem For scripting: call rpi-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 retro-imager.exe --cli %* +start /WAIT rpi-imager.exe --cli %* diff --git a/src/windows/retro-imager.nsi.in b/src/windows/rpi-imager.nsi.in similarity index 96% rename from src/windows/retro-imager.nsi.in rename to src/windows/rpi-imager.nsi.in index bc1e1ce..348efd0 100644 --- a/src/windows/retro-imager.nsi.in +++ b/src/windows/rpi-imager.nsi.in @@ -4,20 +4,20 @@ # by Vlasis K. Barkas aka Red Wine red_wine@freemail.gr Sep 2006 ############################################################################################ -!define APP_NAME "Retro Imager" -!define COMP_NAME "coreymclark" +!define APP_NAME "Raspberry Pi Imager" +!define COMP_NAME "Raspberry Pi Ltd" !define VERSION "@IMAGER_VERSION_STR@" -!define INSTALLER_NAME "retro-imager-${VERSION}.exe" +!define INSTALLER_NAME "imager-${VERSION}.exe" !define COPYRIGHT "Raspberry Pi Ltd" -!define DESCRIPTION "Retro Imager" -!define MAIN_APP_EXE "retro-imager.exe" +!define DESCRIPTION "Raspberry Pi Imager" +!define MAIN_APP_EXE "rpi-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 "retro-imager.exe" +!define EXE_TO_TERMINATE "rpi-imager.exe" ###################################################################### @@ -38,7 +38,7 @@ OutFile "${INSTALLER_NAME}" BrandingText "${APP_NAME}" XPStyle on InstallDirRegKey "${REG_ROOT}" "${REG_APP_PATH}" "" -InstallDir "$PROGRAMFILES\Retro Imager" +InstallDir "$PROGRAMFILES\Raspberry Pi Imager" ###################################################################### @@ -89,7 +89,7 @@ InstallDir "$PROGRAMFILES\Retro Imager" !ifdef REG_START_MENU !define MUI_STARTMENUPAGE_NODISABLE -!define MUI_STARTMENUPAGE_DEFAULTFOLDER "Retro Imager" +!define MUI_STARTMENUPAGE_DEFAULTFOLDER "Raspberry Pi" !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\retro-imager-cli.cmd" -File "deploy\retro-imager.exe" +File "deploy\rpi-imager-cli.cmd" +File "deploy\rpi-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" "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"' +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"' SectionEnd @@ -805,8 +805,8 @@ Delete "$INSTDIR\Qt5Widgets.dll" Delete "$INSTDIR\Qt5WinExtras.dll" # Old name Delete "$INSTDIR\imagingutility.exe" -Delete "$INSTDIR\retro-imager.exe" -Delete "$INSTDIR\retro-imager-cli.cmd" +Delete "$INSTDIR\rpi-imager.exe" +Delete "$INSTDIR\rpi-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\retro-imager-cli.cmd" -Delete "$INSTDIR\retro-imager.exe" +Delete "$INSTDIR\rpi-imager-cli.cmd" +Delete "$INSTDIR\rpi-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\Retro Imager${APP_NAME}.lnk" +Delete "$SMPROGRAMS\Raspberry Pi\${APP_NAME}.lnk" !ifdef WEB_SITE -Delete "$SMPROGRAMS\Retro Imager\${APP_NAME} Website.lnk" +Delete "$SMPROGRAMS\Raspberry Pi\${APP_NAME} Website.lnk" !endif -RmDir "$SMPROGRAMS\Retro Imager" +RmDir "$SMPROGRAMS\Raspberry Pi" !endif DeleteRegKey ${REG_ROOT} "${REG_APP_PATH}" DeleteRegKey ${REG_ROOT} "${UNINSTALL_PATH}" # File associations -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" +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" DeleteRegKey ${REG_ROOT} "" -RMDir /r "$APPDATA\Retro Imager\Imager" -RMDir "$APPDATA\Retro Imager" -RMDir /r "$LOCALAPPDATA\Retro Imager\Imager" -RMDir "$LOCALAPPDATA\Retro Imager" +RMDir /r "$APPDATA\Raspberry Pi\Imager" +RMDir "$APPDATA\Raspberry Pi" +RMDir /r "$LOCALAPPDATA\Raspberry Pi\Imager" +RMDir "$LOCALAPPDATA\Raspberry Pi" SectionEnd diff --git a/test_os_list.json b/test_os_list.json deleted file mode 100644 index de84dde..0000000 --- a/test_os_list.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "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