catching back up

This commit is contained in:
cmclark00 2024-10-11 02:24:56 -04:00
parent 879b89cae1
commit 4240c0abf2
20 changed files with 189 additions and 76 deletions

View file

@ -8,8 +8,9 @@ build:
cmake: cmake:
source_dir: src/ source_dir: src/
# You should also set your Qt6_ROOT here, like so: # You should also set your Qt6_ROOT here, like so:
# extra_variables: extra_variables:
# - Qt6_ROOT= Qt6_ROOT: /home/corey/Qt/6.7.3/gcc_64
Qt6_DIR: /home/corey/Qt/6.7.3/gcc_64/lib/cmake/Qt6
environment: environment:
BUILD_TYPE: MinSizeRel BUILD_TYPE: MinSizeRel
@ -18,7 +19,9 @@ appimage:
plugins: plugins:
- qt - qt
raw_environment: raw_environment:
QMAKE: /home/corey/Qt/6.7.3/gcc_64/bin/qmake
QML_SOURCES_PATHS: "\"$PROJECT_ROOT\"/src/qmlcomponents/" QML_SOURCES_PATHS: "\"$PROJECT_ROOT\"/src/qmlcomponents/"
environment: environment:
EXTRA_PLATFORM_PLUGINS: "libqwayland-egl.so;libqwayland-generic.so" EXTRA_PLATFORM_PLUGINS: "libqwayland-egl.so;libqwayland-generic.so"
EXTRA_QT_PLUGINS: "waylandcompositor" EXTRA_QT_PLUGINS: "waylandcompositor"

View file

@ -19,6 +19,14 @@ Popup {
closePolicy: Popup.CloseOnEscape closePolicy: Popup.CloseOnEscape
modal: true modal: true
// Define the colors
property color beigeColor: "#c4bebb"
property color maroonColor: "#800000"
property color yellowColor: "#fcad01"
property string selectedCFW: "" // This should be set dynamically
// Set the color scheme based on the selected CFW
property color backgroundColor: selectedCFW.toLowerCase().indexOf("muos") !== -1 ? yellowColor : beigeColor
property color accentColor: selectedCFW.toLowerCase().indexOf("muos") !== -1 ? yellowColor : maroonColor
property alias title: msgpopupheader.text property alias title: msgpopupheader.text
property alias text: msgpopupbody.text property alias text: msgpopupbody.text
property bool continueButton: true property bool continueButton: true
@ -31,7 +39,7 @@ Popup {
// background of title // background of title
Rectangle { Rectangle {
id: msgpopup_title_background id: msgpopup_title_background
color: "#f5f5f5" color: accentColor
anchors.left: parent.left anchors.left: parent.left
anchors.top: parent.top anchors.top: parent.top
height: 35 height: 35

View file

@ -8,7 +8,7 @@
/* Repository URL */ /* Repository URL */
#define OSLIST_URL "https://downloads.raspberrypi.org/os_list_imagingutility_v4.json" #define OSLIST_URL "https://raw.githubusercontent.com/cmclark00/retro-imager/boogaloo/src/os_list.json"
/* Time synchronization URL (only used on eglfs QPA platform, URL must be HTTP) */ /* 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"

BIN
src/icons/RG28XX.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

BIN
src/icons/RG35XX - 2024.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
src/icons/RG35XX - OG.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
src/icons/RG35XX - PLUS.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
src/icons/RG35XX H.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
src/icons/RG35XX SP.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
src/icons/RG35XX.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
src/icons/RG40XX H.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
src/icons/RG40XX V.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

View file

@ -184,9 +184,9 @@ int main(int argc, char *argv[])
#else #else
QApplication app(argc, argv); QApplication app(argc, argv);
#endif #endif
app.setOrganizationName("Raspberry Pi"); app.setOrganizationName("mustardOS");
app.setOrganizationDomain("raspberrypi.org"); app.setOrganizationDomain("muos.dev");
app.setApplicationName("Imager"); app.setApplicationName("Retro Imager");
app.setWindowIcon(QIcon(":/icons/rpi-imager.ico")); app.setWindowIcon(QIcon(":/icons/rpi-imager.ico"));
ImageWriter imageWriter; ImageWriter imageWriter;
NetworkAccessManagerFactory namf; NetworkAccessManagerFactory namf;

View file

@ -11,15 +11,22 @@ import QtQuick.Controls.Material 2.2
import "qmlcomponents" import "qmlcomponents"
ApplicationWindow { ApplicationWindow {
// Define the colors
property color beigeColor: "#c4bebb"
property color maroonColor: "#800000"
property color yellowColor: "#fcad01"
property string selectedCFW: "" // This should be set dynamically
property color backgroundColor: beigeColor
property color accentColor: maroonColor
id: window id: window
visible: true visible: true
width: imageWriter.isEmbeddedMode() ? -1 : 680 width: imageWriter.isEmbeddedMode() ? -1 : 680
height: imageWriter.isEmbeddedMode() ? -1 : 450 height: imageWriter.isEmbeddedMode() ? -1 : 450
minimumWidth: imageWriter.isEmbeddedMode() ? -1 : 680 minimumWidth: imageWriter.isEmbeddedMode() ? -1 : 680
minimumHeight: imageWriter.isEmbeddedMode() ? -1 : 420 minimumHeight: imageWriter.isEmbeddedMode() ? -1 : 450
title: qsTr("Raspberry Pi Imager v%1").arg(imageWriter.constantVersion()) title: qsTr("Retro Imager v%1").arg(imageWriter.constantVersion())
FontLoader {id: roboto; source: "fonts/Roboto-Regular.ttf"} FontLoader {id: roboto; source: "fonts/Roboto-Regular.ttf"}
FontLoader {id: robotoLight; source: "fonts/Roboto-Light.ttf"} FontLoader {id: robotoLight; source: "fonts/Roboto-Light.ttf"}
@ -56,6 +63,7 @@ ApplicationWindow {
Rectangle { Rectangle {
id: logoContainer id: logoContainer
color: accentColor
implicitHeight: window.height/4 implicitHeight: window.height/4
Image { Image {
@ -66,30 +74,22 @@ ApplicationWindow {
width: window.width * 0.45 width: window.width * 0.45
height: window.height / 3 height: window.height / 3
// Within the image's specified size rectangle, resize the smooth: true
// image to fit within the rectangle while keeping its aspect antialiasing: true
// ratio the same. Preserving the aspect ratio implies some
// extra padding between the Image's extend and the actual
// image content: align left so all this padding is on the
// right.
fillMode: Image.PreserveAspectFit
horizontalAlignment: Image.AlignLeft
// Keep the left side of the image 40 pixels from the left anchors {
// edge left: logoContainer.left
anchors.left: logoContainer.left leftMargin: 40
anchors.leftMargin: 40 top: logoContainer.top
bottom: logoContainer.bottom
// Equal padding above and below the image topMargin: window.height / 25
anchors.top: logoContainer.top bottomMargin: window.height / 25
anchors.bottom: logoContainer.bottom }
anchors.topMargin: window.height / 25
anchors.bottomMargin: window.height / 25
} }
} }
Rectangle { Rectangle {
color: "#cd2355" color: backgroundColor
implicitWidth: window.width implicitWidth: window.width
implicitHeight: window.height * (1 - 1/4) implicitHeight: window.height * (1 - 1/4)
@ -115,8 +115,8 @@ ApplicationWindow {
Text { Text {
id: text0 id: text0
color: "#ffffff" color: accentColor
text: qsTr("Raspberry Pi Device") text: qsTr("Retro Gaming Handheld Device")
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredHeight: 17 Layout.preferredHeight: 17
Layout.preferredWidth: 100 Layout.preferredWidth: 100
@ -135,12 +135,31 @@ ApplicationWindow {
topPadding: 0 topPadding: 0
Layout.minimumHeight: 40 Layout.minimumHeight: 40
Layout.fillWidth: true Layout.fillWidth: true
Accessible.ignored: ospopup.visible || dstpopup.visible || hwpopup.visible
Accessible.description: qsTr("Select this button to choose your target Retro Gaming Handheld")
MouseArea {
id: hwbuttonMouseArea
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
onEntered: {
bgrect.mouseOver = true
}
onExited: {
bgrect.mouseOver = false
}
onClicked: { onClicked: {
hwpopup.open() hwpopup.open()
hwlist.forceActiveFocus() hwlist.forceActiveFocus()
} }
Accessible.ignored: ospopup.visible || dstpopup.visible || hwpopup.visible }
Accessible.description: qsTr("Select this button to choose your target Raspberry Pi") Rectangle {
id: bgrect
anchors.fill: parent
color: accentColor
visible: mouseOver
property bool mouseOver: false
}
} }
} }
@ -153,8 +172,8 @@ ApplicationWindow {
Text { Text {
id: text1 id: text1
color: "#ffffff" color: accentColor
text: qsTr("Operating System") text: qsTr("Custom Firmware")
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredHeight: 17 Layout.preferredHeight: 17
font.pixelSize: 12 font.pixelSize: 12
@ -165,19 +184,40 @@ ApplicationWindow {
ImButton { ImButton {
id: osbutton id: osbutton
text: imageWriter.srcFileName() === "" ? qsTr("CHOOSE OS") : imageWriter.srcFileName() text: imageWriter.srcFileName() === "" ? qsTr("CHOOSE CFW") : imageWriter.srcFileName()
spacing: 0 spacing: 0
padding: 0 padding: 0
bottomPadding: 0 bottomPadding: 0
topPadding: 0 topPadding: 0
Layout.minimumHeight: 40 Layout.minimumHeight: 40
Layout.fillWidth: true Layout.fillWidth: true
Accessible.ignored: ospopup.visible || dstpopup.visible || hwpopup.visible
Accessible.description: qsTr("Select this button to change the custom firmware")
MouseArea {
id: osbuttonMouseArea
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
onEntered: {
bgrect1.mouseOver = true
}
onExited: {
bgrect1.mouseOver = false
}
onClicked: { onClicked: {
ospopup.open() ospopup.open()
osswipeview.currentItem.forceActiveFocus() osswipeview.currentItem.forceActiveFocus()
} }
Accessible.ignored: ospopup.visible || dstpopup.visible || hwpopup.visible }
Accessible.description: qsTr("Select this button to change the operating system")
Rectangle {
id: bgrect1
anchors.fill: parent
color: accentColor
visible: mouseOver
property bool mouseOver: false
}
} }
} }
@ -190,7 +230,7 @@ ApplicationWindow {
Text { Text {
id: text2 id: text2
color: "#ffffff" color: accentColor
text: qsTr("Storage") text: qsTr("Storage")
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredHeight: 17 Layout.preferredHeight: 17
@ -230,7 +270,7 @@ ApplicationWindow {
Text { Text {
id: progressText id: progressText
font.pointSize: 10 font.pointSize: 10
color: "white" color: accentColor
font.family: robotoBold.name font.family: robotoBold.name
font.bold: true font.bold: true
visible: false visible: false
@ -244,7 +284,7 @@ ApplicationWindow {
id: progressBar id: progressBar
Layout.fillWidth: true Layout.fillWidth: true
visible: false visible: false
Material.background: "#d15d7d" Material.background: accentColor
} }
} }
@ -312,7 +352,7 @@ ApplicationWindow {
Text { Text {
Layout.columnSpan: 3 Layout.columnSpan: 3
color: "#ffffff" color: accentColor
font.pixelSize: 18 font.pixelSize: 18
font.family: roboto.name font.family: roboto.name
visible: imageWriter.isEmbeddedMode() && imageWriter.customRepo() visible: imageWriter.isEmbeddedMode() && imageWriter.customRepo()
@ -322,7 +362,7 @@ ApplicationWindow {
Text { Text {
id: networkInfo id: networkInfo
Layout.columnSpan: 3 Layout.columnSpan: 3
color: "#ffffff" color: accentColor
font.pixelSize: 18 font.pixelSize: 18
font.family: roboto.name font.family: roboto.name
visible: imageWriter.isEmbeddedMode() visible: imageWriter.isEmbeddedMode()
@ -331,7 +371,7 @@ ApplicationWindow {
Text { Text {
Layout.columnSpan: 3 Layout.columnSpan: 3
color: "#ffffff" color: accentColor
font.pixelSize: 18 font.pixelSize: 18
font.family: roboto.name font.family: roboto.name
visible: !imageWriter.hasMouse() visible: !imageWriter.hasMouse()
@ -346,7 +386,7 @@ ApplicationWindow {
visible: imageWriter.isEmbeddedMode() visible: imageWriter.isEmbeddedMode()
implicitWidth: langbar.width implicitWidth: langbar.width
implicitHeight: langbar.height implicitHeight: langbar.height
color: "#ffffe3" color: backgroundColor
radius: 5 radius: 5
RowLayout { RowLayout {
@ -442,7 +482,7 @@ ApplicationWindow {
// background of title // background of title
Rectangle { Rectangle {
id: hwpopup_title_background id: hwpopup_title_background
color: "#f5f5f5" color: backgroundColor
anchors.left: parent.left anchors.left: parent.left
anchors.top: parent.top anchors.top: parent.top
height: 35 height: 35
@ -507,7 +547,6 @@ ApplicationWindow {
anchors.right: parent.right anchors.right: parent.right
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
boundsBehavior: Flickable.StopAtBounds boundsBehavior: Flickable.StopAtBounds
highlight: Rectangle { color: "lightsteelblue"; radius: 5 }
ScrollBar.vertical: ScrollBar { ScrollBar.vertical: ScrollBar {
anchors.right: parent.right anchors.right: parent.right
width: 10 width: 10
@ -542,14 +581,14 @@ ApplicationWindow {
// background of title // background of title
Rectangle { Rectangle {
id: ospopup_title_background id: ospopup_title_background
color: "#f5f5f5" color: backgroundColor
anchors.left: parent.left anchors.left: parent.left
anchors.top: parent.top anchors.top: parent.top
height: 35 height: 35
width: parent.width width: parent.width
Text { Text {
text: qsTr("Operating System") text: qsTr("Custom Firmware")
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
anchors.fill: parent anchors.fill: parent
anchors.topMargin: 10 anchors.topMargin: 10
@ -607,7 +646,6 @@ ApplicationWindow {
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
width: ospopup.width width: ospopup.width
boundsBehavior: Flickable.StopAtBounds boundsBehavior: Flickable.StopAtBounds
highlight: Rectangle { color: "lightsteelblue"; radius: 5 }
ScrollBar.vertical: ScrollBar { ScrollBar.vertical: ScrollBar {
anchors.right: parent.right anchors.right: parent.right
width: 10 width: 10
@ -659,7 +697,6 @@ ApplicationWindow {
delegate: osdelegate delegate: osdelegate
boundsBehavior: Flickable.StopAtBounds boundsBehavior: Flickable.StopAtBounds
highlight: Rectangle { color: "lightsteelblue"; radius: 5 }
ScrollBar.vertical: ScrollBar { ScrollBar.vertical: ScrollBar {
width: 10 width: 10
policy: parent.contentHeight > parent.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded policy: parent.contentHeight > parent.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded
@ -726,7 +763,7 @@ ApplicationWindow {
Rectangle { Rectangle {
id: bgrect id: bgrect
anchors.fill: parent anchors.fill: parent
color: "#f5f5f5" color: accentColor
visible: mouseOver && parent.ListView.view.currentIndex !== index visible: mouseOver && parent.ListView.view.currentIndex !== index
property bool mouseOver: false property bool mouseOver: false
} }
@ -734,7 +771,7 @@ ApplicationWindow {
id: borderrect id: borderrect
implicitHeight: 1 implicitHeight: 1
implicitWidth: parent.width implicitWidth: parent.width
color: "#dcdcdc" color: accentColor
y: parent.height y: parent.height
} }
@ -771,16 +808,8 @@ ApplicationWindow {
Text { Text {
Layout.fillWidth: true Layout.fillWidth: true
font.family: roboto.name font.family: roboto.name
text: description
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
color: "#1a1a1a" color: accentColor
}
ToolTip {
visible: hwMouseArea.containsMouse && typeof(tooltip) == "string" && tooltip != ""
delay: 1000
text: typeof(tooltip) == "string" ? tooltip : ""
clip: false
} }
} }
} }
@ -792,7 +821,7 @@ ApplicationWindow {
Item { Item {
width: window.width-100 width: window.width-100
height: contentLayout.implicitHeight + 24 height: Math.max(contentLayout.implicitHeight + 24, 50)
Accessible.name: name+".\n"+description Accessible.name: name+".\n"+description
MouseArea { MouseArea {
@ -803,10 +832,14 @@ ApplicationWindow {
onEntered: { onEntered: {
bgrect.mouseOver = true bgrect.mouseOver = true
mouseText.color = backgroundColor
mouseText2.color = backgroundColor
} }
onExited: { onExited: {
bgrect.mouseOver = false bgrect.mouseOver = false
mouseText.color = accentColor
mouseText2.color = accentColor
} }
onClicked: { onClicked: {
@ -817,7 +850,7 @@ ApplicationWindow {
Rectangle { Rectangle {
id: bgrect id: bgrect
anchors.fill: parent anchors.fill: parent
color: "#f5f5f5" color: backgroundColor
visible: mouseOver && parent.ListView.view.currentIndex !== index visible: mouseOver && parent.ListView.view.currentIndex !== index
property bool mouseOver: false property bool mouseOver: false
} }
@ -825,7 +858,7 @@ ApplicationWindow {
id: borderrect id: borderrect
implicitHeight: 1 implicitHeight: 1
implicitWidth: parent.width implicitWidth: parent.width
color: "#dcdcdc" color: accentColor
y: parent.height y: parent.height
} }
@ -884,17 +917,19 @@ ApplicationWindow {
} }
Text { Text {
id:mouseText
Layout.fillWidth: true Layout.fillWidth: true
elide: Text.ElideRight elide: Text.ElideRight
color: "#646464" color: accentColor
font.weight: Font.Light font.weight: Font.Light
visible: typeof(release_date) == "string" && release_date visible: typeof(release_date) == "string" && release_date
text: qsTr("Released: %1").arg(release_date) text: qsTr("Released: %1").arg(release_date)
} }
Text { Text {
id:mouseText2
Layout.fillWidth: true Layout.fillWidth: true
elide: Text.ElideRight elide: Text.ElideRight
color: "#646464" color: accentColor
font.weight: Font.Light font.weight: Font.Light
visible: typeof(url) == "string" && url != "" && url != "internal://format" visible: typeof(url) == "string" && url != "" && url != "internal://format"
text: !url ? "" : text: !url ? "" :
@ -939,7 +974,7 @@ ApplicationWindow {
// background of title // background of title
Rectangle { Rectangle {
id: dstpopup_title_background id: dstpopup_title_background
color: "#f5f5f5" color: backgroundColor
anchors.left: parent.left anchors.left: parent.left
anchors.top: parent.top anchors.top: parent.top
height: 35 height: 35
@ -993,7 +1028,6 @@ ApplicationWindow {
anchors.right: parent.right anchors.right: parent.right
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
boundsBehavior: Flickable.StopAtBounds boundsBehavior: Flickable.StopAtBounds
highlight: Rectangle { color: "lightsteelblue"; radius: 5 }
clip: true clip: true
Label { Label {
@ -1051,7 +1085,7 @@ ApplicationWindow {
anchors.right: parent.right anchors.right: parent.right
height: 60 height: 60
color: mouseOver ? "#f5f5f5" : "#ffffff" color: mouseOver ? accentColor : "#ffffff"
property bool mouseOver: false property bool mouseOver: false
RowLayout { RowLayout {
@ -1150,7 +1184,7 @@ ApplicationWindow {
yesButton: true yesButton: true
noButton: true noButton: true
title: qsTr("Are you sure you want to quit?") title: qsTr("Are you sure you want to quit?")
text: qsTr("Raspberry Pi Imager is still busy.<br>Are you sure you want to quit?") text: qsTr("Retro-Imager is still busy.<br>Are you sure you want to quit?")
onYes: { onYes: {
Qt.quit() Qt.quit()
} }
@ -1174,7 +1208,7 @@ ApplicationWindow {
progressText.visible = true progressText.visible = true
progressBar.visible = true progressBar.visible = true
progressBar.indeterminate = true progressBar.indeterminate = true
progressBar.Material.accent = "#ffffff" progressBar.Material.accent = accentColor
osbutton.enabled = false osbutton.enabled = false
dstbutton.enabled = false dstbutton.enabled = false
hwbutton.enabled = false hwbutton.enabled = false
@ -1277,7 +1311,7 @@ ApplicationWindow {
return return
progressText.text = qsTr("Verifying... %1%").arg(Math.floor(newPos*100)) progressText.text = qsTr("Verifying... %1%").arg(Math.floor(newPos*100))
progressBar.Material.accent = "#6cc04a" progressBar.Material.accent = accentColor
progressBar.value = newPos progressBar.value = newPos
} }
} }
@ -1652,7 +1686,7 @@ ApplicationWindow {
oslist.currentIndex = -1 oslist.currentIndex = -1
osswipeview.currentIndex = 0 osswipeview.currentIndex = 0
imageWriter.setSrc("") imageWriter.setSrc("")
osbutton.text = qsTr("CHOOSE OS") osbutton.text = qsTr("CHOOSE CFW")
writebutton.enabled = false writebutton.enabled = false
hwbutton.text = hwmodel.name hwbutton.text = hwmodel.name

68
src/os_list.json Normal file
View file

@ -0,0 +1,68 @@
{
"os_list": [
{
"name": "muOS 2405.1 Refried Beans for RG35XX Plus/H/SP/2024",
"description": "muOS 2405.1 Refried Beans firmware optimized for Anbernic RG35XX Plus/H/SP/2024.",
"icon": "https://muos.dev/lib/tpl/muos/images/logo.png",
"url": "https://dl.muos.dev/RG35XX-SPLUSH24/muOS-RG35XX-2405.1-REFRIED.zip",
"release_date": "2024-06-23",
"image_download_size": 1900000000,
"extract_size": 4294967296,
"extract_sha256": "60b556c123825c586b02da6e257d6e385a70ef64a7c542f4287c373f8b853405",
"devices": [
"rg35xxh",
"rg35xx_plus",
"rg35xx_sp",
"rg35xx_2024"
]
},
{
"name": "muOS 2405.1 Refried Beans for RG28XX",
"description": "muOS 2405.1 Refried Beans firmware optimized for Anbernic RG35XXH.",
"icon": "https://muos.dev/lib/tpl/muos/images/logo.png",
"url": "https://dl.muos.dev/RG28XX/muOS-RG28XX-2405.1-REFRIED.zip",
"release_date": "2024-06-23",
"image_download_size": 1900000000,
"extract_size": 4626317312,
"extract_sha256": "4d538985e82eef5aa98b438f88276bb69c015533b0ee537ddac3d8642d2f8e94",
"devices": [
"rg28xx"
]
}
],
"imager": {
"devices": [
{
"name": "Anbernic RG40XXH",
"tags": ["rg40xxh"],
"icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG40XX%20H.png?raw=true"
},
{
"name": "Anbernic RG35XXH",
"tags": ["rg35xxh"],
"icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG35XX%20H.png?raw=true"
},
{
"name": "Anbernic RG35XX Plus",
"tags": ["rg35xx_plus"],
"icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG35XX%20-%20PLUS.png?raw=true"
},
{
"name": "Anbernic RG35XX SP",
"tags": ["rg35xx_sp"],
"icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG35XX%20SP.png?raw=true"
},
{
"name": "Anbernic RG35XX 2024",
"tags": ["rg35xx_2024"],
"icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG35XX%20-%202024.png?raw=true"
},
{
"name": "Anbernic RG28XX",
"tags": ["rg28xx"],
"icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG28XX.png?raw=true"
}
]
}
}