mirror of
https://github.com/cmclark00/retro-imager.git
synced 2025-05-18 16:05:21 +01:00
Compare commits
No commits in common. "fix" and "v0.4" have entirely different histories.
99 changed files with 407 additions and 1536 deletions
|
@ -1,16 +0,0 @@
|
||||||
{
|
|
||||||
"os_list": [
|
|
||||||
{
|
|
||||||
"name": "Test OS 1",
|
|
||||||
"description": "A test OS for verifying functionality",
|
|
||||||
"icon": "icons/erase.png",
|
|
||||||
"url": "internal://format"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Test OS 2",
|
|
||||||
"description": "Another test OS",
|
|
||||||
"icon": "icons/erase.png",
|
|
||||||
"url": "internal://format"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
552
os_list.json
552
os_list.json
|
@ -1,552 +0,0 @@
|
||||||
{
|
|
||||||
"os_list": [
|
|
||||||
{
|
|
||||||
"name": "muOS 2410.1 Banana for RG35XX Plus",
|
|
||||||
"description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XX Plus.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
|
|
||||||
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-PLUS-2410.1-BANANA-d1bae326.img.gz",
|
|
||||||
"release_date": "2024-10-12",
|
|
||||||
"image_download_size": 2151537628,
|
|
||||||
"extract_size": 4504682496,
|
|
||||||
"extract_sha256": "62c492047923e3e8709e0b015760b7f1e0db2ccab40e741fe067b49d96957624",
|
|
||||||
"devices": [
|
|
||||||
"rg35xx_plus"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "muOS 2410.1 Banana for RG28XX",
|
|
||||||
"description": "muOS 2410.1 Banana firmware optimized for Anbernic RG28XX.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
|
|
||||||
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG28XX-2410.1-BANANA-d1bae326.img.gz",
|
|
||||||
"release_date": "2024-10-12",
|
|
||||||
"image_download_size": 2158432397,
|
|
||||||
"extract_size": 4504682496,
|
|
||||||
"extract_sha256": "62c492047923e3e8709e0b015760b7f1e0db2ccab40e741fe067b49d96957624",
|
|
||||||
"devices": [
|
|
||||||
"rg28xx"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "muOS 2410.1 Banana for RG35XXH",
|
|
||||||
"description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XXH.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
|
|
||||||
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-H-2410.1-BANANA-a10951c4.img.gz",
|
|
||||||
"release_date": "2024-10-12",
|
|
||||||
"image_download_size": 2118435484,
|
|
||||||
"extract_size": 4504682496,
|
|
||||||
"extract_sha256": "a84a1386de3b046aea05c75a4ccc8da0fbc2ee42f89b7b78a720cf657f45d3d2",
|
|
||||||
"devices": [
|
|
||||||
"rg35xxh"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "muOS 2410.1 Banana for RG35XXSP",
|
|
||||||
"description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XXSP.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
|
|
||||||
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-SP-2410.1-BANANA-d1bae326.img.gz",
|
|
||||||
"release_date": "2024-10-12",
|
|
||||||
"image_download_size": 2176694960,
|
|
||||||
"extract_size": 4504682496,
|
|
||||||
"extract_sha256": "9a529d2f089bba6616615026c6ec16e282d622adbc6ae97172b7ab73d32092c4",
|
|
||||||
"devices": [
|
|
||||||
"rg35xx_sp"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "muOS 2410.1 Banana for RG35XX24",
|
|
||||||
"description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XX24.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
|
|
||||||
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-2024-2410.1-BANANA-d1bae326.img.gz",
|
|
||||||
"release_date": "2024-10-12",
|
|
||||||
"image_download_size": 2151137645,
|
|
||||||
"extract_size": 4504682496,
|
|
||||||
"extract_sha256": "fc0da5aa0dcda244be8dec28115210200fe259c374bb7b25d6d26f4db812d351",
|
|
||||||
"devices": [
|
|
||||||
"rg35xx_2024"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "muOS 2410.1 Banana for RG40XXH",
|
|
||||||
"description": "muOS 2410.1 Banana firmware optimized for Anbernic RG40XXH.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
|
|
||||||
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-H-2410.1-BANANA-d1bae326.img.gz",
|
|
||||||
"release_date": "2024-10-12",
|
|
||||||
"image_download_size": 2132388103,
|
|
||||||
"extract_size": 4504682496,
|
|
||||||
"extract_sha256": "fe51f4f3a7f9e51c34eb78ef704a9a6af0233d6fdf87ccd070444034003afe5c",
|
|
||||||
"devices": [
|
|
||||||
"rg40xxh"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "muOS 2410.1 Banana for RG40XXV",
|
|
||||||
"description": "muOS 2410.1 Banana firmware optimized for Anbernic RG40XXV.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
|
|
||||||
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-V-2410.1-BANANA-d1bae326.img.gz",
|
|
||||||
"release_date": "2024-10-12",
|
|
||||||
"image_download_size": 2132476961,
|
|
||||||
"extract_size": 4504682496,
|
|
||||||
"extract_sha256": "aa2cd35010e1414c62b0460d8f193d7a3c56ebcf3f59a220aebe995ab93bb051",
|
|
||||||
"devices": [
|
|
||||||
"rg40xxv"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ROCKNIX 20241120 for Rockchip RK3326 devices, A image.",
|
|
||||||
"description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3326 devices.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3326.aarch64-20241120-a.img.gz",
|
|
||||||
"release_date": "2024-11-20",
|
|
||||||
"image_download_size": 1348717111,
|
|
||||||
"extract_size": 2197815296,
|
|
||||||
"extract_sha256": "8cc28cca1d4d88464cf156691a540111385c5b94f30aa067456cc80fcd12b747",
|
|
||||||
"devices": [
|
|
||||||
"rg351p",
|
|
||||||
"rg351m",
|
|
||||||
"rg351v",
|
|
||||||
"r33s",
|
|
||||||
"r35s",
|
|
||||||
"r36s",
|
|
||||||
"oga",
|
|
||||||
"ogs",
|
|
||||||
"xu10",
|
|
||||||
"v10",
|
|
||||||
"rgb10"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ROCKNIX 20241120 for Rockchip RK3326 devices, B image.",
|
|
||||||
"description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3326 devices.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3326.aarch64-20241120-b.img.gz",
|
|
||||||
"release_date": "2024-11-20",
|
|
||||||
"image_download_size": 1348619756,
|
|
||||||
"extract_size": 2197815296,
|
|
||||||
"extract_sha256": "e43ed5ea9c8c93408a180e57409e9a07d7594ecb1ffe46f21024655f46ea9050",
|
|
||||||
"devices": [
|
|
||||||
"xu_mini_m",
|
|
||||||
"rgb10x"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ROCKNIX 20241120 for Rockchip RK3399 devices",
|
|
||||||
"description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3399 devices.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3399.aarch64-20241120.img.gz",
|
|
||||||
"release_date": "2024-11-20",
|
|
||||||
"image_download_size": 1288581465,
|
|
||||||
"extract_size": 2198863872,
|
|
||||||
"extract_sha256": "53091696a540d693d99d515524816825a057823c0fe1f91a0b5e4837baeb24b9",
|
|
||||||
"devices": [
|
|
||||||
"rg552"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ROCKNIX 20241120 for Rockchip RK3566 devices",
|
|
||||||
"description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3566 devices.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3566.aarch64-20241120-Generic.img.gz",
|
|
||||||
"release_date": "2024-11-20",
|
|
||||||
"image_download_size": 1391749865,
|
|
||||||
"extract_size": 2198863872,
|
|
||||||
"extract_sha256": "4917f090e9364f47de5cf8663c0741eb79b8236c4b455a5ae4d3c8889744de27",
|
|
||||||
"devices": [
|
|
||||||
"rg353p",
|
|
||||||
"rg353m",
|
|
||||||
"rg353v",
|
|
||||||
"rg353vs",
|
|
||||||
"rg353ps",
|
|
||||||
"rg503",
|
|
||||||
"rg_arc_d",
|
|
||||||
"rg_arc_s",
|
|
||||||
"rk2023",
|
|
||||||
"rgb10_max_3",
|
|
||||||
"rgb30",
|
|
||||||
"rgb20sx"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ROCKNIX 20241120 for Powkiddy X55 devices",
|
|
||||||
"description": "ROCKNIX 20241120 firmware optimized for Powkiddy X55 devices.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3566.aarch64-20241120-Powkiddy_x55.img.gz",
|
|
||||||
"release_date": "2024-11-20",
|
|
||||||
"image_download_size": 1391396234,
|
|
||||||
"extract_size": 2198863872,
|
|
||||||
"extract_sha256": "35391e0a49de413a2672893a07ed6ca116f90746baef620eebf8d3ab7b2ad5f7",
|
|
||||||
"devices": [
|
|
||||||
"x55"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ROCKNIX 20241120 for Hardkernel ODROID Go Ultra and Powkiddy RGB10 Max 3 Pro devices",
|
|
||||||
"description": "ROCKNIX 20241120 firmware optimized for ODROID Go Ultra and RGB10 Max 3 Pro devices.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-S922X.aarch64-20241120.img.gz",
|
|
||||||
"release_date": "2024-11-20",
|
|
||||||
"image_download_size": 1416924259,
|
|
||||||
"extract_size": 2185232384,
|
|
||||||
"extract_sha256": "86cd0a48d541e3e68582107748e2f77656c153d11f6efd14563fb65a0f9c5076",
|
|
||||||
"devices": [
|
|
||||||
"ogu",
|
|
||||||
"rgb10_max_3_pro"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ROCKNIX 20240815 for Hardkernel ODROID N2/N2+ devices",
|
|
||||||
"description": "ROCKNIX 20240815 firmware optimized for Hardkernel ODROID N2/N2+ devices.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-S922X.aarch64-20240815-Odroid_N2.img.gz",
|
|
||||||
"release_date": "2024-08-15",
|
|
||||||
"image_download_size": 1249723275,
|
|
||||||
"extract_size": 2185232384,
|
|
||||||
"extract_sha256": "7e5b56f4a0c0a9d9c64e7b1ba4472dd7e2dac9c28a23585098e16349f30c7fc9",
|
|
||||||
"devices": [
|
|
||||||
"on2",
|
|
||||||
"on2_plus"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ROCKNIX 20240815 for Hardkernel ODROID N2L devices",
|
|
||||||
"description": "ROCKNIX 20240815 firmware optimized for Hardkernel ODROID N2L devices.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-S922X.aarch64-20240815-Odroid_N2L.img.gz",
|
|
||||||
"release_date": "2024-08-15",
|
|
||||||
"image_download_size": 1249707786,
|
|
||||||
"extract_size": 2185232384,
|
|
||||||
"extract_sha256": "5af36c78b57dcb35c910bb72c2ed28208fe94c94d5b7fda83d73ef33a2419910",
|
|
||||||
"devices": [
|
|
||||||
"on2l"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ROCKNIX 20241120 for Rockchip RK3588 devices",
|
|
||||||
"description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3588 devices.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3588.aarch64-20241120.img.gz",
|
|
||||||
"release_date": "2024-11-20",
|
|
||||||
"image_download_size": 1451047021,
|
|
||||||
"extract_size": 2198863872,
|
|
||||||
"extract_sha256": "ec81027b7d9b757f09ccd78ce38c6993009e66ddd4b7e1a1206dc104ad739754",
|
|
||||||
"devices": [
|
|
||||||
"ace",
|
|
||||||
"orange_pi_5",
|
|
||||||
"orange_pi_5_plus",
|
|
||||||
"radxa_rock_5a",
|
|
||||||
"radxa_rock_5b",
|
|
||||||
"radxa_rock_5b_plus",
|
|
||||||
"radxa_rock_cm5",
|
|
||||||
"nova"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ROCKNIX 20241120 for Retroid Pocket Mini and Retroid Pocket 5 devices",
|
|
||||||
"description": "ROCKNIX 20241120 firmware optimized for Snapdragon 865 devices.",
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-SD865.aarch64-20241120.img.gz",
|
|
||||||
"release_date": "2024-11-20",
|
|
||||||
"image_download_size": 1404994449,
|
|
||||||
"extract_size": 2198863872,
|
|
||||||
"extract_sha256": "82f9336c27c9b733322e7e9f685bc1e98aa4eedb0c17f9ae297edb983ada6f39",
|
|
||||||
"devices": [
|
|
||||||
"rpmini",
|
|
||||||
"rp5"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"imager": {
|
|
||||||
"devices": [
|
|
||||||
{
|
|
||||||
"name": "Anbernic",
|
|
||||||
"subitems": [
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG40XXH",
|
|
||||||
"tags": ["rg40xxh"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG40XX%20H.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG40XXV",
|
|
||||||
"tags": ["rg40xxv"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG40XX%20V.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG35XXH",
|
|
||||||
"tags": ["rg35xxh"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20H.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG35XX Plus",
|
|
||||||
"tags": ["rg35xx_plus"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20-%20PLUS.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG35XX SP",
|
|
||||||
"tags": ["rg35xx_sp"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20SP.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG35XX 2024",
|
|
||||||
"tags": ["rg35xx_2024"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20-%202024.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG28XX",
|
|
||||||
"tags": ["rg28xx"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG28XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG351P",
|
|
||||||
"tags": ["rg351p"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG351M",
|
|
||||||
"tags": ["rg351m"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG351V",
|
|
||||||
"tags": ["rg351v"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG353P",
|
|
||||||
"tags": ["rg353p"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG353M",
|
|
||||||
"tags": ["rg353m"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG353V",
|
|
||||||
"tags": ["rg353v"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG353VS",
|
|
||||||
"tags": ["rg353vs"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG353PS",
|
|
||||||
"tags": ["rg353ps"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG503",
|
|
||||||
"tags": ["rg503"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG Arc-D",
|
|
||||||
"tags": ["rg_arc_d"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG Arc-S",
|
|
||||||
"tags": ["rg_arc_s"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Game Console",
|
|
||||||
"subitems": [
|
|
||||||
{
|
|
||||||
"name": "Game Console R33S",
|
|
||||||
"tags": ["r33s"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Game Console R35S",
|
|
||||||
"tags": ["r35s"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Game Console R36S",
|
|
||||||
"tags": ["r36s"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ODROID",
|
|
||||||
"subitems": [
|
|
||||||
{
|
|
||||||
"name": "ODROID Go Advance",
|
|
||||||
"tags": ["oga"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ODROID Go Super",
|
|
||||||
"tags": ["ogs"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ODROID N2",
|
|
||||||
"tags": ["on2"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ODROID N2 Plus",
|
|
||||||
"tags": ["on2_plus"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ODROID N2L",
|
|
||||||
"tags": ["on2l"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "MagicX",
|
|
||||||
"subitems": [
|
|
||||||
{
|
|
||||||
"name": "MagicX XU10",
|
|
||||||
"tags": ["xu10"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "MagicX XU Mini M",
|
|
||||||
"tags": ["xu_mini_m"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Powkiddy",
|
|
||||||
"subitems": [
|
|
||||||
{
|
|
||||||
"name": "Powkiddy V10",
|
|
||||||
"tags": ["v10"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Powkiddy RGB10",
|
|
||||||
"tags": ["rgb10"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Powkiddy RK2023",
|
|
||||||
"tags": ["rk2023"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Powkiddy RGB10 Max 3",
|
|
||||||
"tags": ["rgb10_max_3"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Powkiddy RGB30",
|
|
||||||
"tags": ["rgb30"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Powkiddy RGB20SX",
|
|
||||||
"tags": ["rgb20sx"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG552",
|
|
||||||
"tags": ["rg552"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ODROID Go Ultra",
|
|
||||||
"tags": ["ogu"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Powkiddy RGB10 Max 3 Pro",
|
|
||||||
"tags": ["rgb10_max_3_pro"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Powkiddy X55",
|
|
||||||
"tags": ["x55"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Gameforce",
|
|
||||||
"subitems": [
|
|
||||||
{
|
|
||||||
"name": "Gameforce Ace (default)",
|
|
||||||
"tags": ["ace"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Orange Pi",
|
|
||||||
"subitems": [
|
|
||||||
{
|
|
||||||
"name": "Orange Pi 5",
|
|
||||||
"tags": ["orange_pi_5"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Orange Pi 5 Plus",
|
|
||||||
"tags": ["orange_pi_5_plus"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Radxa",
|
|
||||||
"subitems": [
|
|
||||||
{
|
|
||||||
"name": "Radxa Rock 5a",
|
|
||||||
"tags": ["radxa_rock_5a"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Radxa Rock 5b",
|
|
||||||
"tags": ["radxa_rock_5b"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Radxa Rock 5b Plus",
|
|
||||||
"tags": ["radxa_rock_5b_plus"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Radxa Rock CM5",
|
|
||||||
"tags": ["radxa_rock_cm5"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Indiedroid",
|
|
||||||
"subitems": [
|
|
||||||
{
|
|
||||||
"name": "Indiedroid Nova (Must set dtb in extlinuix.conf)",
|
|
||||||
"tags": ["nova"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Retroid",
|
|
||||||
"subitems": [
|
|
||||||
{
|
|
||||||
"name": "Retroid Pocket Mini",
|
|
||||||
"tags": ["rpmini"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Retroid Pocket 5",
|
|
||||||
"tags": ["rp5"],
|
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,5 +0,0 @@
|
||||||
QMAKE_PRL_TARGET = libqdarwinbluetoothpermission.a
|
|
||||||
QMAKE_PRL_CONFIG = static
|
|
||||||
QMAKE_PRL_VERSION = 6.8.2
|
|
||||||
QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework CoreBluetooth
|
|
||||||
QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework CoreBluetooth
|
|
Binary file not shown.
|
@ -1,5 +0,0 @@
|
||||||
QMAKE_PRL_TARGET = libqdarwincalendarpermission.a
|
|
||||||
QMAKE_PRL_CONFIG = static
|
|
||||||
QMAKE_PRL_VERSION = 6.8.2
|
|
||||||
QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework EventKit
|
|
||||||
QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework EventKit
|
|
Binary file not shown.
|
@ -1,5 +0,0 @@
|
||||||
QMAKE_PRL_TARGET = libqdarwincamerapermission.a
|
|
||||||
QMAKE_PRL_CONFIG = static
|
|
||||||
QMAKE_PRL_VERSION = 6.8.2
|
|
||||||
QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework AVFoundation
|
|
||||||
QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework AVFoundation
|
|
Binary file not shown.
|
@ -1,5 +0,0 @@
|
||||||
QMAKE_PRL_TARGET = libqdarwincontactspermission.a
|
|
||||||
QMAKE_PRL_CONFIG = static
|
|
||||||
QMAKE_PRL_VERSION = 6.8.2
|
|
||||||
QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework Contacts
|
|
||||||
QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework Contacts
|
|
Binary file not shown.
|
@ -1,5 +0,0 @@
|
||||||
QMAKE_PRL_TARGET = libqdarwinlocationpermission.a
|
|
||||||
QMAKE_PRL_CONFIG = static
|
|
||||||
QMAKE_PRL_VERSION = 6.8.2
|
|
||||||
QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework CoreLocation
|
|
||||||
QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework CoreLocation
|
|
Binary file not shown.
|
@ -1,5 +0,0 @@
|
||||||
QMAKE_PRL_TARGET = libqdarwinmicrophonepermission.a
|
|
||||||
QMAKE_PRL_CONFIG = static
|
|
||||||
QMAKE_PRL_VERSION = 6.8.2
|
|
||||||
QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework AVFoundation
|
|
||||||
QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework AVFoundation
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
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)
|
project(retro-imager LANGUAGES CXX C)
|
||||||
set(IMAGER_VERSION_MAJOR 0)
|
set(IMAGER_VERSION_MAJOR 0)
|
||||||
set(IMAGER_VERSION_MINOR 5)
|
set(IMAGER_VERSION_MINOR 3)
|
||||||
set(IMAGER_VERSION_PATCH 0)
|
set(IMAGER_VERSION_PATCH 0)
|
||||||
set(IMAGER_VERSION_STR "${IMAGER_VERSION_MAJOR}.${IMAGER_VERSION_MINOR}.${IMAGER_VERSION_PATCH}")
|
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")
|
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")
|
#add_link_options("-fsanitize=address")
|
||||||
|
|
||||||
# You _must_ set your Qt6 root for the build to progress.
|
# You _must_ set your Qt6 root for the build to progress.
|
||||||
set(Qt6_ROOT "$ENV{QT6_ROOT}" CACHE PATH "Your Qt6 root path")
|
set(Qt6_ROOT "/opt/Qt/6.7.2/gcc_arm64" CACHE PATH "Your Qt6 root path")
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
set(MINGW64_ROOT "$ENV{MINGW64_ROOT}" CACHE PATH "Your MinGW64 root path, likely provided by QtCreator")
|
set(MINGW64_ROOT "" CACHE PATH "Your MinGW64 root path, likely provided by QtCreator")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
|
@ -433,30 +433,32 @@ elseif(APPLE)
|
||||||
add_custom_command(TARGET ${PROJECT_NAME}
|
add_custom_command(TARGET ${PROJECT_NAME}
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -qmldir="${CMAKE_CURRENT_SOURCE_DIR}")
|
COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -qmldir="${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
# Don't rename the app bundle, use the project name consistently
|
add_custom_command(TARGET ${PROJECT_NAME}
|
||||||
|
POST_BUILD
|
||||||
|
COMMAND mv "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app")
|
||||||
# Sign the .app.
|
# Sign the .app.
|
||||||
add_custom_command(TARGET ${PROJECT_NAME}
|
add_custom_command(TARGET ${PROJECT_NAME}
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND codesign -f --deep --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app")
|
COMMAND codesign -f --deep --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app")
|
||||||
|
|
||||||
# Create the .dmg for distribution
|
# Create the .dmg for distribution
|
||||||
add_custom_command(TARGET ${PROJECT_NAME}
|
add_custom_command(TARGET ${PROJECT_NAME}
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND hdiutil create -volname "${PROJECT_NAME}" -srcfolder "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -ov -format UDBZ "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg")
|
COMMAND hdiutil create -volname "Raspberry Pi Imager" -srcfolder "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app" -ov -format UDBZ "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg")
|
||||||
|
|
||||||
# Sign the .dmg for distribution, but do not initialise notarisation
|
# Sign the .dmg for distribution, but do not initialise notarisation
|
||||||
add_custom_command(TARGET ${PROJECT_NAME}
|
add_custom_command(TARGET ${PROJECT_NAME}
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND codesign -f --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg")
|
COMMAND codesign -f --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg")
|
||||||
|
|
||||||
if(IMAGER_NOTARIZE_APP)
|
if(IMAGER_NOTARIZE_APP)
|
||||||
if(IMAGER_NOTARIZE_KEYCHAIN_PROFILE)
|
if(IMAGER_NOTARIZE_KEYCHAIN_PROFILE)
|
||||||
add_custom_command(TARGET ${PROJECT_NAME}
|
add_custom_command(TARGET ${PROJECT_NAME}
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND xcrun notarytool submit "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg" --wait --keychain-profile "${IMAGER_NOTARIZE_KEYCHAIN_PROFILE}")
|
COMMAND xcrun notarytool submit "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg" --wait --keychain-profile "${IMAGER_NOTARIZE_KEYCHAIN_PROFILE}")
|
||||||
add_custom_command(TARGET ${PROJECT_NAME}
|
add_custom_command(TARGET ${PROJECT_NAME}
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND xcrun stapler staple "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg")
|
COMMAND xcrun stapler staple "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg")
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "Notarization requested, but no keychain profile is supplied")
|
message(FATAL_ERROR "Notarization requested, but no keychain profile is supplied")
|
||||||
endif(IMAGER_NOTARIZE_KEYCHAIN_PROFILE)
|
endif(IMAGER_NOTARIZE_KEYCHAIN_PROFILE)
|
||||||
|
@ -469,12 +471,12 @@ elseif(APPLE)
|
||||||
# Unsigned application
|
# Unsigned application
|
||||||
add_custom_command(TARGET ${PROJECT_NAME}
|
add_custom_command(TARGET ${PROJECT_NAME}
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -qmldir="${CMAKE_CURRENT_SOURCE_DIR}" -always-overwrite -no-strip -dmg)
|
COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app" -qmldir="${CMAKE_CURRENT_SOURCE_DIR}" -always-overwrite -no-strip -dmg)
|
||||||
endif(IMAGER_SIGNED_APP)
|
endif(IMAGER_SIGNED_APP)
|
||||||
|
|
||||||
add_custom_command(TARGET ${PROJECT_NAME}
|
add_custom_command(TARGET ${PROJECT_NAME}
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND "mv" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${IMAGER_VERSION_STR}.dmg")
|
COMMAND "mv" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager-${IMAGER_VERSION_STR}.dmg")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
# UNIX, Linux systems
|
# UNIX, Linux systems
|
||||||
|
|
|
@ -8,13 +8,13 @@
|
||||||
|
|
||||||
|
|
||||||
/* Repository URL */
|
/* Repository URL */
|
||||||
#define OSLIST_URL "https://raw.githubusercontent.com/cmclark00/retro-imager/refs/heads/fix/src/os_list.json"
|
#define OSLIST_URL "https://raw.githubusercontent.com/cmclark00/retro-imager/refs/heads/dev/src/os_list.json"
|
||||||
|
|
||||||
/* Time synchronization URL (only used on eglfs QPA platform, URL must be HTTP) */
|
/* 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"
|
#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 */
|
/* Phone home the name of images downloaded for image popularity ranking */
|
||||||
#define TELEMETRY_URL "http://technerdguys.com/telemetry-endpoint"
|
#define TELEMETRY_URL "https://rpi-imager-stats.raspberrypi.com/downloads"
|
||||||
|
|
||||||
/* Hash algorithm for verifying (uncompressed image) checksum */
|
/* Hash algorithm for verifying (uncompressed image) checksum */
|
||||||
#define OSLIST_HASH_ALGORITHM QCryptographicHash::Sha256
|
#define OSLIST_HASH_ALGORITHM QCryptographicHash::Sha256
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 106 KiB |
Binary file not shown.
Before Width: | Height: | Size: 10 KiB |
Binary file not shown.
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 304 KiB |
554
src/main.qml
554
src/main.qml
|
@ -68,12 +68,11 @@ ApplicationWindow {
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: image
|
id: image
|
||||||
source: "icons/banner.png"
|
source: "icons/logo_sxs_imager.png"
|
||||||
width: window.width * 1
|
width: window.width * 1
|
||||||
height: window.height / 3
|
height: window.height / 3
|
||||||
smooth: true
|
smooth: true
|
||||||
antialiasing: true
|
antialiasing: true
|
||||||
fillMode: image.PreserveAspectFit
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -479,8 +478,6 @@ ApplicationWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Popup for hardware device selection with nested structure
|
|
||||||
// Updated hwpopup definition
|
|
||||||
Popup {
|
Popup {
|
||||||
id: hwpopup
|
id: hwpopup
|
||||||
x: 50
|
x: 50
|
||||||
|
@ -490,21 +487,6 @@ ApplicationWindow {
|
||||||
padding: 0
|
padding: 0
|
||||||
closePolicy: Popup.CloseOnEscape
|
closePolicy: Popup.CloseOnEscape
|
||||||
property string hwselected: ""
|
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
|
// background of title
|
||||||
Rectangle {
|
Rectangle {
|
||||||
|
@ -516,8 +498,7 @@ ApplicationWindow {
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
id: hwTitleText
|
text: qsTr("Raspberry Pi Device")
|
||||||
text: qsTr("Retro Gaming Handheld Device")
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
anchors.topMargin: 10
|
anchors.topMargin: 10
|
||||||
|
@ -546,7 +527,6 @@ ApplicationWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// line under title
|
// line under title
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: hwpopup_title_separator
|
id: hwpopup_title_separator
|
||||||
|
@ -556,70 +536,31 @@ ApplicationWindow {
|
||||||
height: 1
|
height: 1
|
||||||
}
|
}
|
||||||
|
|
||||||
SwipeView {
|
|
||||||
anchors.top: hwpopup_title_separator.bottom
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
id: hwswipeview
|
|
||||||
interactive: false
|
|
||||||
clip: true
|
|
||||||
// Add debug printing for SwipeView changes
|
|
||||||
onCurrentIndexChanged: {
|
|
||||||
console.log("SwipeView current index changed to: " + currentIndex)
|
|
||||||
}
|
|
||||||
|
|
||||||
ListView {
|
ListView {
|
||||||
id: hwlist
|
id: hwlist
|
||||||
clip: true
|
clip: true
|
||||||
model: ListModel {
|
model: ListModel {
|
||||||
id: categoryModel
|
id: deviceModel
|
||||||
// Main categories will be loaded from JSON
|
ListElement {
|
||||||
|
name: qsTr("[ All ]")
|
||||||
|
tags: "[]"
|
||||||
|
icon: ""
|
||||||
|
description: ""
|
||||||
|
matching_type: "exclusive"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
currentIndex: -1
|
currentIndex: -1
|
||||||
delegate: hwdelegate
|
delegate: hwdelegate
|
||||||
|
anchors.top: hwpopup_title_separator.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
boundsBehavior: Flickable.StopAtBounds
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
ScrollBar.vertical: ScrollBar {
|
ScrollBar.vertical: ScrollBar {
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
width: 10
|
width: 10
|
||||||
policy: hwlist.contentHeight > hwlist.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded
|
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: {
|
Keys.onSpacePressed: {
|
||||||
if (currentIndex != -1)
|
if (currentIndex != -1)
|
||||||
selectHWitem(model.get(currentIndex))
|
selectHWitem(model.get(currentIndex))
|
||||||
|
@ -630,51 +571,6 @@ ApplicationWindow {
|
||||||
}
|
}
|
||||||
Keys.onEnterPressed: Keys.onSpacePressed(event)
|
Keys.onEnterPressed: Keys.onSpacePressed(event)
|
||||||
Keys.onReturnPressed: 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 {
|
|
||||||
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")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -846,14 +742,13 @@ ApplicationWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hardware delegate component for displaying devices and categories
|
|
||||||
Component {
|
Component {
|
||||||
id: hwdelegate
|
id: hwdelegate
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
width: window.width-100
|
width: window.width-100
|
||||||
height: contentLayout.implicitHeight + 24
|
height: contentLayout.implicitHeight + 24
|
||||||
Accessible.name: name+".\n"+(typeof description === "undefined" ? "" : description)
|
Accessible.name: name+".\n"+description
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
id: hwMouseArea
|
id: hwMouseArea
|
||||||
|
@ -862,31 +757,27 @@ ApplicationWindow {
|
||||||
hoverEnabled: true
|
hoverEnabled: true
|
||||||
|
|
||||||
onEntered: {
|
onEntered: {
|
||||||
bgrect3.mouseOver = true
|
bgrect.mouseOver = true
|
||||||
}
|
}
|
||||||
|
|
||||||
onExited: {
|
onExited: {
|
||||||
bgrect3.mouseOver = false
|
bgrect.mouseOver = false
|
||||||
}
|
}
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
if (typeof subitems !== "undefined" && subitems) {
|
|
||||||
selectHWcategory(model)
|
|
||||||
} else {
|
|
||||||
selectHWitem(model)
|
selectHWitem(model)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: bgrect3
|
id: bgrect
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
color: accentColor
|
color: accentColor
|
||||||
visible: mouseOver && parent.ListView.view.currentIndex !== index
|
visible: mouseOver && parent.ListView.view.currentIndex !== index
|
||||||
property bool mouseOver: false
|
property bool mouseOver: false
|
||||||
}
|
}
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: borderrect2
|
id: borderrect
|
||||||
implicitHeight: 1
|
implicitHeight: 1
|
||||||
implicitWidth: parent.width
|
implicitWidth: parent.width
|
||||||
color: accentColor
|
color: accentColor
|
||||||
|
@ -925,21 +816,11 @@ ApplicationWindow {
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
text: typeof description === "undefined" ? "" : description
|
|
||||||
font.family: roboto.name
|
font.family: roboto.name
|
||||||
wrapMode: Text.WordWrap
|
wrapMode: Text.WordWrap
|
||||||
color: accentColor
|
color: accentColor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show right chevron for categories with subitems
|
|
||||||
Image {
|
|
||||||
source: "icons/ic_chevron_right_40px.svg"
|
|
||||||
visible: typeof subitems !== "undefined" && subitems
|
|
||||||
Layout.preferredHeight: 40
|
|
||||||
Layout.preferredWidth: 40
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1671,119 +1552,55 @@ ApplicationWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function to fetch OS list and populate the hardware categories
|
|
||||||
function fetchOSlist() {
|
function fetchOSlist() {
|
||||||
try {
|
|
||||||
var oslist_json = imageWriter.getFilteredOSlist();
|
var oslist_json = imageWriter.getFilteredOSlist();
|
||||||
var o = JSON.parse(oslist_json);
|
var o = JSON.parse(oslist_json)
|
||||||
var oslist_parsed = oslistFromJson(o);
|
var oslist_parsed = oslistFromJson(o)
|
||||||
|
if (oslist_parsed === false)
|
||||||
if (oslist_parsed === false) {
|
return
|
||||||
return;
|
osmodel.clear()
|
||||||
}
|
|
||||||
|
|
||||||
osmodel.clear();
|
|
||||||
for (var i in oslist_parsed) {
|
for (var i in oslist_parsed) {
|
||||||
osmodel.append(oslist_parsed[i]);
|
osmodel.append(oslist_parsed[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("imager" in o) {
|
if ("imager" in o) {
|
||||||
var imager = o["imager"];
|
var imager = o["imager"]
|
||||||
|
|
||||||
if ("devices" in imager) {
|
if ("devices" in imager)
|
||||||
// Clear the category model
|
{
|
||||||
categoryModel.clear();
|
deviceModel.clear()
|
||||||
|
var devices = imager["devices"]
|
||||||
// Add an "All" option at the top
|
for (var j in devices)
|
||||||
categoryModel.append({
|
{
|
||||||
name: qsTr("[ All ]"),
|
devices[j]["tags"] = JSON.stringify(devices[j]["tags"])
|
||||||
tags: "[]",
|
deviceModel.append(devices[j])
|
||||||
icon: "",
|
if ("default" in devices[j] && devices[j]["default"])
|
||||||
description: qsTr("Show firmware for all devices"),
|
{
|
||||||
matching_type: "inclusive"
|
hwlist.currentIndex = deviceModel.count-1
|
||||||
});
|
|
||||||
|
|
||||||
// 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.getBoolSetting("check_version") && "latest_version" in imager && "url" in imager) {
|
||||||
if (!imageWriter.isEmbeddedMode() && imageWriter.isVersionNewer(imager["latest_version"])) {
|
if (!imageWriter.isEmbeddedMode() && imageWriter.isVersionNewer(imager["latest_version"])) {
|
||||||
updatepopup.url = imager["url"];
|
updatepopup.url = imager["url"]
|
||||||
updatepopup.openPopup();
|
updatepopup.openPopup()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("default_os" in imager) {
|
if ("default_os" in imager) {
|
||||||
selectNamedOS(imager["default_os"], osmodel);
|
selectNamedOS(imager["default_os"], osmodel)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (imageWriter.isEmbeddedMode()) {
|
if (imageWriter.isEmbeddedMode()) {
|
||||||
if ("embedded_default_os" in imager) {
|
if ("embedded_default_os" in imager) {
|
||||||
selectNamedOS(imager["embedded_default_os"], osmodel);
|
selectNamedOS(imager["embedded_default_os"], osmodel)
|
||||||
}
|
}
|
||||||
if ("embedded_default_destination" in imager) {
|
if ("embedded_default_destination" in imager) {
|
||||||
imageWriter.startDriveListPolling();
|
imageWriter.startDriveListPolling()
|
||||||
setDefaultDest.drive = imager["embedded_default_destination"];
|
setDefaultDest.drive = imager["embedded_default_destination"]
|
||||||
setDefaultDest.start();
|
setDefaultDest.start()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
|
||||||
console.error("Error in fetchOSlist:", e);
|
|
||||||
onError("Error loading device list: " + e.message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Timer {
|
Timer {
|
||||||
|
@ -1826,265 +1643,63 @@ ApplicationWindow {
|
||||||
return m
|
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) {
|
function selectHWitem(hwmodel) {
|
||||||
try {
|
/* Default is exclusive matching */
|
||||||
// Add defensive checks
|
var inclusive = false
|
||||||
if (!hwmodel) {
|
|
||||||
console.error("selectHWitem called with null model");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
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) {
|
if (hwmodel.matching_type) {
|
||||||
switch (hwmodel.matching_type) {
|
switch (hwmodel.matching_type) {
|
||||||
case "exclusive":
|
case "exclusive":
|
||||||
break;
|
break;
|
||||||
case "inclusive":
|
case "inclusive":
|
||||||
inclusive = true;
|
inclusive = true
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle tags with extra care
|
imageWriter.setHWFilterList(hwmodel.tags, inclusive)
|
||||||
var tags = [];
|
|
||||||
|
|
||||||
try {
|
/* Reload list */
|
||||||
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 oslist_json = imageWriter.getFilteredOSlist();
|
||||||
var o = JSON.parse(oslist_json);
|
var o = JSON.parse(oslist_json)
|
||||||
var oslist_parsed = oslistFromJson(o);
|
var oslist_parsed = oslistFromJson(o)
|
||||||
|
if (oslist_parsed === false)
|
||||||
if (oslist_parsed === false) {
|
return
|
||||||
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) {
|
if (oslist_parsed.length != 0) {
|
||||||
var candidate = oslist_parsed[0];
|
var candidate = oslist_parsed[0]
|
||||||
|
|
||||||
if ("description" in candidate &&
|
if ("description" in candidate &&
|
||||||
!("subitems" in candidate) &&
|
!("subitems" in candidate) &&
|
||||||
!candidate["description"].includes("(Recommended)")
|
!candidate["description"].includes("(Recommended)")
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
candidate["description"] += " (Recommended)";
|
candidate["description"] += " (Recommended)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
osmodel.clear();
|
osmodel.clear()
|
||||||
for (var i in oslist_parsed) {
|
for (var i in oslist_parsed) {
|
||||||
osmodel.append(oslist_parsed[i]);
|
osmodel.append(oslist_parsed[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
// When the HW device is changed, reset the OS selection
|
// When the HW device is changed, reset the OS selection otherwise
|
||||||
oslist.currentIndex = -1;
|
// you get a weird effect with the selection moving around in the list
|
||||||
osswipeview.currentIndex = 0;
|
// when the user next opens the OS list, and the user could still have
|
||||||
imageWriter.setSrc("");
|
// an OS selected which isn't compatible with this HW device
|
||||||
osbutton.text = qsTr("CHOOSE CFW");
|
oslist.currentIndex = -1
|
||||||
writebutton.enabled = false;
|
osswipeview.currentIndex = 0
|
||||||
|
imageWriter.setSrc("")
|
||||||
|
osbutton.text = qsTr("CHOOSE CFW")
|
||||||
|
writebutton.enabled = false
|
||||||
|
|
||||||
hwbutton.text = hwmodel.name;
|
hwbutton.text = hwmodel.name
|
||||||
hwpopup.close();
|
hwpopup.close()
|
||||||
} catch (e) {
|
|
||||||
console.error("Error in selectHWitem:", e);
|
|
||||||
onError("Error selecting hardware item: " + e.message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Is the item a sub-list or sub-sub-list in the OS selection model?
|
/// Is the item a sub-list or sub-sub-list in the OS selection model?
|
||||||
|
@ -2110,29 +1725,6 @@ ApplicationWindow {
|
||||||
var m = newSublist()
|
var m = newSublist()
|
||||||
var subitems = JSON.parse(d.subitems_json)
|
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)
|
for (var i in subitems)
|
||||||
{
|
{
|
||||||
var entry = subitems[i];
|
var entry = subitems[i];
|
||||||
|
|
378
src/os_list.json
378
src/os_list.json
|
@ -3,7 +3,7 @@
|
||||||
{
|
{
|
||||||
"name": "muOS 2410.1 Banana for RG35XX Plus",
|
"name": "muOS 2410.1 Banana for RG35XX Plus",
|
||||||
"description": "muOS 2410.1 Banana firmware optimized for Anbernic 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",
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/logo.png?raw=true",
|
||||||
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-PLUS-2410.1-BANANA-d1bae326.img.gz",
|
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-PLUS-2410.1-BANANA-d1bae326.img.gz",
|
||||||
"release_date": "2024-10-12",
|
"release_date": "2024-10-12",
|
||||||
"image_download_size": 2151537628,
|
"image_download_size": 2151537628,
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
{
|
{
|
||||||
"name": "muOS 2410.1 Banana for RG28XX",
|
"name": "muOS 2410.1 Banana for RG28XX",
|
||||||
"description": "muOS 2410.1 Banana firmware optimized for Anbernic 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",
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/logo.png?raw=true",
|
||||||
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG28XX-2410.1-BANANA-d1bae326.img.gz",
|
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG28XX-2410.1-BANANA-d1bae326.img.gz",
|
||||||
"release_date": "2024-10-12",
|
"release_date": "2024-10-12",
|
||||||
"image_download_size": 2158432397,
|
"image_download_size": 2158432397,
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
{
|
{
|
||||||
"name": "muOS 2410.1 Banana for RG35XXH",
|
"name": "muOS 2410.1 Banana for RG35XXH",
|
||||||
"description": "muOS 2410.1 Banana firmware optimized for Anbernic 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",
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/logo.png?raw=true",
|
||||||
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-H-2410.1-BANANA-a10951c4.img.gz",
|
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-H-2410.1-BANANA-a10951c4.img.gz",
|
||||||
"release_date": "2024-10-12",
|
"release_date": "2024-10-12",
|
||||||
"image_download_size": 2118435484,
|
"image_download_size": 2118435484,
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
{
|
{
|
||||||
"name": "muOS 2410.1 Banana for RG35XXSP",
|
"name": "muOS 2410.1 Banana for RG35XXSP",
|
||||||
"description": "muOS 2410.1 Banana firmware optimized for Anbernic 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",
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/logo.png?raw=true",
|
||||||
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-SP-2410.1-BANANA-d1bae326.img.gz",
|
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-SP-2410.1-BANANA-d1bae326.img.gz",
|
||||||
"release_date": "2024-10-12",
|
"release_date": "2024-10-12",
|
||||||
"image_download_size": 2176694960,
|
"image_download_size": 2176694960,
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
{
|
{
|
||||||
"name": "muOS 2410.1 Banana for RG35XX24",
|
"name": "muOS 2410.1 Banana for RG35XX24",
|
||||||
"description": "muOS 2410.1 Banana firmware optimized for Anbernic 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",
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/logo.png?raw=true",
|
||||||
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-2024-2410.1-BANANA-d1bae326.img.gz",
|
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-2024-2410.1-BANANA-d1bae326.img.gz",
|
||||||
"release_date": "2024-10-12",
|
"release_date": "2024-10-12",
|
||||||
"image_download_size": 2151137645,
|
"image_download_size": 2151137645,
|
||||||
|
@ -68,7 +68,7 @@
|
||||||
{
|
{
|
||||||
"name": "muOS 2410.1 Banana for RG40XXH",
|
"name": "muOS 2410.1 Banana for RG40XXH",
|
||||||
"description": "muOS 2410.1 Banana firmware optimized for Anbernic 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",
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/logo.png?raw=true",
|
||||||
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-H-2410.1-BANANA-d1bae326.img.gz",
|
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-H-2410.1-BANANA-d1bae326.img.gz",
|
||||||
"release_date": "2024-10-12",
|
"release_date": "2024-10-12",
|
||||||
"image_download_size": 2132388103,
|
"image_download_size": 2132388103,
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
{
|
{
|
||||||
"name": "muOS 2410.1 Banana for RG40XXV",
|
"name": "muOS 2410.1 Banana for RG40XXV",
|
||||||
"description": "muOS 2410.1 Banana firmware optimized for Anbernic 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",
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/logo.png?raw=true",
|
||||||
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-V-2410.1-BANANA-d1bae326.img.gz",
|
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-V-2410.1-BANANA-d1bae326.img.gz",
|
||||||
"release_date": "2024-10-12",
|
"release_date": "2024-10-12",
|
||||||
"image_download_size": 2132476961,
|
"image_download_size": 2132476961,
|
||||||
|
@ -92,14 +92,14 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ROCKNIX 20241120 for Rockchip RK3326 devices, A image.",
|
"name": "ROCKNIX 20240815 for Rockchip RK3326 devices",
|
||||||
"description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3326 devices.",
|
"description": "ROCKNIX 20240815 firmware optimized for Rockchip RK3326 devices.",
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/rocknix.png?raw=true",
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3326.aarch64-20241120-a.img.gz",
|
"url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-RK3326.aarch64-20240815.img.gz",
|
||||||
"release_date": "2024-11-20",
|
"release_date": "2024-08-15",
|
||||||
"image_download_size": 1348717111,
|
"image_download_size": 1171847190,
|
||||||
"extract_size": 2197815296,
|
"extract_size": 2197815296,
|
||||||
"extract_sha256": "8cc28cca1d4d88464cf156691a540111385c5b94f30aa067456cc80fcd12b747",
|
"extract_sha256": "0bdf629ef90c33ce236dd3cf4fd991d24ac61d4b2f8546d09e602308459b2425",
|
||||||
"devices": [
|
"devices": [
|
||||||
"rg351p",
|
"rg351p",
|
||||||
"rg351m",
|
"rg351m",
|
||||||
|
@ -111,45 +111,32 @@
|
||||||
"ogs",
|
"ogs",
|
||||||
"xu10",
|
"xu10",
|
||||||
"v10",
|
"v10",
|
||||||
"rgb10"
|
"rgb10",
|
||||||
|
"xu_mini_m"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ROCKNIX 20241120 for Rockchip RK3326 devices, B image.",
|
"name": "ROCKNIX 20240815 for Rockchip RK3399 devices",
|
||||||
"description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3326 devices.",
|
"description": "ROCKNIX 20240815 firmware optimized for Rockchip RK3399 devices.",
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/rocknix.png?raw=true",
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3326.aarch64-20241120-b.img.gz",
|
"url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-RK3399.aarch64-20240815.img.gz",
|
||||||
"release_date": "2024-11-20",
|
"release_date": "2024-08-15",
|
||||||
"image_download_size": 1348619756,
|
"image_download_size": 1195501171,
|
||||||
"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_size": 2198863872,
|
||||||
"extract_sha256": "53091696a540d693d99d515524816825a057823c0fe1f91a0b5e4837baeb24b9",
|
"extract_sha256": "8f77e5d80305d93f8e9e21ff7a9191d0f858caae72df18e9a028a9ea17f13416",
|
||||||
"devices": [
|
"devices": [
|
||||||
"rg552"
|
"rg552"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ROCKNIX 20241120 for Rockchip RK3566 devices",
|
"name": "ROCKNIX 20240815 for Rockchip RK3566 devices",
|
||||||
"description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3566 devices.",
|
"description": "ROCKNIX 20240815 firmware optimized for Rockchip RK3566 devices.",
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/rocknix.png?raw=true",
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3566.aarch64-20241120-Generic.img.gz",
|
"url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-RK3566.aarch64-20240815.img.gz",
|
||||||
"release_date": "2024-11-20",
|
"release_date": "2024-08-15",
|
||||||
"image_download_size": 1391749865,
|
"image_download_size": 1282393570,
|
||||||
"extract_size": 2198863872,
|
"extract_size": 2198863872,
|
||||||
"extract_sha256": "4917f090e9364f47de5cf8663c0741eb79b8236c4b455a5ae4d3c8889744de27",
|
"extract_sha256": "c0ae2048a325f54261fba3d052fbb3c26bf11f522241f89e8dc7057ef31e2ef5",
|
||||||
"devices": [
|
"devices": [
|
||||||
"rg353p",
|
"rg353p",
|
||||||
"rg353m",
|
"rg353m",
|
||||||
|
@ -166,27 +153,27 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ROCKNIX 20241120 for Powkiddy X55 devices",
|
"name": "ROCKNIX 20240815 for Powkiddy X55 devices",
|
||||||
"description": "ROCKNIX 20241120 firmware optimized for Powkiddy X55 devices.",
|
"description": "ROCKNIX 20240815 firmware optimized for Powkiddy X55 devices.",
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/rocknix.png?raw=true",
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3566.aarch64-20241120-Powkiddy_x55.img.gz",
|
"url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-RK3566-X55.aarch64-20240815.img.gz",
|
||||||
"release_date": "2024-11-20",
|
"release_date": "2024-08-15",
|
||||||
"image_download_size": 1391396234,
|
"image_download_size": 1282079397,
|
||||||
"extract_size": 2198863872,
|
"extract_size": 2198863872,
|
||||||
"extract_sha256": "35391e0a49de413a2672893a07ed6ca116f90746baef620eebf8d3ab7b2ad5f7",
|
"extract_sha256": "1883848d6b8f6011c15f1aa54f44e5898eb7c89d4f6abcb229b13dd67c9928e8",
|
||||||
"devices": [
|
"devices": [
|
||||||
"x55"
|
"x55"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ROCKNIX 20241120 for Hardkernel ODROID Go Ultra and Powkiddy RGB10 Max 3 Pro devices",
|
"name": "ROCKNIX 20240815 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.",
|
"description": "ROCKNIX 20240815 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",
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/rocknix.png?raw=true",
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-S922X.aarch64-20241120.img.gz",
|
"url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-S922X.aarch64-20240815-Odroid_GOU.img.gz",
|
||||||
"release_date": "2024-11-20",
|
"release_date": "2024-08-15",
|
||||||
"image_download_size": 1416924259,
|
"image_download_size": 1257600535,
|
||||||
"extract_size": 2185232384,
|
"extract_size": 2185232384,
|
||||||
"extract_sha256": "86cd0a48d541e3e68582107748e2f77656c153d11f6efd14563fb65a0f9c5076",
|
"extract_sha256": "ddf4cb558846ab0c826b445bc55da908530fb2f7fbfc0ef070215fe7e0223c65",
|
||||||
"devices": [
|
"devices": [
|
||||||
"ogu",
|
"ogu",
|
||||||
"rgb10_max_3_pro"
|
"rgb10_max_3_pro"
|
||||||
|
@ -195,7 +182,7 @@
|
||||||
{
|
{
|
||||||
"name": "ROCKNIX 20240815 for Hardkernel ODROID N2/N2+ devices",
|
"name": "ROCKNIX 20240815 for Hardkernel ODROID N2/N2+ devices",
|
||||||
"description": "ROCKNIX 20240815 firmware optimized 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",
|
"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_N2.img.gz",
|
"url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-S922X.aarch64-20240815-Odroid_N2.img.gz",
|
||||||
"release_date": "2024-08-15",
|
"release_date": "2024-08-15",
|
||||||
"image_download_size": 1249723275,
|
"image_download_size": 1249723275,
|
||||||
|
@ -209,7 +196,7 @@
|
||||||
{
|
{
|
||||||
"name": "ROCKNIX 20240815 for Hardkernel ODROID N2L devices",
|
"name": "ROCKNIX 20240815 for Hardkernel ODROID N2L devices",
|
||||||
"description": "ROCKNIX 20240815 firmware optimized 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",
|
"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_N2L.img.gz",
|
"url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-S922X.aarch64-20240815-Odroid_N2L.img.gz",
|
||||||
"release_date": "2024-08-15",
|
"release_date": "2024-08-15",
|
||||||
"image_download_size": 1249707786,
|
"image_download_size": 1249707786,
|
||||||
|
@ -220,14 +207,14 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ROCKNIX 20241120 for Rockchip RK3588 devices",
|
"name": "ROCKNIX 20240815 for Rockchip RK3588 devices",
|
||||||
"description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3588 devices.",
|
"description": "ROCKNIX 20240815 firmware optimized for Rockchip RK3588 devices.",
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/rocknix.png?raw=true",
|
||||||
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3588.aarch64-20241120.img.gz",
|
"url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-RK3588.aarch64-20240815.img.gz",
|
||||||
"release_date": "2024-11-20",
|
"release_date": "2024-08-15",
|
||||||
"image_download_size": 1451047021,
|
"image_download_size": 1313142011,
|
||||||
"extract_size": 2198863872,
|
"extract_size": 2198863872,
|
||||||
"extract_sha256": "ec81027b7d9b757f09ccd78ce38c6993009e66ddd4b7e1a1206dc104ad739754",
|
"extract_sha256": "380180b7d8279b5fe0843e11935f27e11053749e084e578faa7ee7d4d4cce0b5",
|
||||||
"devices": [
|
"devices": [
|
||||||
"ace",
|
"ace",
|
||||||
"orange_pi_5",
|
"orange_pi_5",
|
||||||
|
@ -238,313 +225,238 @@
|
||||||
"radxa_rock_cm5",
|
"radxa_rock_cm5",
|
||||||
"nova"
|
"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": {
|
"imager": {
|
||||||
"devices": [
|
"devices": [{
|
||||||
{
|
|
||||||
"name": "Anbernic",
|
|
||||||
"subitems": [
|
|
||||||
{
|
|
||||||
"name": "Anbernic RG40XXH",
|
"name": "Anbernic RG40XXH",
|
||||||
"tags": ["rg40xxh"],
|
"tags": ["rg40xxh"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG40XX%20H.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG40XX%20H.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Anbernic RG40XXV",
|
"name": "Anbernic RG40XXV",
|
||||||
"tags": ["rg40xxv"],
|
"tags": ["rg40xxv"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG40XX%20V.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG40XX%20V.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Anbernic RG35XXH",
|
"name": "Anbernic RG35XXH",
|
||||||
"tags": ["rg35xxh"],
|
"tags": ["rg35xxh"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20H.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX%20H.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Anbernic RG35XX Plus",
|
"name": "Anbernic RG35XX Plus",
|
||||||
"tags": ["rg35xx_plus"],
|
"tags": ["rg35xx_plus"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20-%20PLUS.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX%20-%20PLUS.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Anbernic RG35XX SP",
|
"name": "Anbernic RG35XX SP",
|
||||||
"tags": ["rg35xx_sp"],
|
"tags": ["rg35xx_sp"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20SP.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX%20SP.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Anbernic RG35XX 2024",
|
"name": "Anbernic RG35XX 2024",
|
||||||
"tags": ["rg35xx_2024"],
|
"tags": ["rg35xx_2024"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20-%202024.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX%20-%202024.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Anbernic RG28XX",
|
"name": "Anbernic RG28XX",
|
||||||
"tags": ["rg28xx"],
|
"tags": ["rg28xx"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG28XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG28XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Anbernic RG351P",
|
"name": "Anbernic RG351P",
|
||||||
"tags": ["rg351p"],
|
"tags": ["rg351p"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Anbernic RG351M",
|
"name": "Anbernic RG351M",
|
||||||
"tags": ["rg351m"],
|
"tags": ["rg351m"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Anbernic RG351V",
|
"name": "Anbernic RG351V",
|
||||||
"tags": ["rg351v"],
|
"tags": ["rg351v"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"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/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",
|
"name": "Game Console R33S",
|
||||||
"tags": ["r33s"],
|
"tags": ["r33s"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Game Console R35S",
|
"name": "Game Console R35S",
|
||||||
"tags": ["r35s"],
|
"tags": ["r35s"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Game Console R36S",
|
"name": "Game Console R36S",
|
||||||
"tags": ["r36s"],
|
"tags": ["r36s"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "ODROID",
|
|
||||||
"subitems": [
|
|
||||||
{
|
{
|
||||||
"name": "ODROID Go Advance",
|
"name": "ODROID Go Advance",
|
||||||
"tags": ["oga"],
|
"tags": ["oga"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ODROID Go Super",
|
"name": "ODROID Go Super",
|
||||||
"tags": ["ogs"],
|
"tags": ["ogs"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"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/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",
|
"name": "MagicX XU10",
|
||||||
"tags": ["xu10"],
|
"tags": ["xu10"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"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/fix/src/icons/RG35XX.png?raw=true"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Powkiddy",
|
|
||||||
"subitems": [
|
|
||||||
{
|
{
|
||||||
"name": "Powkiddy V10",
|
"name": "Powkiddy V10",
|
||||||
"tags": ["v10"],
|
"tags": ["v10"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Powkiddy RGB10",
|
"name": "Powkiddy RGB10",
|
||||||
"tags": ["rgb10"],
|
"tags": ["rgb10"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"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",
|
"name": "Powkiddy RK2023",
|
||||||
"tags": ["rk2023"],
|
"tags": ["rk2023"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Powkiddy RGB10 Max 3",
|
"name": "Powkiddy RGB10 Max 3",
|
||||||
"tags": ["rgb10_max_3"],
|
"tags": ["rgb10_max_3"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Powkiddy RGB30",
|
"name": "Powkiddy RGB30",
|
||||||
"tags": ["rgb30"],
|
"tags": ["rgb30"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Powkiddy RGB20SX",
|
"name": "Powkiddy RGB20SX",
|
||||||
"tags": ["rgb20sx"],
|
"tags": ["rgb20sx"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Anbernic RG552",
|
"name": "Anbernic RG552",
|
||||||
"tags": ["rg552"],
|
"tags": ["rg552"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ODROID Go Ultra",
|
"name": "ODROID Go Ultra",
|
||||||
"tags": ["ogu"],
|
"tags": ["ogu"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Powkiddy RGB10 Max 3 Pro",
|
"name": "Powkiddy RGB10 Max 3 Pro",
|
||||||
"tags": ["rgb10_max_3_pro"],
|
"tags": ["rgb10_max_3_pro"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Powkiddy X55",
|
"name": "ODROID N2",
|
||||||
"tags": ["x55"],
|
"tags": ["on2"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Gameforce",
|
"name": "ODROID N2 Plus",
|
||||||
"subitems": [
|
"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)",
|
"name": "Gameforce Ace (default)",
|
||||||
"tags": ["ace"],
|
"tags": ["ace"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Orange Pi",
|
|
||||||
"subitems": [
|
|
||||||
{
|
{
|
||||||
"name": "Orange Pi 5",
|
"name": "Orange Pi 5",
|
||||||
"tags": ["orange_pi_5"],
|
"tags": ["orange_pi_5"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Orange Pi 5 Plus",
|
"name": "Orange Pi 5 Plus",
|
||||||
"tags": ["orange_pi_5_plus"],
|
"tags": ["orange_pi_5_plus"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Radxa",
|
|
||||||
"subitems": [
|
|
||||||
{
|
{
|
||||||
"name": "Radxa Rock 5a",
|
"name": "Radxa Rock 5a",
|
||||||
"tags": ["radxa_rock_5a"],
|
"tags": ["radxa_rock_5a"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Radxa Rock 5b",
|
"name": "Radxa Rock 5b",
|
||||||
"tags": ["radxa_rock_5b"],
|
"tags": ["radxa_rock_5b"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Radxa Rock 5b Plus",
|
"name": "Radxa Rock 5b Plus",
|
||||||
"tags": ["radxa_rock_5b_plus"],
|
"tags": ["radxa_rock_5b_plus"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Radxa Rock CM5",
|
"name": "Radxa Rock CM5",
|
||||||
"tags": ["radxa_rock_cm5"],
|
"tags": ["radxa_rock_cm5"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"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)",
|
"name": "Indiedroid Nova (Must set dtb in extlinuix.conf)",
|
||||||
"tags": ["nova"],
|
"tags": ["nova"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Retroid",
|
"name": "Powkiddy X55",
|
||||||
"subitems": [
|
"tags": ["x55"],
|
||||||
{
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
"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",
|
"name": "MagicX XU Mini M",
|
||||||
"tags": ["rp5"],
|
"tags": ["xu_mini_m"],
|
||||||
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
|
"icon": "https://github.com/cmclark00/retro-imager/blob/dev/src/icons/RG35XX.png?raw=true"
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
<file>icons/cat_language_specific_operating_systems.png</file>
|
<file>icons/cat_language_specific_operating_systems.png</file>
|
||||||
<file>icons/cat_3d_printing.png</file>
|
<file>icons/cat_3d_printing.png</file>
|
||||||
<file>icons/logo_stacked_imager.png</file>
|
<file>icons/logo_stacked_imager.png</file>
|
||||||
<file>icons/banner.png</file>
|
<file>icons/logo_sxs_imager.png</file>
|
||||||
<file>qmlcomponents/ImButton.qml</file>
|
<file>qmlcomponents/ImButton.qml</file>
|
||||||
<file>qmlcomponents/ImButtonRed.qml</file>
|
<file>qmlcomponents/ImButtonRed.qml</file>
|
||||||
<file>qmlcomponents/ImCheckBox.qml</file>
|
<file>qmlcomponents/ImCheckBox.qml</file>
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
{
|
|
||||||
"os_list": [
|
|
||||||
{
|
|
||||||
"name": "Test OS 1",
|
|
||||||
"description": "A test OS for verifying functionality",
|
|
||||||
"icon": "icons/erase.png",
|
|
||||||
"url": "internal://format",
|
|
||||||
"devices": ["rg40xxh"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Test OS 2",
|
|
||||||
"description": "Another test OS",
|
|
||||||
"icon": "icons/erase.png",
|
|
||||||
"url": "internal://format",
|
|
||||||
"devices": ["rg35xx_plus"]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"imager": {
|
|
||||||
"devices": [
|
|
||||||
{
|
|
||||||
"name": "Test Device Category",
|
|
||||||
"subitems": [
|
|
||||||
{
|
|
||||||
"name": "Test Device 1",
|
|
||||||
"tags": ["rg40xxh"],
|
|
||||||
"icon": "icons/erase.png"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Test Device 2",
|
|
||||||
"tags": ["rg35xx_plus"],
|
|
||||||
"icon": "icons/erase.png"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue