Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
a61dfc5
Init Backup page and related files
Amigache Mar 3, 2025
c253294
feat: add multiple format support for backup/restore
Amigache Jan 27, 2026
ce42eaa
Merge origin/main into radio-backup
Amigache Jan 27, 2026
ed8a294
chore: format translation files
Amigache Jan 27, 2026
9acadc8
fix: resolve TypeScript errors in backup components
Amigache Jan 27, 2026
9da6a48
chore: update locale translations from main merge
Amigache Jan 27, 2026
c981609
fix: update backup translations and improve file upload handling
Amigache Jan 27, 2026
e02a0d7
fix: improve rendering of highlighted differences in DiffViewerModal
Amigache Jan 27, 2026
cb62382
fix: lock @electron/node-gyp to npm version to fix CI
Amigache Feb 8, 2026
58ca1d0
fix: resolve TypeScript compilation errors
Amigache Feb 8, 2026
a018b38
fix: resolve CI failures - formatting and test structure
Amigache Feb 8, 2026
5673490
fix: replace private _extendTest API with public extend API
Amigache Feb 8, 2026
81f1d54
fix: ensure test object maintains proper Playwright type through page…
Amigache Feb 8, 2026
d212ab2
fix: revert e2e test files to match main branch structure
Amigache Feb 8, 2026
b75524f
fix: pin playwright to 1.29.1 to match @playwright/test version
Amigache Feb 8, 2026
38a333d
test: add unit tests for backup functionality
Amigache Feb 8, 2026
042b377
fix: add type assertions and format backup.spec.ts for TypeScript com…
Amigache Feb 8, 2026
b636231
test: add comprehensive tests for zipParser module (16 tests)
Amigache Feb 8, 2026
f08c37d
test: add error handling tests for backup GraphQL resolvers (8 new te…
Amigache Feb 8, 2026
9d63b93
test(backup): add comprehensive test coverage for backup components
Amigache Feb 8, 2026
55b6b80
test: add comprehensive tests for backup flow components
Amigache Feb 8, 2026
ffe7b94
fix: add type assertion to createElement mock for TypeScript compatib…
Amigache Feb 8, 2026
97c7a88
fix: possibly unsafe json.parse
pfeerick Feb 18, 2026
4c3d37e
fix: don't bypass custom render function in testing-library
pfeerick Feb 19, 2026
7407e71
fix: do not bypass custom testing-library/react
pfeerick Feb 19, 2026
9f9d798
fix: use template literal to satisfy linter
pfeerick Feb 19, 2026
bed61b4
fix: Models key is filename not modelname
pfeerick Feb 19, 2026
db7e65c
fix: colour and b&w are different beasts
pfeerick Feb 19, 2026
98106ef
fix: more use of MAX_MODELS constant
pfeerick Feb 19, 2026
65260ed
fix(locales): update language strings for model handling prompts
Amigache Feb 19, 2026
a14e4b5
fix(locales): add message for labels.yml inclusion in .etx backups
Amigache Feb 19, 2026
9a1ba7e
feat: Enhance backup and restore functionality with collision detecti…
Amigache Feb 20, 2026
0939869
fix: restore labels.yml data from backup during restore
Amigache Mar 2, 2026
aeb36ce
Merge remote-tracking branch 'upstream/main' into radio-backup
Amigache Mar 2, 2026
6e707e0
fix: remove react-ga dependency from BackupUploader
Amigache Mar 2, 2026
b474260
fix: update display name logic and exclude radio.yml from model valid…
Amigache Mar 4, 2026
88022c7
fix: update yarn command to include skip-build mode in pipeline
Amigache Mar 4, 2026
0d87869
fix: remove skip-build mode from yarn commands in pipeline
Amigache Mar 4, 2026
5c6e80d
chore: restore Prettier as JSON formatter for now
pfeerick Mar 7, 2026
fa0b70f
Merge remote-tracking branch 'origin/radio-backup' into radio-backup
Amigache Mar 7, 2026
091e38f
fix: update error message for skipped models and adjust total files c…
Amigache Mar 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions i18next-parser.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,17 @@ module.exports = {
indentation: 2,
keepRemoved: false,

// Input files to parse
input: [
"src/**/*.{ts,tsx}",
"!src/**/*.spec.{ts,tsx}",
"!src/**/__tests__/**",
],

// see below for more details
lexers: {
tsx: ["JsxLexer"],
ts: ["JavascriptLexer"],
},

lineEnding: "auto",
Expand Down
84 changes: 84 additions & 0 deletions locales/be/backup.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
{
"{{count}} files downloaded_one": "{{count}} files downloaded",
"{{count}} files downloaded_few": "{{count}} files downloaded",
"{{count}} files downloaded_many": "{{count}} files downloaded",
"{{count}} files downloaded_other": "{{count}} files downloaded",
"{{count}} models restored_one": "{{count}} models restored",
"{{count}} models restored_few": "{{count}} models restored",
"{{count}} models restored_many": "{{count}} models restored",
"{{count}} models restored_other": "{{count}} models restored",
"Add more files": "Add more files",
"and labels file found": "and labels file found",
"Auto-rename all": "Auto-rename all",
"Auto-rename applied": "Auto-rename applied",
"Available slots": "Available slots",
"Backup created successfully": "Backup created successfully",
"Backup version (to restore)": "Backup version (to restore)",
"Cancel": "Cancel",
"Change": "Change",
"Clear all": "Clear all",
"Click here to select files, or drag them here to upload.": "Click here to select files, or drag them here to upload.",
"Close": "Close",
"Collision detection": "Collision detection",
"Compare model versions": "Compare model versions",
"Could not use backup file": "Не атрымалася выкарыстаць файл рэзервовай копіі",
"Create backup": "Create backup",
"Creating backup...": "Creating backup...",
"Current version (on SD card)": "Current version (on SD card)",
"Done": "Done",
"Error": "Error",
"Error creating backup": "Error creating backup",
"Error creating temporary backup": "Error creating temporary backup",
"Error preparing restore": "Error preparing restore",
"Error processing file": "Error processing file",
"Error restoring models": "Error restoring models",
"Export format": "Export format",
"File must be smaller than 100MB": "File must be smaller than 100MB",
"Include labels.yml file": "Include labels.yml file",
"Individual .yml files": "Individual .yml files",
"Labels file found, no models": "Labels file found, no models",
"Lines highlighted in red differ between versions": "Lines highlighted in red differ between versions",
"Model already exists in the list": "Model already exists in the list",
"Model name conflicts detected": "Model name conflicts detected",
"Model preview": "Model preview",
"models": "models",
"models available": "models available",
"Models restored successfully": "Models restored successfully",
"Models to restore": "Models to restore",
"more": "more",
"New file name (without .yml)": "New file name (without .yml)",
"No models found": "No models found",
"Not enough available slots for all models": "Not enough available slots for all models",
"Overwrite all": "Overwrite all",
"Please rename or overwrite all conflicting models": "Please rename or overwrite all conflicting models",
"Please select a .etx, .zip or .yml file": "Please select a .etx, .zip or .yml file",
"Please select at least one model": "Please select at least one model",
"Please select SD Card first": "Please select SD Card first",
"Preview": "Preview",
"Ready to restore": "Ready to restore",
"Remove": "Выдаліць",
"Rename model": "Rename model",
"Restore backup": "Restore backup",
"Restore models": "Restore models",
"Restore with renames": "Restore with renames",
"Restoring models...": "Restoring models...",
"SD Card": "SD Card",
"SD Card selected successfully": "SD Card selected successfully",
"Select all": "Select all",
"Select models to backup": "Select models to backup",
"Select SD Card": "Select SD Card",
"Select your SD Card to create a backup": "Select your SD Card to create a backup",
"Select your SD Card to restore models": "Select your SD Card to restore models",
"Selected models": "Selected models",
"Single .etx file (EdgeTX backup)": "Single .etx file (EdgeTX backup)",
"Single .zip file": "Single .zip file",
"Supports .etx, .zip (full backup) or .yml (individual model) files": "Supports .etx, .zip (full backup) or .yml (individual model) files",
"The following models already exist on your SD card. Choose how to handle each conflict:": "The following models already exist on your SD card. Choose how to handle each conflict:",
"The following models were skipped because they already exist": "The following models were skipped because they already exist",
"This feature is not supported by your browser": "This feature is not supported by your browser",
"Verifying...": "Пацвярджэнне...",
"View differences": "View differences",
"When enabled, you'll be asked how to handle models that already exist on your SD card": "When enabled, you'll be asked how to handle models that already exist on your SD card",
"will be overwritten if you choose \"Overwrite all\"": "will be overwritten if you choose \"Overwrite all\"",
"You can add more individual .yml files or load a full .etx/.zip backup": "You can add more individual .yml files or load a full .etx/.zip backup"
}
1 change: 1 addition & 0 deletions locales/be/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"Dev tools": "Інструменты распрацоўкі",
"Donate and support EdgeTX development <2><0></0></2>": "Ахвяруйце і падтрымайце распрацоўку EdgeTX <2><0></0></2>",
"Expert mode": "Экспертны рэжым",
"Radio backup": "Рэзервовая копія радыё",
"Radio firmware": "Прашыўка радыё",
"SD Card content": "Змесціва SD-карты",
"settings": "налады"
Expand Down
2 changes: 2 additions & 0 deletions locales/be/flashing.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,10 @@
"Firmware version": "Версія прашыўкі",
"Flag": "Сцяг",
"Flags": "Сцягі",
"Flash": "Прашыўка",
"Flash bootloader": "Flash bootloader",
"Flash firmware": "Flash firmware",
"Flash this radio via Bootloader and UF2": "Flash this radio via Bootloader and UF2",
"Flash via USB": "Прошивка праз USB",
"Flashing bootloader": "Flashing bootloader",
"Flashing done": "Перапрашыўка завершана",
Expand Down
84 changes: 84 additions & 0 deletions locales/cs/backup.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
{
"{{count}} files downloaded_one": "{{count}} files downloaded",
"{{count}} files downloaded_few": "{{count}} files downloaded",
"{{count}} files downloaded_many": "{{count}} files downloaded",
"{{count}} files downloaded_other": "{{count}} files downloaded",
"{{count}} models restored_one": "{{count}} models restored",
"{{count}} models restored_few": "{{count}} models restored",
"{{count}} models restored_many": "{{count}} models restored",
"{{count}} models restored_other": "{{count}} models restored",
"Add more files": "Add more files",
"and labels file found": "and labels file found",
"Auto-rename all": "Auto-rename all",
"Auto-rename applied": "Auto-rename applied",
"Available slots": "Available slots",
"Backup created successfully": "Backup created successfully",
"Backup version (to restore)": "Backup version (to restore)",
"Cancel": "Cancel",
"Change": "Change",
"Clear all": "Clear all",
"Click here to select files, or drag them here to upload.": "Click here to select files, or drag them here to upload.",
"Close": "Close",
"Collision detection": "Collision detection",
"Compare model versions": "Compare model versions",
"Could not use backup file": "Nepodařilo se použít soubor zálohy",
"Create backup": "Create backup",
"Creating backup...": "Creating backup...",
"Current version (on SD card)": "Current version (on SD card)",
"Done": "Done",
"Error": "Error",
"Error creating backup": "Error creating backup",
"Error creating temporary backup": "Error creating temporary backup",
"Error preparing restore": "Error preparing restore",
"Error processing file": "Error processing file",
"Error restoring models": "Error restoring models",
"Export format": "Export format",
"File must be smaller than 100MB": "File must be smaller than 100MB",
"Include labels.yml file": "Include labels.yml file",
"Individual .yml files": "Individual .yml files",
"Labels file found, no models": "Labels file found, no models",
"Lines highlighted in red differ between versions": "Lines highlighted in red differ between versions",
"Model already exists in the list": "Model already exists in the list",
"Model name conflicts detected": "Model name conflicts detected",
"Model preview": "Model preview",
"models": "models",
"models available": "models available",
"Models restored successfully": "Models restored successfully",
"Models to restore": "Models to restore",
"more": "more",
"New file name (without .yml)": "New file name (without .yml)",
"No models found": "No models found",
"Not enough available slots for all models": "Not enough available slots for all models",
"Overwrite all": "Overwrite all",
"Please rename or overwrite all conflicting models": "Please rename or overwrite all conflicting models",
"Please select a .etx, .zip or .yml file": "Please select a .etx, .zip or .yml file",
"Please select at least one model": "Please select at least one model",
"Please select SD Card first": "Please select SD Card first",
"Preview": "Preview",
"Ready to restore": "Ready to restore",
"Remove": "Odstranit",
"Rename model": "Rename model",
"Restore backup": "Restore backup",
"Restore models": "Restore models",
"Restore with renames": "Restore with renames",
"Restoring models...": "Restoring models...",
"SD Card": "SD Card",
"SD Card selected successfully": "SD Card selected successfully",
"Select all": "Select all",
"Select models to backup": "Select models to backup",
"Select SD Card": "Select SD Card",
"Select your SD Card to create a backup": "Select your SD Card to create a backup",
"Select your SD Card to restore models": "Select your SD Card to restore models",
"Selected models": "Selected models",
"Single .etx file (EdgeTX backup)": "Single .etx file (EdgeTX backup)",
"Single .zip file": "Single .zip file",
"Supports .etx, .zip (full backup) or .yml (individual model) files": "Supports .etx, .zip (full backup) or .yml (individual model) files",
"The following models already exist on your SD card. Choose how to handle each conflict:": "The following models already exist on your SD card. Choose how to handle each conflict:",
"The following models were skipped because they already exist": "The following models were skipped because they already exist",
"This feature is not supported by your browser": "This feature is not supported by your browser",
"Verifying...": "Ověřuji...",
"View differences": "View differences",
"When enabled, you'll be asked how to handle models that already exist on your SD card": "When enabled, you'll be asked how to handle models that already exist on your SD card",
"will be overwritten if you choose \"Overwrite all\"": "will be overwritten if you choose \"Overwrite all\"",
"You can add more individual .yml files or load a full .etx/.zip backup": "You can add more individual .yml files or load a full .etx/.zip backup"
}
1 change: 1 addition & 0 deletions locales/cs/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"Dev tools": "Vývojářské nástroje",
"Donate and support EdgeTX development <2><0></0></2>": "Darovat a podpořit tak EdgeTX vývoj <2><0></0></2>",
"Expert mode": "Expert mód",
"Radio backup": "Záloha rádia",
"Radio firmware": "Firmware rádia",
"SD Card content": "SD karta",
"settings": "Nastavení"
Expand Down
2 changes: 2 additions & 0 deletions locales/cs/flashing.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,10 @@
"Firmware version": "Verze firmwaru",
"Flag": "Flag",
"Flags": "Flags",
"Flash": "Zapsat",
"Flash bootloader": "Flash bootloader",
"Flash firmware": "Flash firmware",
"Flash this radio via Bootloader and UF2": "Flash this radio via Bootloader and UF2",
"Flash via USB": "Zapsat přes USB",
"Flashing bootloader": "Flashing bootloader",
"Flashing done": "Zapisování dokončeno",
Expand Down
80 changes: 80 additions & 0 deletions locales/da/backup.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
{
"{{count}} files downloaded_one": "{{count}} files downloaded",
"{{count}} files downloaded_other": "{{count}} files downloaded",
"{{count}} models restored_one": "{{count}} models restored",
"{{count}} models restored_other": "{{count}} models restored",
"Add more files": "Add more files",
"and labels file found": "and labels file found",
"Auto-rename all": "Auto-rename all",
"Auto-rename applied": "Auto-rename applied",
"Available slots": "Available slots",
"Backup created successfully": "Backup created successfully",
"Backup version (to restore)": "Backup version (to restore)",
"Cancel": "Cancel",
"Change": "Change",
"Clear all": "Clear all",
"Click here to select files, or drag them here to upload.": "Click here to select files, or drag them here to upload.",
"Close": "Close",
"Collision detection": "Collision detection",
"Compare model versions": "Compare model versions",
"Could not use backup file": "Kunne ikke bruge backup-fil",
"Create backup": "Create backup",
"Creating backup...": "Creating backup...",
"Current version (on SD card)": "Current version (on SD card)",
"Done": "Done",
"Error": "Error",
"Error creating backup": "Error creating backup",
"Error creating temporary backup": "Error creating temporary backup",
"Error preparing restore": "Error preparing restore",
"Error processing file": "Error processing file",
"Error restoring models": "Error restoring models",
"Export format": "Export format",
"File must be smaller than 100MB": "File must be smaller than 100MB",
"Include labels.yml file": "Include labels.yml file",
"Individual .yml files": "Individual .yml files",
"Labels file found, no models": "Labels file found, no models",
"Lines highlighted in red differ between versions": "Lines highlighted in red differ between versions",
"Model already exists in the list": "Model already exists in the list",
"Model name conflicts detected": "Model name conflicts detected",
"Model preview": "Model preview",
"models": "models",
"models available": "models available",
"Models restored successfully": "Models restored successfully",
"Models to restore": "Models to restore",
"more": "more",
"New file name (without .yml)": "New file name (without .yml)",
"No models found": "No models found",
"Not enough available slots for all models": "Not enough available slots for all models",
"Overwrite all": "Overwrite all",
"Please rename or overwrite all conflicting models": "Please rename or overwrite all conflicting models",
"Please select a .etx, .zip or .yml file": "Please select a .etx, .zip or .yml file",
"Please select at least one model": "Please select at least one model",
"Please select SD Card first": "Please select SD Card first",
"Preview": "Preview",
"Ready to restore": "Ready to restore",
"Remove": "Fjern",
"Rename model": "Rename model",
"Restore backup": "Restore backup",
"Restore models": "Restore models",
"Restore with renames": "Restore with renames",
"Restoring models...": "Restoring models...",
"SD Card": "SD Card",
"SD Card selected successfully": "SD Card selected successfully",
"Select all": "Select all",
"Select models to backup": "Select models to backup",
"Select SD Card": "Select SD Card",
"Select your SD Card to create a backup": "Select your SD Card to create a backup",
"Select your SD Card to restore models": "Select your SD Card to restore models",
"Selected models": "Selected models",
"Single .etx file (EdgeTX backup)": "Single .etx file (EdgeTX backup)",
"Single .zip file": "Single .zip file",
"Supports .etx, .zip (full backup) or .yml (individual model) files": "Supports .etx, .zip (full backup) or .yml (individual model) files",
"The following models already exist on your SD card. Choose how to handle each conflict:": "The following models already exist on your SD card. Choose how to handle each conflict:",
"The following models were skipped because they already exist": "The following models were skipped because they already exist",
"This feature is not supported by your browser": "This feature is not supported by your browser",
"Verifying...": "Bekræfter...",
"View differences": "View differences",
"When enabled, you'll be asked how to handle models that already exist on your SD card": "When enabled, you'll be asked how to handle models that already exist on your SD card",
"will be overwritten if you choose \"Overwrite all\"": "will be overwritten if you choose \"Overwrite all\"",
"You can add more individual .yml files or load a full .etx/.zip backup": "You can add more individual .yml files or load a full .etx/.zip backup"
}
1 change: 1 addition & 0 deletions locales/da/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"Dev tools": "Udviklings værktøj",
"Donate and support EdgeTX development <2><0></0></2>": "Donation og støtte til EdgeTx udvikling <2><0></0></2>",
"Expert mode": "Ekspert tilstand",
"Radio backup": "Radio backup",
"Radio firmware": "Radio firmware",
"SD Card content": "SD indhold",
"settings": "indstillinger"
Expand Down
2 changes: 2 additions & 0 deletions locales/da/flashing.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,10 @@
"Firmware version": "Firmware version",
"Flag": "valg",
"Flags": "Tilvalg",
"Flash": "Brænding",
"Flash bootloader": "Flash bootloader",
"Flash firmware": "Flash firmware",
"Flash this radio via Bootloader and UF2": "Flash this radio via Bootloader and UF2",
"Flash via USB": "Brænding via USB",
"Flashing bootloader": "Flashing bootloader",
"Flashing done": "Brænding klar",
Expand Down
Loading
Loading