This commit is contained in:
cmclark00 2025-03-19 21:26:32 -04:00
parent 34089867a1
commit 182e9b91ae
93 changed files with 721 additions and 52 deletions

16
minimal_test.json Normal file
View file

@ -0,0 +1,16 @@
{
"os_list": [
{
"name": "Test OS 1",
"description": "A test OS for verifying functionality",
"icon": "icons/erase.png",
"url": "internal://format"
},
{
"name": "Test OS 2",
"description": "Another test OS",
"icon": "icons/erase.png",
"url": "internal://format"
}
]
}

552
os_list.json Normal file
View file

@ -0,0 +1,552 @@
{
"os_list": [
{
"name": "muOS 2410.1 Banana for RG35XX Plus",
"description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XX Plus.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-PLUS-2410.1-BANANA-d1bae326.img.gz",
"release_date": "2024-10-12",
"image_download_size": 2151537628,
"extract_size": 4504682496,
"extract_sha256": "62c492047923e3e8709e0b015760b7f1e0db2ccab40e741fe067b49d96957624",
"devices": [
"rg35xx_plus"
]
},
{
"name": "muOS 2410.1 Banana for RG28XX",
"description": "muOS 2410.1 Banana firmware optimized for Anbernic RG28XX.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG28XX-2410.1-BANANA-d1bae326.img.gz",
"release_date": "2024-10-12",
"image_download_size": 2158432397,
"extract_size": 4504682496,
"extract_sha256": "62c492047923e3e8709e0b015760b7f1e0db2ccab40e741fe067b49d96957624",
"devices": [
"rg28xx"
]
},
{
"name": "muOS 2410.1 Banana for RG35XXH",
"description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XXH.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-H-2410.1-BANANA-a10951c4.img.gz",
"release_date": "2024-10-12",
"image_download_size": 2118435484,
"extract_size": 4504682496,
"extract_sha256": "a84a1386de3b046aea05c75a4ccc8da0fbc2ee42f89b7b78a720cf657f45d3d2",
"devices": [
"rg35xxh"
]
},
{
"name": "muOS 2410.1 Banana for RG35XXSP",
"description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XXSP.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-SP-2410.1-BANANA-d1bae326.img.gz",
"release_date": "2024-10-12",
"image_download_size": 2176694960,
"extract_size": 4504682496,
"extract_sha256": "9a529d2f089bba6616615026c6ec16e282d622adbc6ae97172b7ab73d32092c4",
"devices": [
"rg35xx_sp"
]
},
{
"name": "muOS 2410.1 Banana for RG35XX24",
"description": "muOS 2410.1 Banana firmware optimized for Anbernic RG35XX24.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG35XX-2024-2410.1-BANANA-d1bae326.img.gz",
"release_date": "2024-10-12",
"image_download_size": 2151137645,
"extract_size": 4504682496,
"extract_sha256": "fc0da5aa0dcda244be8dec28115210200fe259c374bb7b25d6d26f4db812d351",
"devices": [
"rg35xx_2024"
]
},
{
"name": "muOS 2410.1 Banana for RG40XXH",
"description": "muOS 2410.1 Banana firmware optimized for Anbernic RG40XXH.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-H-2410.1-BANANA-d1bae326.img.gz",
"release_date": "2024-10-12",
"image_download_size": 2132388103,
"extract_size": 4504682496,
"extract_sha256": "fe51f4f3a7f9e51c34eb78ef704a9a6af0233d6fdf87ccd070444034003afe5c",
"devices": [
"rg40xxh"
]
},
{
"name": "muOS 2410.1 Banana for RG40XXV",
"description": "muOS 2410.1 Banana firmware optimized for Anbernic RG40XXV.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/logo.png?raw=true",
"url": "https://dl.muos.dev/RELEASE/2410.1/muOS-RG40XX-V-2410.1-BANANA-d1bae326.img.gz",
"release_date": "2024-10-12",
"image_download_size": 2132476961,
"extract_size": 4504682496,
"extract_sha256": "aa2cd35010e1414c62b0460d8f193d7a3c56ebcf3f59a220aebe995ab93bb051",
"devices": [
"rg40xxv"
]
},
{
"name": "ROCKNIX 20241120 for Rockchip RK3326 devices, A image.",
"description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3326 devices.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3326.aarch64-20241120-a.img.gz",
"release_date": "2024-11-20",
"image_download_size": 1348717111,
"extract_size": 2197815296,
"extract_sha256": "8cc28cca1d4d88464cf156691a540111385c5b94f30aa067456cc80fcd12b747",
"devices": [
"rg351p",
"rg351m",
"rg351v",
"r33s",
"r35s",
"r36s",
"oga",
"ogs",
"xu10",
"v10",
"rgb10"
]
},
{
"name": "ROCKNIX 20241120 for Rockchip RK3326 devices, B image.",
"description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3326 devices.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3326.aarch64-20241120-b.img.gz",
"release_date": "2024-11-20",
"image_download_size": 1348619756,
"extract_size": 2197815296,
"extract_sha256": "e43ed5ea9c8c93408a180e57409e9a07d7594ecb1ffe46f21024655f46ea9050",
"devices": [
"xu_mini_m",
"rgb10x"
]
},
{
"name": "ROCKNIX 20241120 for Rockchip RK3399 devices",
"description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3399 devices.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3399.aarch64-20241120.img.gz",
"release_date": "2024-11-20",
"image_download_size": 1288581465,
"extract_size": 2198863872,
"extract_sha256": "53091696a540d693d99d515524816825a057823c0fe1f91a0b5e4837baeb24b9",
"devices": [
"rg552"
]
},
{
"name": "ROCKNIX 20241120 for Rockchip RK3566 devices",
"description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3566 devices.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3566.aarch64-20241120-Generic.img.gz",
"release_date": "2024-11-20",
"image_download_size": 1391749865,
"extract_size": 2198863872,
"extract_sha256": "4917f090e9364f47de5cf8663c0741eb79b8236c4b455a5ae4d3c8889744de27",
"devices": [
"rg353p",
"rg353m",
"rg353v",
"rg353vs",
"rg353ps",
"rg503",
"rg_arc_d",
"rg_arc_s",
"rk2023",
"rgb10_max_3",
"rgb30",
"rgb20sx"
]
},
{
"name": "ROCKNIX 20241120 for Powkiddy X55 devices",
"description": "ROCKNIX 20241120 firmware optimized for Powkiddy X55 devices.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3566.aarch64-20241120-Powkiddy_x55.img.gz",
"release_date": "2024-11-20",
"image_download_size": 1391396234,
"extract_size": 2198863872,
"extract_sha256": "35391e0a49de413a2672893a07ed6ca116f90746baef620eebf8d3ab7b2ad5f7",
"devices": [
"x55"
]
},
{
"name": "ROCKNIX 20241120 for Hardkernel ODROID Go Ultra and Powkiddy RGB10 Max 3 Pro devices",
"description": "ROCKNIX 20241120 firmware optimized for ODROID Go Ultra and RGB10 Max 3 Pro devices.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-S922X.aarch64-20241120.img.gz",
"release_date": "2024-11-20",
"image_download_size": 1416924259,
"extract_size": 2185232384,
"extract_sha256": "86cd0a48d541e3e68582107748e2f77656c153d11f6efd14563fb65a0f9c5076",
"devices": [
"ogu",
"rgb10_max_3_pro"
]
},
{
"name": "ROCKNIX 20240815 for Hardkernel ODROID N2/N2+ devices",
"description": "ROCKNIX 20240815 firmware optimized for Hardkernel ODROID N2/N2+ devices.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
"url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-S922X.aarch64-20240815-Odroid_N2.img.gz",
"release_date": "2024-08-15",
"image_download_size": 1249723275,
"extract_size": 2185232384,
"extract_sha256": "7e5b56f4a0c0a9d9c64e7b1ba4472dd7e2dac9c28a23585098e16349f30c7fc9",
"devices": [
"on2",
"on2_plus"
]
},
{
"name": "ROCKNIX 20240815 for Hardkernel ODROID N2L devices",
"description": "ROCKNIX 20240815 firmware optimized for Hardkernel ODROID N2L devices.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
"url": "https://github.com/ROCKNIX/distribution/releases/download/20240815/ROCKNIX-S922X.aarch64-20240815-Odroid_N2L.img.gz",
"release_date": "2024-08-15",
"image_download_size": 1249707786,
"extract_size": 2185232384,
"extract_sha256": "5af36c78b57dcb35c910bb72c2ed28208fe94c94d5b7fda83d73ef33a2419910",
"devices": [
"on2l"
]
},
{
"name": "ROCKNIX 20241120 for Rockchip RK3588 devices",
"description": "ROCKNIX 20241120 firmware optimized for Rockchip RK3588 devices.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-RK3588.aarch64-20241120.img.gz",
"release_date": "2024-11-20",
"image_download_size": 1451047021,
"extract_size": 2198863872,
"extract_sha256": "ec81027b7d9b757f09ccd78ce38c6993009e66ddd4b7e1a1206dc104ad739754",
"devices": [
"ace",
"orange_pi_5",
"orange_pi_5_plus",
"radxa_rock_5a",
"radxa_rock_5b",
"radxa_rock_5b_plus",
"radxa_rock_cm5",
"nova"
]
},
{
"name": "ROCKNIX 20241120 for Retroid Pocket Mini and Retroid Pocket 5 devices",
"description": "ROCKNIX 20241120 firmware optimized for Snapdragon 865 devices.",
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/rocknix.png?raw=true",
"url": "https://github.com/ROCKNIX/distribution/releases/download/20241120/ROCKNIX-SD865.aarch64-20241120.img.gz",
"release_date": "2024-11-20",
"image_download_size": 1404994449,
"extract_size": 2198863872,
"extract_sha256": "82f9336c27c9b733322e7e9f685bc1e98aa4eedb0c17f9ae297edb983ada6f39",
"devices": [
"rpmini",
"rp5"
]
}
],
"imager": {
"devices": [
{
"name": "Anbernic",
"subitems": [
{
"name": "Anbernic RG40XXH",
"tags": ["rg40xxh"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG40XX%20H.png?raw=true"
},
{
"name": "Anbernic RG40XXV",
"tags": ["rg40xxv"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG40XX%20V.png?raw=true"
},
{
"name": "Anbernic RG35XXH",
"tags": ["rg35xxh"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20H.png?raw=true"
},
{
"name": "Anbernic RG35XX Plus",
"tags": ["rg35xx_plus"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20-%20PLUS.png?raw=true"
},
{
"name": "Anbernic RG35XX SP",
"tags": ["rg35xx_sp"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20SP.png?raw=true"
},
{
"name": "Anbernic RG35XX 2024",
"tags": ["rg35xx_2024"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX%20-%202024.png?raw=true"
},
{
"name": "Anbernic RG28XX",
"tags": ["rg28xx"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG28XX.png?raw=true"
},
{
"name": "Anbernic RG351P",
"tags": ["rg351p"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Anbernic RG351M",
"tags": ["rg351m"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Anbernic RG351V",
"tags": ["rg351v"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Anbernic RG353P",
"tags": ["rg353p"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Anbernic RG353M",
"tags": ["rg353m"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Anbernic RG353V",
"tags": ["rg353v"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Anbernic RG353VS",
"tags": ["rg353vs"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Anbernic RG353PS",
"tags": ["rg353ps"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Anbernic RG503",
"tags": ["rg503"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Anbernic RG Arc-D",
"tags": ["rg_arc_d"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Anbernic RG Arc-S",
"tags": ["rg_arc_s"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
}
]
},
{
"name": "Game Console",
"subitems": [
{
"name": "Game Console R33S",
"tags": ["r33s"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Game Console R35S",
"tags": ["r35s"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Game Console R36S",
"tags": ["r36s"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
}
]
},
{
"name": "ODROID",
"subitems": [
{
"name": "ODROID Go Advance",
"tags": ["oga"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "ODROID Go Super",
"tags": ["ogs"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "ODROID N2",
"tags": ["on2"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "ODROID N2 Plus",
"tags": ["on2_plus"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "ODROID N2L",
"tags": ["on2l"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
}
]
},
{
"name": "MagicX",
"subitems": [
{
"name": "MagicX XU10",
"tags": ["xu10"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "MagicX XU Mini M",
"tags": ["xu_mini_m"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
}
]
},
{
"name": "Powkiddy",
"subitems": [
{
"name": "Powkiddy V10",
"tags": ["v10"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Powkiddy RGB10",
"tags": ["rgb10"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Powkiddy RK2023",
"tags": ["rk2023"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Powkiddy RGB10 Max 3",
"tags": ["rgb10_max_3"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Powkiddy RGB30",
"tags": ["rgb30"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Powkiddy RGB20SX",
"tags": ["rgb20sx"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Anbernic RG552",
"tags": ["rg552"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "ODROID Go Ultra",
"tags": ["ogu"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Powkiddy RGB10 Max 3 Pro",
"tags": ["rgb10_max_3_pro"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Powkiddy X55",
"tags": ["x55"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
}
]
},
{
"name": "Gameforce",
"subitems": [
{
"name": "Gameforce Ace (default)",
"tags": ["ace"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
}
]
},
{
"name": "Orange Pi",
"subitems": [
{
"name": "Orange Pi 5",
"tags": ["orange_pi_5"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Orange Pi 5 Plus",
"tags": ["orange_pi_5_plus"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
}
]
},
{
"name": "Radxa",
"subitems": [
{
"name": "Radxa Rock 5a",
"tags": ["radxa_rock_5a"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Radxa Rock 5b",
"tags": ["radxa_rock_5b"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Radxa Rock 5b Plus",
"tags": ["radxa_rock_5b_plus"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Radxa Rock CM5",
"tags": ["radxa_rock_cm5"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
}
]
},
{
"name": "Indiedroid",
"subitems": [
{
"name": "Indiedroid Nova (Must set dtb in extlinuix.conf)",
"tags": ["nova"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
}
]
},
{
"name": "Retroid",
"subitems": [
{
"name": "Retroid Pocket Mini",
"tags": ["rpmini"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
},
{
"name": "Retroid Pocket 5",
"tags": ["rp5"],
"icon": "https://github.com/cmclark00/retro-imager/blob/fix/src/icons/RG35XX.png?raw=true"
}
]
}
]
}
}

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.

View file

@ -0,0 +1,5 @@
QMAKE_PRL_TARGET = libqdarwinbluetoothpermission.a
QMAKE_PRL_CONFIG = static
QMAKE_PRL_VERSION = 6.8.2
QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework CoreBluetooth
QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework CoreBluetooth

Binary file not shown.

View file

@ -0,0 +1,5 @@
QMAKE_PRL_TARGET = libqdarwincalendarpermission.a
QMAKE_PRL_CONFIG = static
QMAKE_PRL_VERSION = 6.8.2
QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework EventKit
QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework EventKit

Binary file not shown.

View file

@ -0,0 +1,5 @@
QMAKE_PRL_TARGET = libqdarwincamerapermission.a
QMAKE_PRL_CONFIG = static
QMAKE_PRL_VERSION = 6.8.2
QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework AVFoundation
QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework AVFoundation

Binary file not shown.

View file

@ -0,0 +1,5 @@
QMAKE_PRL_TARGET = libqdarwincontactspermission.a
QMAKE_PRL_CONFIG = static
QMAKE_PRL_VERSION = 6.8.2
QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework Contacts
QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework Contacts

Binary file not shown.

View file

@ -0,0 +1,5 @@
QMAKE_PRL_TARGET = libqdarwinlocationpermission.a
QMAKE_PRL_CONFIG = static
QMAKE_PRL_VERSION = 6.8.2
QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework CoreLocation
QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework CoreLocation

View file

@ -0,0 +1,5 @@
QMAKE_PRL_TARGET = libqdarwinmicrophonepermission.a
QMAKE_PRL_CONFIG = static
QMAKE_PRL_VERSION = 6.8.2
QMAKE_PRL_LIBS = -F$$[QT_INSTALL_LIBS] -framework QtCore -framework IOKit -framework DiskArbitration -framework UniformTypeIdentifiers -framework Foundation -framework AVFoundation
QMAKE_PRL_LIBS_FOR_CMAKE = -F$$[QT_INSTALL_LIBS];-framework;QtCore;-framework IOKit;-framework DiskArbitration;-framework UniformTypeIdentifiers;-framework Foundation;-framework AVFoundation

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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.

View file

@ -433,32 +433,30 @@ 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}")
add_custom_command(TARGET ${PROJECT_NAME} # Don't rename the app bundle, use the project name consistently
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}/Raspberry\ Pi\ Imager.app") COMMAND codesign -f --deep --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app")
# Create the .dmg for distribution # 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 "Raspberry Pi Imager" -srcfolder "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.app" -ov -format UDBZ "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg") COMMAND hdiutil create -volname "${PROJECT_NAME}" -srcfolder "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -ov -format UDBZ "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg")
# Sign the .dmg for distribution, but do not initialise notarisation # 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}/Raspberry\ Pi\ Imager.dmg") COMMAND codesign -f --digest-algorithm=sha1,sha256 -o runtime --timestamp -s "${IMAGER_SIGNING_IDENTITY}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg")
if(IMAGER_NOTARIZE_APP) if(IMAGER_NOTARIZE_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}/Raspberry\ Pi\ Imager.dmg" --wait --keychain-profile "${IMAGER_NOTARIZE_KEYCHAIN_PROFILE}") COMMAND xcrun notarytool submit "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg" --wait --keychain-profile "${IMAGER_NOTARIZE_KEYCHAIN_PROFILE}")
add_custom_command(TARGET ${PROJECT_NAME} add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD POST_BUILD
COMMAND xcrun stapler staple "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager.dmg") COMMAND xcrun stapler staple "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.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)
@ -471,12 +469,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}/Raspberry\ Pi\ Imager.app" -qmldir="${CMAKE_CURRENT_SOURCE_DIR}" -always-overwrite -no-strip -dmg) COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app" -qmldir="${CMAKE_CURRENT_SOURCE_DIR}" -always-overwrite -no-strip -dmg)
endif(IMAGER_SIGNED_APP) 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}/Raspberry\ Pi\ Imager.dmg" "${CMAKE_BINARY_DIR}/Raspberry\ Pi\ Imager-${IMAGER_VERSION_STR}.dmg") COMMAND "mv" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dmg" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${IMAGER_VERSION_STR}.dmg")
else() else()
# UNIX, Linux systems # UNIX, Linux systems

View file

@ -640,50 +640,43 @@ ApplicationWindow {
} }
// Component for the device subcategory list // Component for the device subcategory list
// We don't need this component definition anymore since we're creating the Component {
// ListView directly in the SwipeView. If you still have the component definition, id: subHwlist
// you can safely remove it or comment it out:
/* ListView {
Component { clip: true
id: subHwlist model: ListModel {
ListElement {
ListView { name: "Back"
model: ListModel { tags: "[]"
ListElement { icon: "icons/ic_chevron_left_40px.svg"
name: "Back" description: "Go back to main menu"
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")
} }
} }
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")
}
} }
}
*/
/* /*
Popup for OS selection Popup for OS selection
@ -1926,7 +1919,26 @@ Component {
console.log("Processing subitems for: " + hwmodel.name); console.log("Processing subitems for: " + hwmodel.name);
console.log("Subitems type: " + typeof subitems); console.log("Subitems type: " + typeof subitems);
// Make sure subitems is iterable // 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)) { if (Array.isArray(subitems)) {
console.log("Subitems count: " + subitems.length); console.log("Subitems count: " + subitems.length);
@ -1961,7 +1973,8 @@ Component {
hwswipeview.incrementCurrentIndex(); hwswipeview.incrementCurrentIndex();
console.log("New SwipeView index: " + hwswipeview.currentIndex); console.log("New SwipeView index: " + hwswipeview.currentIndex);
} else { } else {
console.error("subitems is not an array: " + typeof subitems); console.error("Subitems is not an array or object: " + typeof subitems);
onError("Error: Invalid subitems format");
} }
} else { } else {
console.log("No subitems found for: " + hwmodel.name); console.log("No subitems found for: " + hwmodel.name);
@ -2096,6 +2109,29 @@ Component {
if (typeof(d.subitems_json) == "string" && d.subitems_json !== "") { if (typeof(d.subitems_json) == "string" && d.subitems_json !== "") {
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)
{ {

37
test_os_list.json Normal file
View file

@ -0,0 +1,37 @@
{
"os_list": [
{
"name": "Test OS 1",
"description": "A test OS for verifying functionality",
"icon": "icons/erase.png",
"url": "internal://format",
"devices": ["rg40xxh"]
},
{
"name": "Test OS 2",
"description": "Another test OS",
"icon": "icons/erase.png",
"url": "internal://format",
"devices": ["rg35xx_plus"]
}
],
"imager": {
"devices": [
{
"name": "Test Device Category",
"subitems": [
{
"name": "Test Device 1",
"tags": ["rg40xxh"],
"icon": "icons/erase.png"
},
{
"name": "Test Device 2",
"tags": ["rg35xx_plus"],
"icon": "icons/erase.png"
}
]
}
]
}
}