mirror of
https://github.com/cmclark00/retro-imager.git
synced 2025-05-18 07:55:21 +01:00
Compare commits
15 commits
Author | SHA1 | Date | |
---|---|---|---|
|
182e9b91ae | ||
|
34089867a1 | ||
|
45e5dc35ec | ||
|
f84a7244dd | ||
|
3b6363aaba | ||
|
028f5ef9f9 | ||
|
31c7760ccc | ||
|
01a49182b2 | ||
|
2342facc6e | ||
|
7fdbab9138 | ||
|
59536ddd9b | ||
|
e343b26b7b | ||
|
8b74f8a2b2 | ||
|
aaae987b5b | ||
|
11d73edee3 |
99 changed files with 1539 additions and 410 deletions
16
minimal_test.json
Normal file
16
minimal_test.json
Normal file
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
552
os_list.json
Normal file
552
os_list.json
Normal file
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
BIN
qt_plugins/assetimporters/libassimp.dylib
Executable file
BIN
qt_plugins/assetimporters/libassimp.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/canbus/libqtpassthrucanbus.dylib
Executable file
BIN
qt_plugins/canbus/libqtpassthrucanbus.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/canbus/libqtpeakcanbus.dylib
Executable file
BIN
qt_plugins/canbus/libqtpeakcanbus.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/canbus/libqttinycanbus.dylib
Executable file
BIN
qt_plugins/canbus/libqttinycanbus.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/canbus/libqtvirtualcanbus.dylib
Executable file
BIN
qt_plugins/canbus/libqtvirtualcanbus.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/designer/libqquickwidget.dylib
Executable file
BIN
qt_plugins/designer/libqquickwidget.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/designer/libqwebengineview.dylib
Executable file
BIN
qt_plugins/designer/libqwebengineview.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/generic/libqtuiotouchplugin.dylib
Executable file
BIN
qt_plugins/generic/libqtuiotouchplugin.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/geometryloaders/libdefaultgeometryloader.dylib
Executable file
BIN
qt_plugins/geometryloaders/libdefaultgeometryloader.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/geometryloaders/libgltfgeometryloader.dylib
Executable file
BIN
qt_plugins/geometryloaders/libgltfgeometryloader.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/geoservices/libqtgeoservices_itemsoverlay.dylib
Executable file
BIN
qt_plugins/geoservices/libqtgeoservices_itemsoverlay.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/geoservices/libqtgeoservices_osm.dylib
Executable file
BIN
qt_plugins/geoservices/libqtgeoservices_osm.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/help/libhelpplugin.dylib
Executable file
BIN
qt_plugins/help/libhelpplugin.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/iconengines/libqsvgicon.dylib
Executable file
BIN
qt_plugins/iconengines/libqsvgicon.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/imageformats/libqgif.dylib
Executable file
BIN
qt_plugins/imageformats/libqgif.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/imageformats/libqicns.dylib
Executable file
BIN
qt_plugins/imageformats/libqicns.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/imageformats/libqico.dylib
Executable file
BIN
qt_plugins/imageformats/libqico.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/imageformats/libqjp2.dylib
Executable file
BIN
qt_plugins/imageformats/libqjp2.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/imageformats/libqjpeg.dylib
Executable file
BIN
qt_plugins/imageformats/libqjpeg.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/imageformats/libqmacheif.dylib
Executable file
BIN
qt_plugins/imageformats/libqmacheif.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/imageformats/libqmng.dylib
Executable file
BIN
qt_plugins/imageformats/libqmng.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/imageformats/libqpdf.dylib
Executable file
BIN
qt_plugins/imageformats/libqpdf.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/imageformats/libqsvg.dylib
Executable file
BIN
qt_plugins/imageformats/libqsvg.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/imageformats/libqtga.dylib
Executable file
BIN
qt_plugins/imageformats/libqtga.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/imageformats/libqtiff.dylib
Executable file
BIN
qt_plugins/imageformats/libqtiff.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/imageformats/libqwbmp.dylib
Executable file
BIN
qt_plugins/imageformats/libqwbmp.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/imageformats/libqwebp.dylib
Executable file
BIN
qt_plugins/imageformats/libqwebp.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/multimedia/libdarwinmediaplugin.dylib
Executable file
BIN
qt_plugins/multimedia/libdarwinmediaplugin.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/networkinformation/libqglib.dylib
Executable file
BIN
qt_plugins/networkinformation/libqglib.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/networkinformation/libqscnetworkreachability.dylib
Executable file
BIN
qt_plugins/networkinformation/libqscnetworkreachability.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/opcua/libopen62541_backend.dylib
Executable file
BIN
qt_plugins/opcua/libopen62541_backend.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/permissions/libqdarwinbluetoothpermission.a
Normal file
BIN
qt_plugins/permissions/libqdarwinbluetoothpermission.a
Normal file
Binary file not shown.
5
qt_plugins/permissions/libqdarwinbluetoothpermission.prl
Normal file
5
qt_plugins/permissions/libqdarwinbluetoothpermission.prl
Normal file
|
@ -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
|
BIN
qt_plugins/permissions/libqdarwincalendarpermission.a
Normal file
BIN
qt_plugins/permissions/libqdarwincalendarpermission.a
Normal file
Binary file not shown.
5
qt_plugins/permissions/libqdarwincalendarpermission.prl
Normal file
5
qt_plugins/permissions/libqdarwincalendarpermission.prl
Normal file
|
@ -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
|
BIN
qt_plugins/permissions/libqdarwincamerapermission.a
Normal file
BIN
qt_plugins/permissions/libqdarwincamerapermission.a
Normal file
Binary file not shown.
5
qt_plugins/permissions/libqdarwincamerapermission.prl
Normal file
5
qt_plugins/permissions/libqdarwincamerapermission.prl
Normal file
|
@ -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
|
BIN
qt_plugins/permissions/libqdarwincontactspermission.a
Normal file
BIN
qt_plugins/permissions/libqdarwincontactspermission.a
Normal file
Binary file not shown.
5
qt_plugins/permissions/libqdarwincontactspermission.prl
Normal file
5
qt_plugins/permissions/libqdarwincontactspermission.prl
Normal file
|
@ -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
|
BIN
qt_plugins/permissions/libqdarwinlocationpermission.a
Normal file
BIN
qt_plugins/permissions/libqdarwinlocationpermission.a
Normal file
Binary file not shown.
5
qt_plugins/permissions/libqdarwinlocationpermission.prl
Normal file
5
qt_plugins/permissions/libqdarwinlocationpermission.prl
Normal file
|
@ -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
|
BIN
qt_plugins/permissions/libqdarwinmicrophonepermission.a
Normal file
BIN
qt_plugins/permissions/libqdarwinmicrophonepermission.a
Normal file
Binary file not shown.
|
@ -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
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
qt_plugins/platforminputcontexts/libqtvirtualkeyboardplugin.dylib
Executable file
BIN
qt_plugins/platforminputcontexts/libqtvirtualkeyboardplugin.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/platforms/libqcocoa.dylib
Executable file
BIN
qt_plugins/platforms/libqcocoa.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/platforms/libqminimal.dylib
Executable file
BIN
qt_plugins/platforms/libqminimal.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/platforms/libqoffscreen.dylib
Executable file
BIN
qt_plugins/platforms/libqoffscreen.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/position/libqtposition_cl.dylib
Executable file
BIN
qt_plugins/position/libqtposition_cl.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/position/libqtposition_nmea.dylib
Executable file
BIN
qt_plugins/position/libqtposition_nmea.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/position/libqtposition_positionpoll.dylib
Executable file
BIN
qt_plugins/position/libqtposition_positionpoll.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/qmllint/libquicklintplugin.dylib
Executable file
BIN
qt_plugins/qmllint/libquicklintplugin.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/qmlls/libqmllsquickplugin.dylib
Executable file
BIN
qt_plugins/qmlls/libqmllsquickplugin.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/qmltooling/libqmldbg_debugger.dylib
Executable file
BIN
qt_plugins/qmltooling/libqmldbg_debugger.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/qmltooling/libqmldbg_inspector.dylib
Executable file
BIN
qt_plugins/qmltooling/libqmldbg_inspector.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/qmltooling/libqmldbg_local.dylib
Executable file
BIN
qt_plugins/qmltooling/libqmldbg_local.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/qmltooling/libqmldbg_messages.dylib
Executable file
BIN
qt_plugins/qmltooling/libqmldbg_messages.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/qmltooling/libqmldbg_native.dylib
Executable file
BIN
qt_plugins/qmltooling/libqmldbg_native.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/qmltooling/libqmldbg_nativedebugger.dylib
Executable file
BIN
qt_plugins/qmltooling/libqmldbg_nativedebugger.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/qmltooling/libqmldbg_preview.dylib
Executable file
BIN
qt_plugins/qmltooling/libqmldbg_preview.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/qmltooling/libqmldbg_profiler.dylib
Executable file
BIN
qt_plugins/qmltooling/libqmldbg_profiler.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/qmltooling/libqmldbg_quick3dprofiler.dylib
Executable file
BIN
qt_plugins/qmltooling/libqmldbg_quick3dprofiler.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/qmltooling/libqmldbg_quickprofiler.dylib
Executable file
BIN
qt_plugins/qmltooling/libqmldbg_quickprofiler.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/qmltooling/libqmldbg_server.dylib
Executable file
BIN
qt_plugins/qmltooling/libqmldbg_server.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/qmltooling/libqmldbg_tcp.dylib
Executable file
BIN
qt_plugins/qmltooling/libqmldbg_tcp.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/renderers/libopenglrenderer.dylib
Executable file
BIN
qt_plugins/renderers/libopenglrenderer.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/renderers/librhirenderer.dylib
Executable file
BIN
qt_plugins/renderers/librhirenderer.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/renderplugins/libscene2d.dylib
Executable file
BIN
qt_plugins/renderplugins/libscene2d.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/sceneparsers/libassimpsceneimport.dylib
Executable file
BIN
qt_plugins/sceneparsers/libassimpsceneimport.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/sceneparsers/libgltfsceneexport.dylib
Executable file
BIN
qt_plugins/sceneparsers/libgltfsceneexport.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/sceneparsers/libgltfsceneimport.dylib
Executable file
BIN
qt_plugins/sceneparsers/libgltfsceneimport.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/scxmldatamodel/libqscxmlecmascriptdatamodel.dylib
Executable file
BIN
qt_plugins/scxmldatamodel/libqscxmlecmascriptdatamodel.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/sensors/libqtsensors_generic.dylib
Executable file
BIN
qt_plugins/sensors/libqtsensors_generic.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/sqldrivers/libqsqlite.dylib
Executable file
BIN
qt_plugins/sqldrivers/libqsqlite.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/styles/libqmacstyle.dylib
Executable file
BIN
qt_plugins/styles/libqmacstyle.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/texttospeech/libqtexttospeech_mock.dylib
Executable file
BIN
qt_plugins/texttospeech/libqtexttospeech_mock.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/texttospeech/libqtexttospeech_speech_macos.dylib
Executable file
BIN
qt_plugins/texttospeech/libqtexttospeech_speech_macos.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/texttospeech/libqtexttospeech_speechdarwin.dylib
Executable file
BIN
qt_plugins/texttospeech/libqtexttospeech_speechdarwin.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/tls/libqcertonlybackend.dylib
Executable file
BIN
qt_plugins/tls/libqcertonlybackend.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/tls/libqopensslbackend.dylib
Executable file
BIN
qt_plugins/tls/libqopensslbackend.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/tls/libqsecuretransportbackend.dylib
Executable file
BIN
qt_plugins/tls/libqsecuretransportbackend.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/webview/libqtwebview_darwin.dylib
Executable file
BIN
qt_plugins/webview/libqtwebview_darwin.dylib
Executable file
Binary file not shown.
BIN
qt_plugins/webview/libqtwebview_webengine.dylib
Executable file
BIN
qt_plugins/webview/libqtwebview_webengine.dylib
Executable file
Binary file not shown.
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
BIN
src/icons/banner.png
Normal file
BIN
src/icons/banner.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 106 KiB |
BIN
src/icons/icon.png
Normal file
BIN
src/icons/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
Binary file not shown.
Before Width: | Height: | Size: 304 KiB After Width: | Height: | Size: 8.2 KiB |
668
src/main.qml
668
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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
616
src/os_list.json
616
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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
<file>icons/cat_language_specific_operating_systems.png</file>
|
||||
<file>icons/cat_3d_printing.png</file>
|
||||
<file>icons/logo_stacked_imager.png</file>
|
||||
<file>icons/logo_sxs_imager.png</file>
|
||||
<file>icons/banner.png</file>
|
||||
<file>qmlcomponents/ImButton.qml</file>
|
||||
<file>qmlcomponents/ImButtonRed.qml</file>
|
||||
<file>qmlcomponents/ImCheckBox.qml</file>
|
||||
|
|
37
test_os_list.json
Normal file
37
test_os_list.json
Normal file
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue