Skip to content

Commit c08484e

Browse files
committed
feat: improve instance backup restore workflow
1 parent 9dd49f5 commit c08484e

14 files changed

Lines changed: 7803 additions & 75 deletions

File tree

frontend/src/assets/locales/en_US.json

Lines changed: 138 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -762,6 +762,123 @@
762762
"env_vars_placeholder": "Environment Variables (KEY=VALUE), one per line",
763763
"env_vars_hint": "Set launch environment variables.",
764764
"delete_hint": "Permanently deletes this instance from your device, including worlds, configs, and installed content. This action cannot be undone.",
765+
"danger_title": "Danger Zone",
766+
"danger_hint": "These actions affect the instance registration or local files. Double-check before continuing.",
767+
"backup": {
768+
"title": "Instance Backup",
769+
"hint": "Create a backup for this instance before changing settings, installing mods, or trying something new",
770+
"section_body": "Choose the game content and mods you want to keep together; the launcher app itself is not included",
771+
"button": "Back up instance",
772+
"dialog_title": "Choose what to back up",
773+
"dialog_body": "Select what you want to keep in this backup",
774+
"path_label": "Location",
775+
"size_label": "Approx. size",
776+
"shared_tag": "Shared content",
777+
"missing_tag": "Not found",
778+
"empty_tag": "Currently empty",
779+
"shared_warning": "This instance shares the same game data as the system default install, so including game data will back up that shared content too",
780+
"no_scope_selected": "Please choose at least one item to back up",
781+
"confirm": "Start backup",
782+
"progress_title": "Backing up instance",
783+
"progress_body": "Packaging the selected scopes. Please wait...",
784+
"success_title": "Instance backup complete",
785+
"success_body": "Your backup file is ready",
786+
"archive_label": "Backup file",
787+
"location_label": "Saved in",
788+
"open_dir": "Open folder",
789+
"lip_summary": "{{count}} lip-managed packages detected: {{summary}}",
790+
"mode": {
791+
"safe": {
792+
"label": "Safe mode"
793+
},
794+
"full": {
795+
"label": "Full mode",
796+
"warning": "A full backup includes content outside the Users whitelist and may contain account caches, privacy-sensitive data, or other files that should not be shared."
797+
}
798+
},
799+
"restore": {
800+
"section_body": "Restore content from an existing instance backup archive. If conflicts with the current instance are found, you can choose item by item whether to keep the backup version or the current version before restoring.",
801+
"button": "Restore backup",
802+
"file_picker_title": "Choose an instance backup archive",
803+
"dialog_title": "Confirm instance backup restore",
804+
"dialog_body": "Choose what to restore from this backup. If conflicts are found, they will be listed before restoring so you can choose each resolution.",
805+
"confirm": "Start restore",
806+
"scope_section_title": "Restore scopes",
807+
"created_at": "Created at",
808+
"lip_summary": "Detected {{count}} lip-managed packages. Restore will try to reinstall them automatically.",
809+
"conflict_loading": "Scanning restore conflicts. Please wait...",
810+
"conflict_summary": "{{count}} conflicts were found with the current instance. Choose whether to keep the backup version or the current version for each item.",
811+
"conflict_empty": "No conflicts were found for the selected scopes. You can restore directly.",
812+
"conflict_choice_placeholder": "Choose how to resolve this conflict",
813+
"conflict_choice_backup": "Use backup version",
814+
"conflict_choice_current": "Keep current version",
815+
"conflict_choice_pending": "Choice required",
816+
"conflict_group_count": "{{count}} conflicts",
817+
"conflict_group_unresolved": "{{count}} pending choices",
818+
"conflict_group_resolved": "Choices completed",
819+
"conflict_group_apply_backup": "Use backup for group",
820+
"conflict_group_apply_current": "Keep current for group",
821+
"conflict_unresolved": "Please choose how to resolve every conflict before restoring.",
822+
"conflict_details_toggle": "View paths and detailed differences",
823+
"conflict_item_fallback": "Unnamed content",
824+
"pack_uuid_hint": "Pack conflicts are identified by the manifest UUID. If the UUID matches, it is treated as the same pack even when the folder names differ.",
825+
"identity_key_label": "Conflict identity",
826+
"backup_side_label": "Backup version",
827+
"current_side_label": "Current version",
828+
"backup_path_label": "Backup path",
829+
"current_path_label": "Current path",
830+
"conflict_category": {
831+
"mods": "Mods",
832+
"skin_packs": "Skin packs",
833+
"behavior_packs": "Behavior packs",
834+
"resource_packs": "Resource packs",
835+
"worlds": "Worlds",
836+
"dev_behavior_packs": "Development behavior packs",
837+
"dev_resource_packs": "Development resource packs",
838+
"templates": "World templates",
839+
"files": "Other files",
840+
"other": "Other content"
841+
},
842+
"identity_kind": {
843+
"pack_uuid": "Pack",
844+
"world_folder": "World folder",
845+
"mod_folder": "Mod folder",
846+
"file_path": "File path"
847+
},
848+
"conflict_type": {
849+
"file": "File",
850+
"dir": "Directory"
851+
},
852+
"diff_field": {
853+
"folder": "Folder",
854+
"uuid": "UUID",
855+
"name": "Name",
856+
"version": "Version",
857+
"min_engine_version": "Min engine version",
858+
"level_name": "World name",
859+
"entry": "Entry",
860+
"type": "Type"
861+
},
862+
"progress_title": "Restoring instance backup",
863+
"progress_body": "Applying backup contents. Please wait...",
864+
"progress_preparing": "Preparing restore content...",
865+
"progress_extracting": "Extracting backup contents...",
866+
"progress_scope": "Restoring {{scope}}...",
867+
"progress_finalizing": "Finalizing restore results...",
868+
"progress_step": "Step {{current}} / {{total}}",
869+
"success_title": "Instance restore complete",
870+
"partial_title": "Instance restore partially complete",
871+
"failed_title": "Instance restore failed",
872+
"success_body": "The selected content has been restored.",
873+
"partial_body": "Some content was restored, but a few items still need manual attention.",
874+
"failed_body": "This restore did not complete. Check the results below.",
875+
"status": {
876+
"success": "Success",
877+
"partial": "Partial",
878+
"failed": "Failed"
879+
}
880+
}
881+
},
765882
"unregister_button": "Unregister",
766883
"unregister_hint": "Unregister this instance from the system so it no longer appears in the system app list. This will not delete any files.",
767884
"unregister_progress": {
@@ -864,7 +981,27 @@
864981
"ERR_LIP_PACKAGE_REQUIRED_BY_DEPENDENTS": "This package is required by other installed mods and cannot be uninstalled now",
865982
"ERR_LIP_PACKAGE_DEMOTED_TO_DEPENDENCY": "This package is still required by other installed mods, so it cannot be fully uninstalled. It has been automatically switched to dependency install mode.",
866983
"ERR_LL_MANAGED_IN_VERSION_SETTINGS": "LeviLamina can only be managed in Version Settings",
867-
"ERR_LIP_NOT_INSTALLED": "lip is not installed. Go to Settings > Components to install or update it manually."
984+
"ERR_LIP_NOT_INSTALLED": "lip is not installed. Go to Settings > Components to install or update it manually.",
985+
"ERR_INSTANCE_BACKUP_INSTANCE_NOT_FOUND": "The instance to back up was not found",
986+
"ERR_INSTANCE_BACKUP_NO_SCOPE": "Please select at least one backup scope",
987+
"ERR_INSTANCE_BACKUP_INVALID_SCOPE": "The request includes an invalid backup scope",
988+
"ERR_INSTANCE_BACKUP_INVALID_SCOPE_MODE": "The selected backup mode is invalid",
989+
"ERR_INSTANCE_BACKUP_GAME_DATA_NOT_FOUND": "The Minecraft Bedrock data directory was not found",
990+
"ERR_INSTANCE_BACKUP_CREATE_DIR": "Failed to create the instance backup directory",
991+
"ERR_INSTANCE_BACKUP_CREATE_ARCHIVE": "Failed to create the instance backup archive",
992+
"ERR_INSTANCE_BACKUP_READ_SOURCE": "Failed to read the backup source directory",
993+
"ERR_INSTANCE_BACKUP_WRITE_ARCHIVE": "Failed to write the instance backup archive",
994+
"ERR_INSTANCE_BACKUP_ARCHIVE_OPEN": "Failed to open the instance backup archive",
995+
"ERR_INSTANCE_BACKUP_INVALID_ARCHIVE": "The instance backup archive format is invalid",
996+
"ERR_INSTANCE_BACKUP_MODS_STATE_UNAVAILABLE": "Mods/LIP state could not be verified. Refresh the instance state and try backing up again.",
997+
"ERR_INSTANCE_BACKUP_RESTORE_EXTRACT_ARCHIVE": "Failed to extract the instance backup archive",
998+
"ERR_INSTANCE_BACKUP_RESTORE_WRITE_TARGET": "Failed to restore backup contents into the target instance",
999+
"ERR_INSTANCE_BACKUP_RESTORE_CONFLICT_UNRESOLVED": "Some restore conflicts are still unresolved. Finish choosing a resolution for each conflict first.",
1000+
"ERR_INSTANCE_BACKUP_RESTORE_INVALID_CONFLICT_RESOLUTION": "The selected restore conflict resolution is invalid. Please review your choices.",
1001+
"ERR_INSTANCE_BACKUP_RESTORE_FULL_REQUIRES_EMPTY_TARGET": "Full Minecraft Bedrock backups can only be restored into an empty target directory",
1002+
"ERR_INSTANCE_BACKUP_RESTORE_LIP_INSTALL_FAILED": "Some lip-managed packages failed to install",
1003+
"ERR_INSTANCE_BACKUP_RESTORE_LIP_MISSING": "Some lip-managed packages were not restored",
1004+
"ERR_INSTANCE_BACKUP_RESTORE_LIP_VERSION_MISMATCH": "Some lip-managed package versions do not match the backup"
8681005
},
8691006
"filemanager": {
8701007
"sort": {

0 commit comments

Comments
 (0)