diff --git a/minimal_test.json b/minimal_test.json new file mode 100644 index 0000000..75c3838 --- /dev/null +++ b/minimal_test.json @@ -0,0 +1,16 @@ +{ + "os_list": [ + { + "name": "Test OS 1", + "description": "A test OS for verifying functionality", + "icon": "icons/erase.png", + "url": "internal://format" + }, + { + "name": "Test OS 2", + "description": "Another test OS", + "icon": "icons/erase.png", + "url": "internal://format" + } + ] +} \ No newline at end of file diff --git a/os_list.json b/os_list.json new file mode 100644 index 0000000..fedc395 --- /dev/null +++ b/os_list.json @@ -0,0 +1,552 @@ +{ + "os_list": [ + { + "name": "muOS 2410.1 Banana for RG35XX Plus", + "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XX Plus.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true", + "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-PLUS-2410.1-BANANA-d1bae326.img.gz", + "release_date": "2024-10-12", + "image_download_size": 2151537628, + "extract_size": 4504682496, + "extract_sha256": "62c492047923e3e8709e0b015760b7f1e0db2ccab40e741fe067b49d96957624", + "devices": [ + "rg35xx_plus" + ] + }, + { + "name": "muOS 2410.1 Banana for RG28XX", + "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG28XX.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true", + "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG28XX-2410.1-BANANA-d1bae326.img.gz", + "release_date": "2024-10-12", + "image_download_size": 2158432397, + "extract_size": 4504682496, + "extract_sha256": "62c492047923e3e8709e0b015760b7f1e0db2ccab40e741fe067b49d96957624", + "devices": [ + "rg28xx" + ] + }, + { + "name": "muOS 2410.1 Banana for RG35XXH", + "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XXH.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true", + "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-H-2410.1-BANANA-a10951c4.img.gz", + "release_date": "2024-10-12", + "image_download_size": 2118435484, + "extract_size": 4504682496, + "extract_sha256": "a84a1386de3b046aea05c75a4ccc8da0fbc2ee42f89b7b78a720cf657f45d3d2", + "devices": [ + "rg35xxh" + ] + }, + { + "name": "muOS 2410.1 Banana for RG35XXSP", + "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XXSP.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true", + "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-SP-2410.1-BANANA-d1bae326.img.gz", + "release_date": "2024-10-12", + "image_download_size": 2176694960, + "extract_size": 4504682496, + "extract_sha256": "9a529d2f089bba6616615026c6ec16e282d622adbc6ae97172b7ab73d32092c4", + "devices": [ + "rg35xx_sp" + ] + }, + { + "name": "muOS 2410.1 Banana for RG35XX24", + "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XX24.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true", + "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-2024-2410.1-BANANA-d1bae326.img.gz", + "release_date": "2024-10-12", + "image_download_size": 2151137645, + "extract_size": 4504682496, + "extract_sha256": "fc0da5aa0dcda244be8dec28115210200fe259c374bb7b25d6d26f4db812d351", + "devices": [ + "rg35xx_2024" + ] + }, + { + "name": "muOS 2410.1 Banana for RG40XXH", + "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG40XXH.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true", + "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-H-2410.1-BANANA-d1bae326.img.gz", + "release_date": "2024-10-12", + "image_download_size": 2132388103, + "extract_size": 4504682496, + "extract_sha256": "fe51f4f3a7f9e51c34eb78ef704a9a6af0233d6fdf87ccd070444034003afe5c", + "devices": [ + "rg40xxh" + ] + }, + { + "name": "muOS 2410.1 Banana for RG40XXV", + "description": "muOS 2410.1 Banana firmware optimized for Anbernic RG40XXV.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true", + "url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-V-2410.1-BANANA-d1bae326.img.gz", + "release_date": "2024-10-12", + "image_download_size": 2132476961, + "extract_size": 4504682496, + "extract_sha256": "aa2cd35010e1414c62b0460d8f193d7a3c56ebcf3f59a220aebe995ab93bb051", + "devices": [ + "rg40xxv" + ] + }, + { + "name": "ROCKNIX 20241120 for Rockchip RK3326 devices, A image.", + "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3326 devices.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true", + "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3326.aarch64-20241120-a.img.gz", + "release_date": "2024-11-20", + "image_download_size": 1348717111, + "extract_size": 2197815296, + "extract_sha256": "8cc28cca1d4d88464cf156691a540111385c5b94f30aa067456cc80fcd12b747", + "devices": [ + "rg351p", + "rg351m", + "rg351v", + "r33s", + "r35s", + "r36s", + "oga", + "ogs", + "xu10", + "v10", + "rgb10" + ] + }, + { + "name": "ROCKNIX 20241120 for Rockchip RK3326 devices, B image.", + "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3326 devices.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true", + "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3326.aarch64-20241120-b.img.gz", + "release_date": "2024-11-20", + "image_download_size": 1348619756, + "extract_size": 2197815296, + "extract_sha256": "e43ed5ea9c8c93408a180e57409e9a07d7594ecb1ffe46f21024655f46ea9050", + "devices": [ + "xu_mini_m", + "rgb10x" + ] + }, + { + "name": "ROCKNIX 20241120 for Rockchip RK3399 devices", + "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3399 devices.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true", + "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3399.aarch64-20241120.img.gz", + "release_date": "2024-11-20", + "image_download_size": 1288581465, + "extract_size": 2198863872, + "extract_sha256": "53091696a540d693d99d515524816825a057823c0fe1f91a0b5e4837baeb24b9", + "devices": [ + "rg552" + ] + }, + { + "name": "ROCKNIX 20241120 for Rockchip RK3566 devices", + "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3566 devices.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true", + "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3566.aarch64-20241120-Generic.img.gz", + "release_date": "2024-11-20", + "image_download_size": 1391749865, + "extract_size": 2198863872, + "extract_sha256": "4917f090e9364f47de5cf8663c0741eb79b8236c4b455a5ae4d3c8889744de27", + "devices": [ + "rg353p", + "rg353m", + "rg353v", + "rg353vs", + "rg353ps", + "rg503", + "rg_arc_d", + "rg_arc_s", + "rk2023", + "rgb10_max_3", + "rgb30", + "rgb20sx" + ] + }, + { + "name": "ROCKNIX 20241120 for Powkiddy X55 devices", + "description": "ROCKNIX 20241120 firmware optimized for Powkiddy X55 devices.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true", + "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3566.aarch64-20241120-Powkiddy_x55.img.gz", + "release_date": "2024-11-20", + "image_download_size": 1391396234, + "extract_size": 2198863872, + "extract_sha256": "35391e0a49de413a2672893a07ed6ca116f90746baef620eebf8d3ab7b2ad5f7", + "devices": [ + "x55" + ] + }, + { + "name": "ROCKNIX 20241120 for Hardkernel ODROID Go Ultra and Powkiddy RGB10 Max 3 Pro devices", + "description": "ROCKNIX 20241120 firmware optimized for ODROID Go Ultra and RGB10 Max 3 Pro devices.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true", + "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-S922X.aarch64-20241120.img.gz", + "release_date": "2024-11-20", + "image_download_size": 1416924259, + "extract_size": 2185232384, + "extract_sha256": "86cd0a48d541e3e68582107748e2f77656c153d11f6efd14563fb65a0f9c5076", + "devices": [ + "ogu", + "rgb10_max_3_pro" + ] + }, + { + "name": "ROCKNIX 20240815 for Hardkernel ODROID N2/N2+ devices", + "description": "ROCKNIX 20240815 firmware optimized for Hardkernel ODROID N2/N2+ devices.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true", + "url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-S922X.aarch64-20240815-Odroid_N2.img.gz", + "release_date": "2024-08-15", + "image_download_size": 1249723275, + "extract_size": 2185232384, + "extract_sha256": "7e5b56f4a0c0a9d9c64e7b1ba4472dd7e2dac9c28a23585098e16349f30c7fc9", + "devices": [ + "on2", + "on2_plus" + ] + }, + { + "name": "ROCKNIX 20240815 for Hardkernel ODROID N2L devices", + "description": "ROCKNIX 20240815 firmware optimized for Hardkernel ODROID N2L devices.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true", + "url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-S922X.aarch64-20240815-Odroid_N2L.img.gz", + "release_date": "2024-08-15", + "image_download_size": 1249707786, + "extract_size": 2185232384, + "extract_sha256": "5af36c78b57dcb35c910bb72c2ed28208fe94c94d5b7fda83d73ef33a2419910", + "devices": [ + "on2l" + ] + }, + { + "name": "ROCKNIX 20241120 for Rockchip RK3588 devices", + "description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3588 devices.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true", + "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3588.aarch64-20241120.img.gz", + "release_date": "2024-11-20", + "image_download_size": 1451047021, + "extract_size": 2198863872, + "extract_sha256": "ec81027b7d9b757f09ccd78ce38c6993009e66ddd4b7e1a1206dc104ad739754", + "devices": [ + "ace", + "orange_pi_5", + "orange_pi_5_plus", + "radxa_rock_5a", + "radxa_rock_5b", + "radxa_rock_5b_plus", + "radxa_rock_cm5", + "nova" + ] + }, + { + "name": "ROCKNIX 20241120 for Retroid Pocket Mini and Retroid Pocket 5 devices", + "description": "ROCKNIX 20241120 firmware optimized for Snapdragon 865 devices.", + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true", + "url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-SD865.aarch64-20241120.img.gz", + "release_date": "2024-11-20", + "image_download_size": 1404994449, + "extract_size": 2198863872, + "extract_sha256": "82f9336c27c9b733322e7e9f685bc1e98aa4eedb0c17f9ae297edb983ada6f39", + "devices": [ + "rpmini", + "rp5" + ] + } + ], + "imager": { + "devices": [ + { + "name": "Anbernic", + "subitems": [ + { + "name": "Anbernic RG40XXH", + "tags": ["rg40xxh"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG40XX%20H.png?raw=true" + }, + { + "name": "Anbernic RG40XXV", + "tags": ["rg40xxv"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG40XX%20V.png?raw=true" + }, + { + "name": "Anbernic RG35XXH", + "tags": ["rg35xxh"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20H.png?raw=true" + }, + { + "name": "Anbernic RG35XX Plus", + "tags": ["rg35xx_plus"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20-%20PLUS.png?raw=true" + }, + { + "name": "Anbernic RG35XX SP", + "tags": ["rg35xx_sp"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20SP.png?raw=true" + }, + { + "name": "Anbernic RG35XX 2024", + "tags": ["rg35xx_2024"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20-%202024.png?raw=true" + }, + { + "name": "Anbernic RG28XX", + "tags": ["rg28xx"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG28XX.png?raw=true" + }, + { + "name": "Anbernic RG351P", + "tags": ["rg351p"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Anbernic RG351M", + "tags": ["rg351m"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Anbernic RG351V", + "tags": ["rg351v"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Anbernic RG353P", + "tags": ["rg353p"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Anbernic RG353M", + "tags": ["rg353m"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Anbernic RG353V", + "tags": ["rg353v"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Anbernic RG353VS", + "tags": ["rg353vs"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Anbernic RG353PS", + "tags": ["rg353ps"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Anbernic RG503", + "tags": ["rg503"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Anbernic RG Arc-D", + "tags": ["rg_arc_d"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Anbernic RG Arc-S", + "tags": ["rg_arc_s"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + } + ] + }, + { + "name": "Game Console", + "subitems": [ + { + "name": "Game Console R33S", + "tags": ["r33s"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Game Console R35S", + "tags": ["r35s"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Game Console R36S", + "tags": ["r36s"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + } + ] + }, + { + "name": "ODROID", + "subitems": [ + { + "name": "ODROID Go Advance", + "tags": ["oga"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "ODROID Go Super", + "tags": ["ogs"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "ODROID N2", + "tags": ["on2"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "ODROID N2 Plus", + "tags": ["on2_plus"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "ODROID N2L", + "tags": ["on2l"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + } + ] + }, + { + "name": "MagicX", + "subitems": [ + { + "name": "MagicX XU10", + "tags": ["xu10"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "MagicX XU Mini M", + "tags": ["xu_mini_m"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + } + ] + }, + { + "name": "Powkiddy", + "subitems": [ + { + "name": "Powkiddy V10", + "tags": ["v10"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Powkiddy RGB10", + "tags": ["rgb10"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Powkiddy RK2023", + "tags": ["rk2023"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Powkiddy RGB10 Max 3", + "tags": ["rgb10_max_3"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Powkiddy RGB30", + "tags": ["rgb30"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Powkiddy RGB20SX", + "tags": ["rgb20sx"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Anbernic RG552", + "tags": ["rg552"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "ODROID Go Ultra", + "tags": ["ogu"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Powkiddy RGB10 Max 3 Pro", + "tags": ["rgb10_max_3_pro"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Powkiddy X55", + "tags": ["x55"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + } + ] + }, + { + "name": "Gameforce", + "subitems": [ + { + "name": "Gameforce Ace (default)", + "tags": ["ace"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + } + ] + }, + { + "name": "Orange Pi", + "subitems": [ + { + "name": "Orange Pi 5", + "tags": ["orange_pi_5"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Orange Pi 5 Plus", + "tags": ["orange_pi_5_plus"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + } + ] + }, + { + "name": "Radxa", + "subitems": [ + { + "name": "Radxa Rock 5a", + "tags": ["radxa_rock_5a"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Radxa Rock 5b", + "tags": ["radxa_rock_5b"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Radxa Rock 5b Plus", + "tags": ["radxa_rock_5b_plus"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Radxa Rock CM5", + "tags": ["radxa_rock_cm5"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + } + ] + }, + { + "name": "Indiedroid", + "subitems": [ + { + "name": "Indiedroid Nova (Must set dtb in extlinuix.conf)", + "tags": ["nova"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + } + ] + }, + { + "name": "Retroid", + "subitems": [ + { + "name": "Retroid Pocket Mini", + "tags": ["rpmini"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Retroid Pocket 5", + "tags": ["rp5"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + } + ] + } + ] + } +} + diff --git a/qt_plugins/assetimporters/libassimp.dylib b/qt_plugins/assetimporters/libassimp.dylib new file mode 100755 index 0000000..fcc24b2 Binary files /dev/null and b/qt_plugins/assetimporters/libassimp.dylib differ diff --git a/qt_plugins/canbus/libqtpassthrucanbus.dylib b/qt_plugins/canbus/libqtpassthrucanbus.dylib new file mode 100755 index 0000000..f81d632 Binary files /dev/null and b/qt_plugins/canbus/libqtpassthrucanbus.dylib differ diff --git a/qt_plugins/canbus/libqtpeakcanbus.dylib b/qt_plugins/canbus/libqtpeakcanbus.dylib new file mode 100755 index 0000000..b481c0a Binary files /dev/null and b/qt_plugins/canbus/libqtpeakcanbus.dylib differ diff --git a/qt_plugins/canbus/libqttinycanbus.dylib b/qt_plugins/canbus/libqttinycanbus.dylib new file mode 100755 index 0000000..e25a98b Binary files /dev/null and b/qt_plugins/canbus/libqttinycanbus.dylib differ diff --git a/qt_plugins/canbus/libqtvirtualcanbus.dylib b/qt_plugins/canbus/libqtvirtualcanbus.dylib new file mode 100755 index 0000000..1d0afa2 Binary files /dev/null and b/qt_plugins/canbus/libqtvirtualcanbus.dylib differ diff --git a/qt_plugins/designer/libqquickwidget.dylib b/qt_plugins/designer/libqquickwidget.dylib new file mode 100755 index 0000000..fa42225 Binary files /dev/null and b/qt_plugins/designer/libqquickwidget.dylib differ diff --git a/qt_plugins/designer/libqwebengineview.dylib b/qt_plugins/designer/libqwebengineview.dylib new file mode 100755 index 0000000..c0e98f8 Binary files /dev/null and b/qt_plugins/designer/libqwebengineview.dylib differ diff --git a/qt_plugins/generic/libqtuiotouchplugin.dylib b/qt_plugins/generic/libqtuiotouchplugin.dylib new file mode 100755 index 0000000..5d77bc6 Binary files /dev/null and b/qt_plugins/generic/libqtuiotouchplugin.dylib differ diff --git a/qt_plugins/geometryloaders/libdefaultgeometryloader.dylib b/qt_plugins/geometryloaders/libdefaultgeometryloader.dylib new file mode 100755 index 0000000..915e18b Binary files /dev/null and b/qt_plugins/geometryloaders/libdefaultgeometryloader.dylib differ diff --git a/qt_plugins/geometryloaders/libgltfgeometryloader.dylib b/qt_plugins/geometryloaders/libgltfgeometryloader.dylib new file mode 100755 index 0000000..c26e1e3 Binary files /dev/null and b/qt_plugins/geometryloaders/libgltfgeometryloader.dylib differ diff --git a/qt_plugins/geoservices/libqtgeoservices_itemsoverlay.dylib b/qt_plugins/geoservices/libqtgeoservices_itemsoverlay.dylib new file mode 100755 index 0000000..47ec78f Binary files /dev/null and b/qt_plugins/geoservices/libqtgeoservices_itemsoverlay.dylib differ diff --git a/qt_plugins/geoservices/libqtgeoservices_osm.dylib b/qt_plugins/geoservices/libqtgeoservices_osm.dylib new file mode 100755 index 0000000..ead5dd9 Binary files /dev/null and b/qt_plugins/geoservices/libqtgeoservices_osm.dylib differ diff --git a/qt_plugins/help/libhelpplugin.dylib b/qt_plugins/help/libhelpplugin.dylib new file mode 100755 index 0000000..e615f84 Binary files /dev/null and b/qt_plugins/help/libhelpplugin.dylib differ diff --git a/qt_plugins/iconengines/libqsvgicon.dylib b/qt_plugins/iconengines/libqsvgicon.dylib new file mode 100755 index 0000000..2334c1f Binary files /dev/null and b/qt_plugins/iconengines/libqsvgicon.dylib differ diff --git a/qt_plugins/imageformats/libqgif.dylib b/qt_plugins/imageformats/libqgif.dylib new file mode 100755 index 0000000..80c37d6 Binary files /dev/null and b/qt_plugins/imageformats/libqgif.dylib differ diff --git a/qt_plugins/imageformats/libqicns.dylib b/qt_plugins/imageformats/libqicns.dylib new file mode 100755 index 0000000..2a906b9 Binary files /dev/null and b/qt_plugins/imageformats/libqicns.dylib differ diff --git a/qt_plugins/imageformats/libqico.dylib b/qt_plugins/imageformats/libqico.dylib new file mode 100755 index 0000000..f8c1a2c Binary files /dev/null and b/qt_plugins/imageformats/libqico.dylib differ diff --git a/qt_plugins/imageformats/libqjp2.dylib b/qt_plugins/imageformats/libqjp2.dylib new file mode 100755 index 0000000..589265b Binary files /dev/null and b/qt_plugins/imageformats/libqjp2.dylib differ diff --git a/qt_plugins/imageformats/libqjpeg.dylib b/qt_plugins/imageformats/libqjpeg.dylib new file mode 100755 index 0000000..9b4c006 Binary files /dev/null and b/qt_plugins/imageformats/libqjpeg.dylib differ diff --git a/qt_plugins/imageformats/libqmacheif.dylib b/qt_plugins/imageformats/libqmacheif.dylib new file mode 100755 index 0000000..a5ca073 Binary files /dev/null and b/qt_plugins/imageformats/libqmacheif.dylib differ diff --git a/qt_plugins/imageformats/libqmng.dylib b/qt_plugins/imageformats/libqmng.dylib new file mode 100755 index 0000000..b03723d Binary files /dev/null and b/qt_plugins/imageformats/libqmng.dylib differ diff --git a/qt_plugins/imageformats/libqpdf.dylib b/qt_plugins/imageformats/libqpdf.dylib new file mode 100755 index 0000000..10a7c59 Binary files /dev/null and b/qt_plugins/imageformats/libqpdf.dylib differ diff --git a/qt_plugins/imageformats/libqsvg.dylib b/qt_plugins/imageformats/libqsvg.dylib new file mode 100755 index 0000000..a9cc580 Binary files /dev/null and b/qt_plugins/imageformats/libqsvg.dylib differ diff --git a/qt_plugins/imageformats/libqtga.dylib b/qt_plugins/imageformats/libqtga.dylib new file mode 100755 index 0000000..67f39da Binary files /dev/null and b/qt_plugins/imageformats/libqtga.dylib differ diff --git a/qt_plugins/imageformats/libqtiff.dylib b/qt_plugins/imageformats/libqtiff.dylib new file mode 100755 index 0000000..bf7ea97 Binary files /dev/null and b/qt_plugins/imageformats/libqtiff.dylib differ diff --git a/qt_plugins/imageformats/libqwbmp.dylib b/qt_plugins/imageformats/libqwbmp.dylib new file mode 100755 index 0000000..f057406 Binary files /dev/null and b/qt_plugins/imageformats/libqwbmp.dylib differ diff --git a/qt_plugins/imageformats/libqwebp.dylib b/qt_plugins/imageformats/libqwebp.dylib new file mode 100755 index 0000000..557482f Binary files /dev/null and b/qt_plugins/imageformats/libqwebp.dylib differ diff --git a/qt_plugins/multimedia/libdarwinmediaplugin.dylib b/qt_plugins/multimedia/libdarwinmediaplugin.dylib new file mode 100755 index 0000000..a2c0e2c Binary files /dev/null and b/qt_plugins/multimedia/libdarwinmediaplugin.dylib differ diff --git a/qt_plugins/networkinformation/libqglib.dylib b/qt_plugins/networkinformation/libqglib.dylib new file mode 100755 index 0000000..0855317 Binary files /dev/null and b/qt_plugins/networkinformation/libqglib.dylib differ diff --git a/qt_plugins/networkinformation/libqscnetworkreachability.dylib b/qt_plugins/networkinformation/libqscnetworkreachability.dylib new file mode 100755 index 0000000..72b348b Binary files /dev/null and b/qt_plugins/networkinformation/libqscnetworkreachability.dylib differ diff --git a/qt_plugins/opcua/libopen62541_backend.dylib b/qt_plugins/opcua/libopen62541_backend.dylib new file mode 100755 index 0000000..5578936 Binary files /dev/null and b/qt_plugins/opcua/libopen62541_backend.dylib differ diff --git a/qt_plugins/permissions/libqdarwinbluetoothpermission.a b/qt_plugins/permissions/libqdarwinbluetoothpermission.a new file mode 100644 index 0000000..b8122f3 Binary files /dev/null and b/qt_plugins/permissions/libqdarwinbluetoothpermission.a differ diff --git a/qt_plugins/permissions/libqdarwinbluetoothpermission.prl b/qt_plugins/permissions/libqdarwinbluetoothpermission.prl new file mode 100644 index 0000000..9f6d1ba --- /dev/null +++ b/qt_plugins/permissions/libqdarwinbluetoothpermission.prl @@ -0,0 +1,5 @@ +QMAKE_PRL_TARGET = libqdarwinbluetoothpermission.a +QMAKE_PRL_CONFIG = static +QMAKE_PRL_VERSION = 6.8.2 +QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework CoreBluetooth +QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework CoreBluetooth diff --git a/qt_plugins/permissions/libqdarwincalendarpermission.a b/qt_plugins/permissions/libqdarwincalendarpermission.a new file mode 100644 index 0000000..21e7ec4 Binary files /dev/null and b/qt_plugins/permissions/libqdarwincalendarpermission.a differ diff --git a/qt_plugins/permissions/libqdarwincalendarpermission.prl b/qt_plugins/permissions/libqdarwincalendarpermission.prl new file mode 100644 index 0000000..fb7e5e9 --- /dev/null +++ b/qt_plugins/permissions/libqdarwincalendarpermission.prl @@ -0,0 +1,5 @@ +QMAKE_PRL_TARGET = libqdarwincalendarpermission.a +QMAKE_PRL_CONFIG = static +QMAKE_PRL_VERSION = 6.8.2 +QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework EventKit +QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework EventKit diff --git a/qt_plugins/permissions/libqdarwincamerapermission.a b/qt_plugins/permissions/libqdarwincamerapermission.a new file mode 100644 index 0000000..f319588 Binary files /dev/null and b/qt_plugins/permissions/libqdarwincamerapermission.a differ diff --git a/qt_plugins/permissions/libqdarwincamerapermission.prl b/qt_plugins/permissions/libqdarwincamerapermission.prl new file mode 100644 index 0000000..1085b53 --- /dev/null +++ b/qt_plugins/permissions/libqdarwincamerapermission.prl @@ -0,0 +1,5 @@ +QMAKE_PRL_TARGET = libqdarwincamerapermission.a +QMAKE_PRL_CONFIG = static +QMAKE_PRL_VERSION = 6.8.2 +QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework AVFoundation +QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework AVFoundation diff --git a/qt_plugins/permissions/libqdarwincontactspermission.a b/qt_plugins/permissions/libqdarwincontactspermission.a new file mode 100644 index 0000000..548b88c Binary files /dev/null and b/qt_plugins/permissions/libqdarwincontactspermission.a differ diff --git a/qt_plugins/permissions/libqdarwincontactspermission.prl b/qt_plugins/permissions/libqdarwincontactspermission.prl new file mode 100644 index 0000000..a2d9c0e --- /dev/null +++ b/qt_plugins/permissions/libqdarwincontactspermission.prl @@ -0,0 +1,5 @@ +QMAKE_PRL_TARGET = libqdarwincontactspermission.a +QMAKE_PRL_CONFIG = static +QMAKE_PRL_VERSION = 6.8.2 +QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework Contacts +QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework Contacts diff --git a/qt_plugins/permissions/libqdarwinlocationpermission.a b/qt_plugins/permissions/libqdarwinlocationpermission.a new file mode 100644 index 0000000..6642bed Binary files /dev/null and b/qt_plugins/permissions/libqdarwinlocationpermission.a differ diff --git a/qt_plugins/permissions/libqdarwinlocationpermission.prl b/qt_plugins/permissions/libqdarwinlocationpermission.prl new file mode 100644 index 0000000..fe1aa38 --- /dev/null +++ b/qt_plugins/permissions/libqdarwinlocationpermission.prl @@ -0,0 +1,5 @@ +QMAKE_PRL_TARGET = libqdarwinlocationpermission.a +QMAKE_PRL_CONFIG = static +QMAKE_PRL_VERSION = 6.8.2 +QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework CoreLocation +QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework CoreLocation diff --git a/qt_plugins/permissions/libqdarwinmicrophonepermission.a b/qt_plugins/permissions/libqdarwinmicrophonepermission.a new file mode 100644 index 0000000..77ed4ff Binary files /dev/null and b/qt_plugins/permissions/libqdarwinmicrophonepermission.a differ diff --git a/qt_plugins/permissions/libqdarwinmicrophonepermission.prl b/qt_plugins/permissions/libqdarwinmicrophonepermission.prl new file mode 100644 index 0000000..ca6f7b7 --- /dev/null +++ b/qt_plugins/permissions/libqdarwinmicrophonepermission.prl @@ -0,0 +1,5 @@ +QMAKE_PRL_TARGET = libqdarwinmicrophonepermission.a +QMAKE_PRL_CONFIG = static +QMAKE_PRL_VERSION = 6.8.2 +QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework AVFoundation +QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework AVFoundation diff --git a/qt_plugins/permissions/objects-Release/QDarwinBluetoothPermissionPlugin_init/QDarwinBluetoothPermissionPlugin_init.cpp.o b/qt_plugins/permissions/objects-Release/QDarwinBluetoothPermissionPlugin_init/QDarwinBluetoothPermissionPlugin_init.cpp.o new file mode 100644 index 0000000..1f5594e Binary files /dev/null and b/qt_plugins/permissions/objects-Release/QDarwinBluetoothPermissionPlugin_init/QDarwinBluetoothPermissionPlugin_init.cpp.o differ diff --git a/qt_plugins/permissions/objects-Release/QDarwinCalendarPermissionPlugin_init/QDarwinCalendarPermissionPlugin_init.cpp.o b/qt_plugins/permissions/objects-Release/QDarwinCalendarPermissionPlugin_init/QDarwinCalendarPermissionPlugin_init.cpp.o new file mode 100644 index 0000000..8476489 Binary files /dev/null and b/qt_plugins/permissions/objects-Release/QDarwinCalendarPermissionPlugin_init/QDarwinCalendarPermissionPlugin_init.cpp.o differ diff --git a/qt_plugins/permissions/objects-Release/QDarwinCameraPermissionPlugin_init/QDarwinCameraPermissionPlugin_init.cpp.o b/qt_plugins/permissions/objects-Release/QDarwinCameraPermissionPlugin_init/QDarwinCameraPermissionPlugin_init.cpp.o new file mode 100644 index 0000000..f974b34 Binary files /dev/null and b/qt_plugins/permissions/objects-Release/QDarwinCameraPermissionPlugin_init/QDarwinCameraPermissionPlugin_init.cpp.o differ diff --git a/qt_plugins/permissions/objects-Release/QDarwinContactsPermissionPlugin_init/QDarwinContactsPermissionPlugin_init.cpp.o b/qt_plugins/permissions/objects-Release/QDarwinContactsPermissionPlugin_init/QDarwinContactsPermissionPlugin_init.cpp.o new file mode 100644 index 0000000..2410986 Binary files /dev/null and b/qt_plugins/permissions/objects-Release/QDarwinContactsPermissionPlugin_init/QDarwinContactsPermissionPlugin_init.cpp.o differ diff --git a/qt_plugins/permissions/objects-Release/QDarwinLocationPermissionPlugin_init/QDarwinLocationPermissionPlugin_init.cpp.o b/qt_plugins/permissions/objects-Release/QDarwinLocationPermissionPlugin_init/QDarwinLocationPermissionPlugin_init.cpp.o new file mode 100644 index 0000000..d836b6f Binary files /dev/null and b/qt_plugins/permissions/objects-Release/QDarwinLocationPermissionPlugin_init/QDarwinLocationPermissionPlugin_init.cpp.o differ diff --git a/qt_plugins/permissions/objects-Release/QDarwinMicrophonePermissionPlugin_init/QDarwinMicrophonePermissionPlugin_init.cpp.o b/qt_plugins/permissions/objects-Release/QDarwinMicrophonePermissionPlugin_init/QDarwinMicrophonePermissionPlugin_init.cpp.o new file mode 100644 index 0000000..94ff547 Binary files /dev/null and b/qt_plugins/permissions/objects-Release/QDarwinMicrophonePermissionPlugin_init/QDarwinMicrophonePermissionPlugin_init.cpp.o differ diff --git a/qt_plugins/platforminputcontexts/libqtvirtualkeyboardplugin.dylib b/qt_plugins/platforminputcontexts/libqtvirtualkeyboardplugin.dylib new file mode 100755 index 0000000..2c06f84 Binary files /dev/null and b/qt_plugins/platforminputcontexts/libqtvirtualkeyboardplugin.dylib differ diff --git a/qt_plugins/platforms/libqcocoa.dylib b/qt_plugins/platforms/libqcocoa.dylib new file mode 100755 index 0000000..889280a Binary files /dev/null and b/qt_plugins/platforms/libqcocoa.dylib differ diff --git a/qt_plugins/platforms/libqminimal.dylib b/qt_plugins/platforms/libqminimal.dylib new file mode 100755 index 0000000..e81a765 Binary files /dev/null and b/qt_plugins/platforms/libqminimal.dylib differ diff --git a/qt_plugins/platforms/libqoffscreen.dylib b/qt_plugins/platforms/libqoffscreen.dylib new file mode 100755 index 0000000..48d0a65 Binary files /dev/null and b/qt_plugins/platforms/libqoffscreen.dylib differ diff --git a/qt_plugins/position/libqtposition_cl.dylib b/qt_plugins/position/libqtposition_cl.dylib new file mode 100755 index 0000000..7b2609f Binary files /dev/null and b/qt_plugins/position/libqtposition_cl.dylib differ diff --git a/qt_plugins/position/libqtposition_nmea.dylib b/qt_plugins/position/libqtposition_nmea.dylib new file mode 100755 index 0000000..16f391c Binary files /dev/null and b/qt_plugins/position/libqtposition_nmea.dylib differ diff --git a/qt_plugins/position/libqtposition_positionpoll.dylib b/qt_plugins/position/libqtposition_positionpoll.dylib new file mode 100755 index 0000000..57694c8 Binary files /dev/null and b/qt_plugins/position/libqtposition_positionpoll.dylib differ diff --git a/qt_plugins/qmllint/libquicklintplugin.dylib b/qt_plugins/qmllint/libquicklintplugin.dylib new file mode 100755 index 0000000..7030a05 Binary files /dev/null and b/qt_plugins/qmllint/libquicklintplugin.dylib differ diff --git a/qt_plugins/qmlls/libqmllsquickplugin.dylib b/qt_plugins/qmlls/libqmllsquickplugin.dylib new file mode 100755 index 0000000..ba20b05 Binary files /dev/null and b/qt_plugins/qmlls/libqmllsquickplugin.dylib differ diff --git a/qt_plugins/qmltooling/libqmldbg_debugger.dylib b/qt_plugins/qmltooling/libqmldbg_debugger.dylib new file mode 100755 index 0000000..2fa184c Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_debugger.dylib differ diff --git a/qt_plugins/qmltooling/libqmldbg_inspector.dylib b/qt_plugins/qmltooling/libqmldbg_inspector.dylib new file mode 100755 index 0000000..a9503ce Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_inspector.dylib differ diff --git a/qt_plugins/qmltooling/libqmldbg_local.dylib b/qt_plugins/qmltooling/libqmldbg_local.dylib new file mode 100755 index 0000000..994227c Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_local.dylib differ diff --git a/qt_plugins/qmltooling/libqmldbg_messages.dylib b/qt_plugins/qmltooling/libqmldbg_messages.dylib new file mode 100755 index 0000000..e359090 Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_messages.dylib differ diff --git a/qt_plugins/qmltooling/libqmldbg_native.dylib b/qt_plugins/qmltooling/libqmldbg_native.dylib new file mode 100755 index 0000000..8cc2349 Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_native.dylib differ diff --git a/qt_plugins/qmltooling/libqmldbg_nativedebugger.dylib b/qt_plugins/qmltooling/libqmldbg_nativedebugger.dylib new file mode 100755 index 0000000..f0f6df7 Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_nativedebugger.dylib differ diff --git a/qt_plugins/qmltooling/libqmldbg_preview.dylib b/qt_plugins/qmltooling/libqmldbg_preview.dylib new file mode 100755 index 0000000..0b3eab2 Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_preview.dylib differ diff --git a/qt_plugins/qmltooling/libqmldbg_profiler.dylib b/qt_plugins/qmltooling/libqmldbg_profiler.dylib new file mode 100755 index 0000000..7d12387 Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_profiler.dylib differ diff --git a/qt_plugins/qmltooling/libqmldbg_quick3dprofiler.dylib b/qt_plugins/qmltooling/libqmldbg_quick3dprofiler.dylib new file mode 100755 index 0000000..64a0904 Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_quick3dprofiler.dylib differ diff --git a/qt_plugins/qmltooling/libqmldbg_quickprofiler.dylib b/qt_plugins/qmltooling/libqmldbg_quickprofiler.dylib new file mode 100755 index 0000000..dddba4d Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_quickprofiler.dylib differ diff --git a/qt_plugins/qmltooling/libqmldbg_server.dylib b/qt_plugins/qmltooling/libqmldbg_server.dylib new file mode 100755 index 0000000..57bc0ac Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_server.dylib differ diff --git a/qt_plugins/qmltooling/libqmldbg_tcp.dylib b/qt_plugins/qmltooling/libqmldbg_tcp.dylib new file mode 100755 index 0000000..4c0dda8 Binary files /dev/null and b/qt_plugins/qmltooling/libqmldbg_tcp.dylib differ diff --git a/qt_plugins/renderers/libopenglrenderer.dylib b/qt_plugins/renderers/libopenglrenderer.dylib new file mode 100755 index 0000000..69f7f8a Binary files /dev/null and b/qt_plugins/renderers/libopenglrenderer.dylib differ diff --git a/qt_plugins/renderers/librhirenderer.dylib b/qt_plugins/renderers/librhirenderer.dylib new file mode 100755 index 0000000..4d80219 Binary files /dev/null and b/qt_plugins/renderers/librhirenderer.dylib differ diff --git a/qt_plugins/renderplugins/libscene2d.dylib b/qt_plugins/renderplugins/libscene2d.dylib new file mode 100755 index 0000000..297aadf Binary files /dev/null and b/qt_plugins/renderplugins/libscene2d.dylib differ diff --git a/qt_plugins/sceneparsers/libassimpsceneimport.dylib b/qt_plugins/sceneparsers/libassimpsceneimport.dylib new file mode 100755 index 0000000..c30c9c5 Binary files /dev/null and b/qt_plugins/sceneparsers/libassimpsceneimport.dylib differ diff --git a/qt_plugins/sceneparsers/libgltfsceneexport.dylib b/qt_plugins/sceneparsers/libgltfsceneexport.dylib new file mode 100755 index 0000000..701b4bc Binary files /dev/null and b/qt_plugins/sceneparsers/libgltfsceneexport.dylib differ diff --git a/qt_plugins/sceneparsers/libgltfsceneimport.dylib b/qt_plugins/sceneparsers/libgltfsceneimport.dylib new file mode 100755 index 0000000..54836de Binary files /dev/null and b/qt_plugins/sceneparsers/libgltfsceneimport.dylib differ diff --git a/qt_plugins/scxmldatamodel/libqscxmlecmascriptdatamodel.dylib b/qt_plugins/scxmldatamodel/libqscxmlecmascriptdatamodel.dylib new file mode 100755 index 0000000..43c9b8f Binary files /dev/null and b/qt_plugins/scxmldatamodel/libqscxmlecmascriptdatamodel.dylib differ diff --git a/qt_plugins/sensors/libqtsensors_generic.dylib b/qt_plugins/sensors/libqtsensors_generic.dylib new file mode 100755 index 0000000..00b9bc5 Binary files /dev/null and b/qt_plugins/sensors/libqtsensors_generic.dylib differ diff --git a/qt_plugins/sqldrivers/libqsqlite.dylib b/qt_plugins/sqldrivers/libqsqlite.dylib new file mode 100755 index 0000000..57c2d28 Binary files /dev/null and b/qt_plugins/sqldrivers/libqsqlite.dylib differ diff --git a/qt_plugins/styles/libqmacstyle.dylib b/qt_plugins/styles/libqmacstyle.dylib new file mode 100755 index 0000000..1f56999 Binary files /dev/null and b/qt_plugins/styles/libqmacstyle.dylib differ diff --git a/qt_plugins/texttospeech/libqtexttospeech_mock.dylib b/qt_plugins/texttospeech/libqtexttospeech_mock.dylib new file mode 100755 index 0000000..8cae0ba Binary files /dev/null and b/qt_plugins/texttospeech/libqtexttospeech_mock.dylib differ diff --git a/qt_plugins/texttospeech/libqtexttospeech_speech_macos.dylib b/qt_plugins/texttospeech/libqtexttospeech_speech_macos.dylib new file mode 100755 index 0000000..3de7c3d Binary files /dev/null and b/qt_plugins/texttospeech/libqtexttospeech_speech_macos.dylib differ diff --git a/qt_plugins/texttospeech/libqtexttospeech_speechdarwin.dylib b/qt_plugins/texttospeech/libqtexttospeech_speechdarwin.dylib new file mode 100755 index 0000000..8f0e6d8 Binary files /dev/null and b/qt_plugins/texttospeech/libqtexttospeech_speechdarwin.dylib differ diff --git a/qt_plugins/tls/libqcertonlybackend.dylib b/qt_plugins/tls/libqcertonlybackend.dylib new file mode 100755 index 0000000..5d5ec6a Binary files /dev/null and b/qt_plugins/tls/libqcertonlybackend.dylib differ diff --git a/qt_plugins/tls/libqopensslbackend.dylib b/qt_plugins/tls/libqopensslbackend.dylib new file mode 100755 index 0000000..b5281dc Binary files /dev/null and b/qt_plugins/tls/libqopensslbackend.dylib differ diff --git a/qt_plugins/tls/libqsecuretransportbackend.dylib b/qt_plugins/tls/libqsecuretransportbackend.dylib new file mode 100755 index 0000000..152a3f6 Binary files /dev/null and b/qt_plugins/tls/libqsecuretransportbackend.dylib differ diff --git a/qt_plugins/webview/libqtwebview_darwin.dylib b/qt_plugins/webview/libqtwebview_darwin.dylib new file mode 100755 index 0000000..9d09aae Binary files /dev/null and b/qt_plugins/webview/libqtwebview_darwin.dylib differ diff --git a/qt_plugins/webview/libqtwebview_webengine.dylib b/qt_plugins/webview/libqtwebview_webengine.dylib new file mode 100755 index 0000000..8872889 Binary files /dev/null and b/qt_plugins/webview/libqtwebview_webengine.dylib differ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 407ef26..6f88e31 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,7 +10,7 @@ set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "Which macOS architectur project(retro-imager LANGUAGES CXX C) set(IMAGER_VERSION_MAJOR 0) -set(IMAGER_VERSION_MINOR 3) +set(IMAGER_VERSION_MINOR 5) set(IMAGER_VERSION_PATCH 0) set(IMAGER_VERSION_STR "${IMAGER_VERSION_MAJOR}.${IMAGER_VERSION_MINOR}.${IMAGER_VERSION_PATCH}") set(IMAGER_VERSION_CSV "${IMAGER_VERSION_MAJOR},${IMAGER_VERSION_MINOR},${IMAGER_VERSION_PATCH},0") @@ -21,10 +21,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) #add_link_options("-fsanitize=address") # You _must_ set your Qt6 root for the build to progress. -set(Qt6_ROOT "/opt/Qt/6.7.2/gcc_arm64" CACHE PATH "Your Qt6 root path") +set(Qt6_ROOT "$ENV{QT6_ROOT}" CACHE PATH "Your Qt6 root path") if (WIN32) - set(MINGW64_ROOT "" CACHE PATH "Your MinGW64 root path, likely provided by QtCreator") + set(MINGW64_ROOT "$ENV{MINGW64_ROOT}" CACHE PATH "Your MinGW64 root path, likely provided by QtCreator") endif() if (APPLE) @@ -433,32 +433,30 @@ elseif(APPLE) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -qmldir="${CMAKE_CURRENT_SOURCE_DIR}") - add_custom_command(TARGET ${PROJECT_NAME} - POST_BUILD - COMMAND mv "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app") + # Don't rename the app bundle, use the project name consistently # Sign the .app. add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND codesign -f --deep --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app") + COMMAND codesign -f --deep --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app") # Create the .dmg for distribution add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND hdiutil create -volname "Raspberry Pi Imager" -srcfolder "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app" -ov -format UDBZ "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg") + COMMAND hdiutil create -volname "${PROJECT_NAME}" -srcfolder "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -ov -format UDBZ "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg") # Sign the .dmg for distribution, but do not initialise notarisation add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND codesign -f --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg") + COMMAND codesign -f --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg") if(IMAGER_NOTARIZE_APP) if(IMAGER_NOTARIZE_KEYCHAIN_PROFILE) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND xcrun notarytool submit "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg" --wait --keychain-profile "${IMAGER_NOTARIZE_KEYCHAIN_PROFILE}") + COMMAND xcrun notarytool submit "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg" --wait --keychain-profile "${IMAGER_NOTARIZE_KEYCHAIN_PROFILE}") add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND xcrun stapler staple "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg") + COMMAND xcrun stapler staple "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg") else() message(FATAL_ERROR "Notarization requested, but no keychain profile is supplied") endif(IMAGER_NOTARIZE_KEYCHAIN_PROFILE) @@ -471,12 +469,12 @@ elseif(APPLE) # Unsigned application add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app" -qmldir="${CMAKE_CURRENT_SOURCE_DIR}" -always-overwrite -no-strip -dmg) + COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -qmldir="${CMAKE_CURRENT_SOURCE_DIR}" -always-overwrite -no-strip -dmg) endif(IMAGER_SIGNED_APP) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND "mv" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager-${IMAGER_VERSION_STR}.dmg") + COMMAND "mv" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${IMAGER_VERSION_STR}.dmg") else() # UNIX, Linux systems diff --git a/src/config.h b/src/config.h index db32119..3527123 100644 --- a/src/config.h +++ b/src/config.h @@ -8,13 +8,13 @@ /* Repository URL */ -#define OSLIST_URL "https://raw.githubusercontent.com/cmclark00/retro-imager/refs/heads/dev/src/os_list.json" +#define OSLIST_URL "https://raw.githubusercontent.com/cmclark00/retro-imager/refs/heads/fix/src/os_list.json" /* Time synchronization URL (only used on eglfs QPA platform, URL must be HTTP) */ #define TIME_URL "http://downloads.raspberrypi.org/os_list_imagingutility_v4.json?time_synchronization" /* Phone home the name of images downloaded for image popularity ranking */ -#define TELEMETRY_URL "https://rpi-imager-stats.raspberrypi.com/downloads" +#define TELEMETRY_URL "http://technerdguys.com/telemetry-endpoint" /* Hash algorithm for verifying (uncompressed image) checksum */ #define OSLIST_HASH_ALGORITHM QCryptographicHash::Sha256 diff --git a/src/icons/banner.png b/src/icons/banner.png new file mode 100644 index 0000000..000982c Binary files /dev/null and b/src/icons/banner.png differ diff --git a/src/icons/icon.png b/src/icons/icon.png new file mode 100644 index 0000000..9ca2554 Binary files /dev/null and b/src/icons/icon.png differ diff --git a/src/icons/rpi-imager.ico b/src/icons/rpi-imager.ico index ecb494b..bf62901 100644 Binary files a/src/icons/rpi-imager.ico and b/src/icons/rpi-imager.ico differ diff --git a/src/main.qml b/src/main.qml index 87c99b0..7b202f8 100644 --- a/src/main.qml +++ b/src/main.qml @@ -11,7 +11,7 @@ import QtQuick.Controls.Material 2.2 import "qmlcomponents" ApplicationWindow { - // Define the colors + // Define the colors property color beigeColor: "#c4bebb" property color maroonColor: "#800000" property color yellowColor: "#fcad01" @@ -68,11 +68,12 @@ ApplicationWindow { Image { id: image - source: "icons/logo_sxs_imager.png" + source: "icons/banner.png" width: window.width * 1 height: window.height / 3 smooth: true antialiasing: true + fillMode: image.PreserveAspectFit } } @@ -137,8 +138,8 @@ ApplicationWindow { bgrect.mouseOver = false } onClicked: { - hwpopup.open() - hwlist.forceActiveFocus() + hwpopup.open() + hwlist.forceActiveFocus() } } Rectangle { @@ -194,8 +195,8 @@ ApplicationWindow { bgrect1.mouseOver = false } onClicked: { - ospopup.open() - osswipeview.currentItem.forceActiveFocus() + ospopup.open() + osswipeview.currentItem.forceActiveFocus() } } @@ -253,10 +254,10 @@ ApplicationWindow { bgrect2.mouseOver = false } onClicked: { - imageWriter.startDriveListPolling() - dstpopup.open() - dstlist.forceActiveFocus() - } + imageWriter.startDriveListPolling() + dstpopup.open() + dstlist.forceActiveFocus() + } } Rectangle { @@ -478,6 +479,8 @@ ApplicationWindow { } } + // Popup for hardware device selection with nested structure + // Updated hwpopup definition Popup { id: hwpopup x: 50 @@ -487,6 +490,21 @@ ApplicationWindow { padding: 0 closePolicy: Popup.CloseOnEscape property string hwselected: "" + property string categorySelected: "" + + // Make sure to create both lists when the popup opens + onOpened: { + // Initialize the SwipeView if needed + if (hwswipeview.count < 2) { + // Make sure we already have the second view for device list + var secondView = subHwlist.createObject(hwswipeview) + hwswipeview.addItem(secondView) + } + + // Make sure we're showing the first view (categories) + hwswipeview.currentIndex = 0 + hwTitleText.text = qsTr("Retro Gaming Handheld Device") + } // background of title Rectangle { @@ -498,7 +516,8 @@ ApplicationWindow { width: parent.width Text { - text: qsTr("Raspberry Pi Device") + id: hwTitleText + text: qsTr("Retro Gaming Handheld Device") horizontalAlignment: Text.AlignHCenter anchors.fill: parent anchors.topMargin: 10 @@ -527,6 +546,7 @@ ApplicationWindow { } } } + // line under title Rectangle { id: hwpopup_title_separator @@ -536,30 +556,109 @@ ApplicationWindow { height: 1 } - ListView { - id: hwlist - clip: true - model: ListModel { - id: deviceModel - ListElement { - name: qsTr("[ All ]") - tags: "[]" - icon: "" - description: "" - matching_type: "exclusive" - } - } - currentIndex: -1 - delegate: hwdelegate + SwipeView { anchors.top: hwpopup_title_separator.bottom anchors.left: parent.left anchors.right: parent.right anchors.bottom: parent.bottom + id: hwswipeview + interactive: false + clip: true + // Add debug printing for SwipeView changes + onCurrentIndexChanged: { + console.log("SwipeView current index changed to: " + currentIndex) + } + + ListView { + id: hwlist + clip: true + model: ListModel { + id: categoryModel + // Main categories will be loaded from JSON + } + currentIndex: -1 + delegate: hwdelegate + boundsBehavior: Flickable.StopAtBounds + ScrollBar.vertical: ScrollBar { + anchors.right: parent.right + width: 10 + policy: hwlist.contentHeight > hwlist.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded + } + Keys.onSpacePressed: { + if (currentIndex != -1) + selectHWcategory(model.get(currentIndex)) + } + Accessible.onPressAction: { + if (currentIndex != -1) + selectHWcategory(model.get(currentIndex)) + } + Keys.onEnterPressed: Keys.onSpacePressed(event) + Keys.onReturnPressed: Keys.onSpacePressed(event) + Keys.onRightPressed: { + // Navigate into subcategories + if (currentIndex != -1 && typeof model.get(currentIndex).subitems !== "undefined") + selectHWcategory(model.get(currentIndex), true) + } + } + + // Add the initial device list view directly to ensure it exists + ListView { + id: initialDeviceList + clip: true + model: ListModel { + ListElement { + name: "Back" + tags: "[]" + icon: "icons/ic_chevron_left_40px.svg" + description: "Go back to main menu" + } + } + currentIndex: -1 + delegate: hwdelegate + boundsBehavior: Flickable.StopAtBounds + ScrollBar.vertical: ScrollBar { + width: 10 + policy: parent.contentHeight > parent.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded + } + Keys.onSpacePressed: { + if (currentIndex != -1) + selectHWitem(model.get(currentIndex)) + } + Accessible.onPressAction: { + if (currentIndex != -1) + selectHWitem(model.get(currentIndex)) + } + Keys.onEnterPressed: Keys.onSpacePressed(event) + Keys.onReturnPressed: Keys.onSpacePressed(event) + Keys.onLeftPressed: { + hwswipeview.decrementCurrentIndex() + hwpopup.categorySelected = "" + hwTitleText.text = qsTr("Retro Gaming Handheld Device") + } + } + } + } + + // Component for the device subcategory list + Component { + id: subHwlist + + ListView { + clip: true + model: ListModel { + ListElement { + name: "Back" + tags: "[]" + icon: "icons/ic_chevron_left_40px.svg" + description: "Go back to main menu" + } + } + currentIndex: -1 + delegate: hwdelegate boundsBehavior: Flickable.StopAtBounds ScrollBar.vertical: ScrollBar { - anchors.right: parent.right width: 10 - policy: hwlist.contentHeight > hwlist.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded + policy: parent.contentHeight > parent.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded } Keys.onSpacePressed: { if (currentIndex != -1) @@ -571,6 +670,11 @@ ApplicationWindow { } Keys.onEnterPressed: Keys.onSpacePressed(event) Keys.onReturnPressed: Keys.onSpacePressed(event) + Keys.onLeftPressed: { + hwswipeview.decrementCurrentIndex() + hwpopup.categorySelected = "" + hwTitleText.text = qsTr("Retro Gaming Handheld Device") + } } } @@ -742,13 +846,14 @@ ApplicationWindow { } } + // Hardware delegate component for displaying devices and categories Component { id: hwdelegate Item { width: window.width-100 height: contentLayout.implicitHeight + 24 - Accessible.name: name+".\n"+description + Accessible.name: name+".\n"+(typeof description === "undefined" ? "" : description) MouseArea { id: hwMouseArea @@ -757,27 +862,31 @@ ApplicationWindow { hoverEnabled: true onEntered: { - bgrect.mouseOver = true + bgrect3.mouseOver = true } onExited: { - bgrect.mouseOver = false + bgrect3.mouseOver = false } onClicked: { - selectHWitem(model) + if (typeof subitems !== "undefined" && subitems) { + selectHWcategory(model) + } else { + selectHWitem(model) + } } } Rectangle { - id: bgrect + id: bgrect3 anchors.fill: parent color: accentColor visible: mouseOver && parent.ListView.view.currentIndex !== index property bool mouseOver: false } Rectangle { - id: borderrect + id: borderrect2 implicitHeight: 1 implicitWidth: parent.width color: accentColor @@ -816,11 +925,21 @@ ApplicationWindow { Text { Layout.fillWidth: true + text: typeof description === "undefined" ? "" : description font.family: roboto.name wrapMode: Text.WordWrap color: accentColor } } + + // Show right chevron for categories with subitems + Image { + source: "icons/ic_chevron_right_40px.svg" + visible: typeof subitems !== "undefined" && subitems + Layout.preferredHeight: 40 + Layout.preferredWidth: 40 + fillMode: Image.PreserveAspectFit + } } } } @@ -1552,54 +1671,118 @@ ApplicationWindow { } } + // Function to fetch OS list and populate the hardware categories function fetchOSlist() { - var oslist_json = imageWriter.getFilteredOSlist(); - var o = JSON.parse(oslist_json) - var oslist_parsed = oslistFromJson(o) - if (oslist_parsed === false) - return - osmodel.clear() - for (var i in oslist_parsed) { - osmodel.append(oslist_parsed[i]) - } + try { + var oslist_json = imageWriter.getFilteredOSlist(); + var o = JSON.parse(oslist_json); + var oslist_parsed = oslistFromJson(o); + + if (oslist_parsed === false) { + return; + } + + osmodel.clear(); + for (var i in oslist_parsed) { + osmodel.append(oslist_parsed[i]); + } - if ("imager" in o) { - var imager = o["imager"] + if ("imager" in o) { + var imager = o["imager"]; - if ("devices" in imager) - { - deviceModel.clear() - var devices = imager["devices"] - for (var j in devices) - { - devices[j]["tags"] = JSON.stringify(devices[j]["tags"]) - deviceModel.append(devices[j]) - if ("default" in devices[j] && devices[j]["default"]) - { - hwlist.currentIndex = deviceModel.count-1 + if ("devices" in imager) { + // Clear the category model + categoryModel.clear(); + + // Add an "All" option at the top + categoryModel.append({ + name: qsTr("[ All ]"), + tags: "[]", + icon: "", + description: qsTr("Show firmware for all devices"), + matching_type: "inclusive" + }); + + // Process device categories more safely + var devices = imager["devices"]; + if (devices && Array.isArray(devices)) { + for (var j = 0; j < devices.length; j++) { + // Create a plain JavaScript object (not a complex QML type) + var device = { + name: devices[j].name || "", + description: devices[j].description || "", + icon: devices[j].icon || "", + matching_type: devices[j].matching_type || "" + }; + + // Handle subitems properly + if (devices[j].subitems && Array.isArray(devices[j].subitems)) { + // Create a new array for subitems + var subitems = []; + + for (var k = 0; k < devices[j].subitems.length; k++) { + var subitem = devices[j].subitems[k]; + + // Create a plain object with only the properties we need + var newSubitem = { + name: subitem.name || "", + description: subitem.description || "", + icon: subitem.icon || "", + matching_type: subitem.matching_type || "" + }; + + // Ensure tags is a properly formatted string + if (subitem.tags) { + if (typeof subitem.tags === "string") { + newSubitem.tags = subitem.tags; + } else if (Array.isArray(subitem.tags)) { + newSubitem.tags = JSON.stringify(subitem.tags); + } else { + newSubitem.tags = "[]"; + } + } else { + newSubitem.tags = "[]"; + } + + subitems.push(newSubitem); + } + + // Add the subitems array + device.subitems = subitems; + } + + // Add the device category to the model + categoryModel.append(device); + } + } + } + + // Rest of your function remains unchanged + if (imageWriter.getBoolSetting("check_version") && "latest_version" in imager && "url" in imager) { + if (!imageWriter.isEmbeddedMode() && imageWriter.isVersionNewer(imager["latest_version"])) { + updatepopup.url = imager["url"]; + updatepopup.openPopup(); + } + } + + if ("default_os" in imager) { + selectNamedOS(imager["default_os"], osmodel); + } + + if (imageWriter.isEmbeddedMode()) { + if ("embedded_default_os" in imager) { + selectNamedOS(imager["embedded_default_os"], osmodel); + } + if ("embedded_default_destination" in imager) { + imageWriter.startDriveListPolling(); + setDefaultDest.drive = imager["embedded_default_destination"]; + setDefaultDest.start(); } } } - - if (imageWriter.getBoolSetting("check_version") && "latest_version" in imager && "url" in imager) { - if (!imageWriter.isEmbeddedMode() && imageWriter.isVersionNewer(imager["latest_version"])) { - updatepopup.url = imager["url"] - updatepopup.openPopup() - } - } - if ("default_os" in imager) { - selectNamedOS(imager["default_os"], osmodel) - } - if (imageWriter.isEmbeddedMode()) { - if ("embedded_default_os" in imager) { - selectNamedOS(imager["embedded_default_os"], osmodel) - } - if ("embedded_default_destination" in imager) { - imageWriter.startDriveListPolling() - setDefaultDest.drive = imager["embedded_default_destination"] - setDefaultDest.start() - } - } + } catch (e) { + console.error("Error in fetchOSlist:", e); + onError("Error loading device list: " + e.message); } } @@ -1643,63 +1826,265 @@ ApplicationWindow { return m } + // Function to handle new category/subcategory hardware list + function newHwSublist() { + try { + // Make sure we have enough items in SwipeView + if (hwswipeview.count <= hwswipeview.currentIndex + 1) { + var newlist = subHwlist.createObject(hwswipeview); + if (!newlist) { + console.error("Failed to create subHwlist component"); + return null; + } + hwswipeview.addItem(newlist); + } + + var nextView = hwswipeview.itemAt(hwswipeview.currentIndex + 1); + if (!nextView) { + console.error("Failed to get next view in SwipeView"); + return null; + } + + var m = nextView.model; + if (!m) { + console.error("Next view does not have a model"); + return null; + } + + // Clear existing items except for the first one (Back button) + if (m.count > 1) { + m.remove(1, m.count - 1); + } + + return m; + } catch (e) { + console.error("Error in newHwSublist:", e); + return null; + } + } + + // Function to select a hardware category (parent item with subitems) + function selectHWcategory(hwmodel, navigateOnly) { + try { + // Add defensive checks + if (!hwmodel) { + console.error("selectHWcategory called with null model"); + return; + } + + if (hwmodel.name === qsTr("Back")) { + hwswipeview.decrementCurrentIndex(); + hwpopup.categorySelected = ""; + hwTitleText.text = qsTr("Retro Gaming Handheld Device"); + return; + } + + // Update the title to show current category + hwTitleText.text = hwmodel.name; + hwpopup.categorySelected = hwmodel.name; + + // Make sure we have a SwipeView with at least two items + if (hwswipeview.count < 2) { + // Create a new sublist view if needed + var newlist = subHwlist.createObject(hwswipeview); + if (!newlist) { + console.error("Failed to create new subHwlist"); + return; + } + hwswipeview.addItem(newlist); + } + + // Get the model of the next view + var nextView = hwswipeview.itemAt(hwswipeview.currentIndex + 1); + if (!nextView) { + console.error("Failed to get next view in SwipeView"); + return; + } + + var m = nextView.model; + if (!m) { + console.error("Next view does not have a model"); + return; + } + + // Clear all items except the first one (Back button) + if (m.count > 1) { + m.remove(1, m.count - 1); + } + + // Parse subitems if they exist - use a safer approach + if (typeof hwmodel.subitems !== "undefined" && hwmodel.subitems) { + var subitems = hwmodel.subitems; + + console.log("Processing subitems for: " + hwmodel.name); + console.log("Subitems type: " + typeof subitems); + + // Check if we need to convert an object to an array + if (!Array.isArray(subitems) && typeof subitems === "object") { + console.log("Converting object to array"); + var subitemsArray = []; + for (var key in subitems) { + if (subitems.hasOwnProperty(key)) { + var subitem = subitems[key]; + // Make sure each item has a name property + if (typeof subitem === "object") { + if (!subitem.name && key) { + subitem.name = key; + } + subitemsArray.push(subitem); + } + } + } + subitems = subitemsArray; + } + + // Make sure subitems is an array before iterating + if (Array.isArray(subitems)) { + console.log("Subitems count: " + subitems.length); + + for (var i = 0; i < subitems.length; i++) { + console.log("Processing subitem: " + i + " - " + (subitems[i].name || "unnamed")); + + // Create a simple object with just the properties we need + var item = { + name: subitems[i].name || "", + description: subitems[i].description || "", + icon: subitems[i].icon || "", + matching_type: subitems[i].matching_type || "" + }; + + // Handle tags appropriately + if (typeof subitems[i].tags === "string") { + item.tags = subitems[i].tags; + } else if (Array.isArray(subitems[i].tags)) { + item.tags = JSON.stringify(subitems[i].tags); + } else { + item.tags = "[]"; + } + + m.append(item); + } + + // Now explicitly increment the SwipeView index to show the device list + console.log("Setting next view current index to 0"); + nextView.currentIndex = 0; + + console.log("Incrementing SwipeView from index: " + hwswipeview.currentIndex); + hwswipeview.incrementCurrentIndex(); + console.log("New SwipeView index: " + hwswipeview.currentIndex); + } else { + console.error("Subitems is not an array or object: " + typeof subitems); + onError("Error: Invalid subitems format"); + } + } else { + console.log("No subitems found for: " + hwmodel.name); + + // If it's not a navigation-only action and has no subitems, select the item + if (!navigateOnly) { + selectHWitem(hwmodel); + } + } + } catch (e) { + console.error("Error in selectHWcategory:", e); + onError("Error navigating hardware categories: " + e.message); + } + } + function selectHWitem(hwmodel) { - /* Default is exclusive matching */ - var inclusive = false - - if (hwmodel.matching_type) { - switch (hwmodel.matching_type) { - case "exclusive": - break; - case "inclusive": - inclusive = true - break; + try { + // Add defensive checks + if (!hwmodel) { + console.error("selectHWitem called with null model"); + return; } - } - imageWriter.setHWFilterList(hwmodel.tags, inclusive) - - /* Reload list */ - var oslist_json = imageWriter.getFilteredOSlist(); - var o = JSON.parse(oslist_json) - var oslist_parsed = oslistFromJson(o) - if (oslist_parsed === false) - return - - /* As we're filtering the OS list, we need to ensure we present a 'Recommended' OS. - * To do this, we exploit a convention of how we build the OS list. By convention, - * the preferred OS for a device is listed at the top level of the list, and is at the - * lowest index. So.. - */ - if (oslist_parsed.length != 0) { - var candidate = oslist_parsed[0] - - if ("description" in candidate && - !("subitems" in candidate) && - !candidate["description"].includes("(Recommended)") - ) - { - candidate["description"] += " (Recommended)" + if (hwmodel.name === qsTr("Back")) { + hwswipeview.decrementCurrentIndex(); + hwTitleText.text = qsTr("Retro Gaming Handheld Device"); + hwpopup.categorySelected = ""; + return; } + + // Default is exclusive matching + var inclusive = false; + + if (hwmodel.matching_type) { + switch (hwmodel.matching_type) { + case "exclusive": + break; + case "inclusive": + inclusive = true; + break; + } + } + + // Handle tags with extra care + var tags = []; + + try { + if (typeof hwmodel.tags === "string") { + if (hwmodel.tags === "[]" || hwmodel.tags === "") { + // Empty tags array + tags = []; + } else { + // Parse JSON string + tags = JSON.parse(hwmodel.tags); + } + } else if (Array.isArray(hwmodel.tags)) { + // Direct array + tags = hwmodel.tags; + } else if (hwmodel.tags) { + // Some other value, convert to string and try to parse + tags = JSON.parse(String(hwmodel.tags)); + } + } catch (e) { + console.error("Error parsing tags:", e); + tags = []; + } + + // Call the filtering function with the parsed tags + console.log("Setting HW filter with tags:", JSON.stringify(tags)); + imageWriter.setHWFilterList(tags, inclusive); + + // Reload list + var oslist_json = imageWriter.getFilteredOSlist(); + var o = JSON.parse(oslist_json); + var oslist_parsed = oslistFromJson(o); + + if (oslist_parsed === false) { + return; + } + + if (oslist_parsed.length != 0) { + var candidate = oslist_parsed[0]; + + if ("description" in candidate && + !("subitems" in candidate) && + !candidate["description"].includes("(Recommended)") + ) + { + candidate["description"] += " (Recommended)"; + } + } + + osmodel.clear(); + for (var i in oslist_parsed) { + osmodel.append(oslist_parsed[i]); + } + + // When the HW device is changed, reset the OS selection + oslist.currentIndex = -1; + osswipeview.currentIndex = 0; + imageWriter.setSrc(""); + osbutton.text = qsTr("CHOOSE CFW"); + writebutton.enabled = false; + + hwbutton.text = hwmodel.name; + hwpopup.close(); + } catch (e) { + console.error("Error in selectHWitem:", e); + onError("Error selecting hardware item: " + e.message); } - - osmodel.clear() - for (var i in oslist_parsed) { - osmodel.append(oslist_parsed[i]) - } - - // When the HW device is changed, reset the OS selection otherwise - // you get a weird effect with the selection moving around in the list - // when the user next opens the OS list, and the user could still have - // an OS selected which isn't compatible with this HW device - oslist.currentIndex = -1 - osswipeview.currentIndex = 0 - imageWriter.setSrc("") - osbutton.text = qsTr("CHOOSE CFW") - writebutton.enabled = false - - hwbutton.text = hwmodel.name - hwpopup.close() } /// Is the item a sub-list or sub-sub-list in the OS selection model? @@ -1724,6 +2109,29 @@ ApplicationWindow { if (typeof(d.subitems_json) == "string" && d.subitems_json !== "") { var m = newSublist() var subitems = JSON.parse(d.subitems_json) + + // Handle the case when subitems is an object instead of an array + if (!Array.isArray(subitems) && typeof subitems === "object") { + console.log("Converting object to array from subitems_json"); + + // Create an array from the object properties + var subitemsArray = []; + for (var key in subitems) { + if (subitems.hasOwnProperty(key)) { + var subitem = subitems[key]; + // Make sure each item has a name property + if (typeof subitem === "object") { + if (!subitem.name && key) { + subitem.name = key; + } + subitemsArray.push(subitem); + } + } + } + + console.log("Converted to array with " + subitemsArray.length + " items"); + subitems = subitemsArray; + } for (var i in subitems) { @@ -1749,7 +2157,7 @@ ApplicationWindow { { console.log("Failure: Backend should have pre-flattened the JSON!"); - osswipeview.itemAt(osswipeview.currentIndex+1).currentIndex = (selectFirstSubitem === true) ? 0 : -1 + osswipeview.itemAt(osswipeview.currentIndex+1).currentIndex = (selectFirstSubitem ===true) ? 0 : -1 osswipeview.incrementCurrentIndex() } } else if (d.url === "") { @@ -1796,4 +2204,4 @@ ApplicationWindow { writebutton.enabled = true } } -} +} \ No newline at end of file diff --git a/src/os_list.json b/src/os_list.json index a2db64d..fedc395 100644 --- a/src/os_list.json +++ b/src/os_list.json @@ -3,7 +3,7 @@ { "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/dev/src/icons/logo.png?raw=true", + "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, @@ -16,7 +16,7 @@ { "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/dev/src/icons/logo.png?raw=true", + "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, @@ -29,7 +29,7 @@ { "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/dev/src/icons/logo.png?raw=true", + "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, @@ -42,7 +42,7 @@ { "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/dev/src/icons/logo.png?raw=true", + "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, @@ -55,7 +55,7 @@ { "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/dev/src/icons/logo.png?raw=true", + "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, @@ -68,7 +68,7 @@ { "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/dev/src/icons/logo.png?raw=true", + "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, @@ -81,7 +81,7 @@ { "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/dev/src/icons/logo.png?raw=true", + "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, @@ -92,14 +92,14 @@ ] }, { - "name": "ROCKNIX 20240815 for Rockchip RK3326 devices", - "description": "ROCKNIX 20240815 firmware optimized for Rockchip RK3326 devices.", - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/rocknix.png?raw=true", - "url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-RK3326.aarch64-20240815.img.gz", - "release_date": "2024-08-15", - "image_download_size": 1171847190, + "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": "0bdf629ef90c33ce236dd3cf4fd991d24ac61d4b2f8546d09e602308459b2425", + "extract_sha256": "8cc28cca1d4d88464cf156691a540111385c5b94f30aa067456cc80fcd12b747", "devices": [ "rg351p", "rg351m", @@ -111,32 +111,45 @@ "ogs", "xu10", "v10", - "rgb10", - "xu_mini_m" + "rgb10" ] }, { - "name": "ROCKNIX 20240815 for Rockchip RK3399 devices", - "description": "ROCKNIX 20240815 firmware optimized for Rockchip RK3399 devices.", - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/rocknix.png?raw=true", - "url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-RK3399.aarch64-20240815.img.gz", - "release_date": "2024-08-15", - "image_download_size": 1195501171, + "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": "8f77e5d80305d93f8e9e21ff7a9191d0f858caae72df18e9a028a9ea17f13416", + "extract_sha256": "53091696a540d693d99d515524816825a057823c0fe1f91a0b5e4837baeb24b9", "devices": [ "rg552" ] }, { - "name": "ROCKNIX 20240815 for Rockchip RK3566 devices", - "description": "ROCKNIX 20240815 firmware optimized for Rockchip RK3566 devices.", - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/rocknix.png?raw=true", - "url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-RK3566.aarch64-20240815.img.gz", - "release_date": "2024-08-15", - "image_download_size": 1282393570, + "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": "c0ae2048a325f54261fba3d052fbb3c26bf11f522241f89e8dc7057ef31e2ef5", + "extract_sha256": "4917f090e9364f47de5cf8663c0741eb79b8236c4b455a5ae4d3c8889744de27", "devices": [ "rg353p", "rg353m", @@ -153,27 +166,27 @@ ] }, { - "name": "ROCKNIX 20240815 for Powkiddy X55 devices", - "description": "ROCKNIX 20240815 firmware optimized for Powkiddy X55 devices.", - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/rocknix.png?raw=true", - "url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-RK3566-X55.aarch64-20240815.img.gz", - "release_date": "2024-08-15", - "image_download_size": 1282079397, + "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": "1883848d6b8f6011c15f1aa54f44e5898eb7c89d4f6abcb229b13dd67c9928e8", + "extract_sha256": "35391e0a49de413a2672893a07ed6ca116f90746baef620eebf8d3ab7b2ad5f7", "devices": [ "x55" ] }, { - "name": "ROCKNIX 20240815 for Hardkernel ODROID Go Ultra and Powkiddy RGB10 Max 3 Pro devices", - "description": "ROCKNIX 20240815 firmware optimized for ODROID Go Ultra and RGB10 Max 3 Pro devices.", - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/rocknix.png?raw=true", - "url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-S922X.aarch64-20240815-Odroid_GOU.img.gz", - "release_date": "2024-08-15", - "image_download_size": 1257600535, + "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": "ddf4cb558846ab0c826b445bc55da908530fb2f7fbfc0ef070215fe7e0223c65", + "extract_sha256": "86cd0a48d541e3e68582107748e2f77656c153d11f6efd14563fb65a0f9c5076", "devices": [ "ogu", "rgb10_max_3_pro" @@ -182,7 +195,7 @@ { "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/dev/src/icons/rocknix.png?raw=true", + "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, @@ -196,7 +209,7 @@ { "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/dev/src/icons/rocknix.png?raw=true", + "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, @@ -207,14 +220,14 @@ ] }, { - "name": "ROCKNIX 20240815 for Rockchip RK3588 devices", - "description": "ROCKNIX 20240815 firmware optimized for Rockchip RK3588 devices.", - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/rocknix.png?raw=true", - "url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-RK3588.aarch64-20240815.img.gz", - "release_date": "2024-08-15", - "image_download_size": 1313142011, + "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": "380180b7d8279b5fe0843e11935f27e11053749e084e578faa7ee7d4d4cce0b5", + "extract_sha256": "ec81027b7d9b757f09ccd78ce38c6993009e66ddd4b7e1a1206dc104ad739754", "devices": [ "ace", "orange_pi_5", @@ -225,238 +238,313 @@ "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 RG40XXH", - "tags": ["rg40xxh"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG40XX%20H.png?raw=true" + "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": "Anbernic RG40XXV", - "tags": ["rg40xxv"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG40XX%20V.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": "Anbernic RG35XXH", - "tags": ["rg35xxh"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX%20H.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": "Anbernic RG35XX Plus", - "tags": ["rg35xx_plus"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX%20-%20PLUS.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": "Anbernic RG35XX SP", - "tags": ["rg35xx_sp"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX%20SP.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": "Anbernic RG35XX 2024", - "tags": ["rg35xx_2024"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX%20-%202024.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": "Anbernic RG28XX", - "tags": ["rg28xx"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG28XX.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": "Anbernic RG351P", - "tags": ["rg351p"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/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": "Anbernic RG351M", - "tags": ["rg351m"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/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": "Anbernic RG351V", - "tags": ["rg351v"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Game Console R33S", - "tags": ["r33s"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Game Console R35S", - "tags": ["r35s"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Game Console R36S", - "tags": ["r36s"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "ODROID Go Advance", - "tags": ["oga"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "ODROID Go Super", - "tags": ["ogs"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "MagicX XU10", - "tags": ["xu10"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Powkiddy V10", - "tags": ["v10"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Powkiddy RGB10", - "tags": ["rgb10"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Anbernic RG353P", - "tags": ["rg353p"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Anbernic RG353M", - "tags": ["rg353m"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Anbernic RG353V", - "tags": ["rg353v"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Anbernic RG353VS", - "tags": ["rg353vs"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Anbernic RG353PS", - "tags": ["rg353ps"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Anbernic RG503", - "tags": ["rg503"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Anbernic RG Arc-D", - "tags": ["rg_arc_d"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Anbernic RG Arc-S", - "tags": ["rg_arc_s"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Powkiddy RK2023", - "tags": ["rk2023"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Powkiddy RGB10 Max 3", - "tags": ["rgb10_max_3"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Powkiddy RGB30", - "tags": ["rgb30"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Powkiddy RGB20SX", - "tags": ["rgb20sx"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Anbernic RG552", - "tags": ["rg552"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "ODROID Go Ultra", - "tags": ["ogu"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/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/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "ODROID N2", - "tags": ["on2"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "ODROID N2 Plus", - "tags": ["on2_plus"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "ODROID N2L", - "tags": ["on2l"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Gameforce Ace (default)", - "tags": ["ace"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Orange Pi 5", - "tags": ["orange_pi_5"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Orange Pi 5 Plus", - "tags": ["orange_pi_5_plus"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Radxa Rock 5a", - "tags": ["radxa_rock_5a"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Radxa Rock 5b", - "tags": ["radxa_rock_5b"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Radxa Rock 5b Plus", - "tags": ["radxa_rock_5b_plus"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Radxa Rock CM5", - "tags": ["radxa_rock_cm5"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Indiedroid Nova (Must set dtb in extlinuix.conf)", - "tags": ["nova"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "Powkiddy X55", - "tags": ["x55"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" - }, - { - "name": "MagicX XU Mini M", - "tags": ["xu_mini_m"], - "icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true" + "name": "Retroid", + "subitems": [ + { + "name": "Retroid Pocket Mini", + "tags": ["rpmini"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + }, + { + "name": "Retroid Pocket 5", + "tags": ["rp5"], + "icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true" + } + ] } ] } diff --git a/src/qml.qrc b/src/qml.qrc index 8dcca05..d86215f 100644 --- a/src/qml.qrc +++ b/src/qml.qrc @@ -32,7 +32,7 @@ icons/cat_language_specific_operating_systems.png icons/cat_3d_printing.png icons/logo_stacked_imager.png - icons/logo_sxs_imager.png + icons/banner.png qmlcomponents/ImButton.qml qmlcomponents/ImButtonRed.qml qmlcomponents/ImCheckBox.qml diff --git a/test_os_list.json b/test_os_list.json new file mode 100644 index 0000000..de84dde --- /dev/null +++ b/test_os_list.json @@ -0,0 +1,37 @@ +{ + "os_list": [ + { + "name": "Test OS 1", + "description": "A test OS for verifying functionality", + "icon": "icons/erase.png", + "url": "internal://format", + "devices": ["rg40xxh"] + }, + { + "name": "Test OS 2", + "description": "Another test OS", + "icon": "icons/erase.png", + "url": "internal://format", + "devices": ["rg35xx_plus"] + } + ], + "imager": { + "devices": [ + { + "name": "Test Device Category", + "subitems": [ + { + "name": "Test Device 1", + "tags": ["rg40xxh"], + "icon": "icons/erase.png" + }, + { + "name": "Test Device 2", + "tags": ["rg35xx_plus"], + "icon": "icons/erase.png" + } + ] + } + ] + } +} \ No newline at end of file