diff --git a/public/locales/en.json b/public/locales/en.json index 179a6698..ec3f7ee1 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -1192,7 +1192,11 @@ "backup": { "action": { "create": { + "error": { + "failure": "Could not create backup" + }, "label": { + "in_progress": "Creating backup…", "description": "Back up library as a Tachiyomi backup", "title": "Create backup" } diff --git a/src/features/backup/screens/Backup.tsx b/src/features/backup/screens/Backup.tsx index 1c51ce5f..69f1a8c8 100644 --- a/src/features/backup/screens/Backup.tsx +++ b/src/features/backup/screens/Backup.tsx @@ -129,6 +129,36 @@ export function Backup() { } }; + const createBackup = async () => { + makeToast(t('settings.backup.action.create.label.in_progress'), 'info'); + + const backupFileResponse = await requestManager.createBackupFile({ + includeCategories: true, + includeChapters: true, + includeHistory: true, + includeClientData: true, + includeTracking: true, + includeServerSettings: true, + }).response; + + const backupFileUrl = backupFileResponse.data?.createBackup.url; + if (!backupFileUrl) { + makeToast( + t('settings.backup.action.create.error.failure'), + 'error', + getErrorMessage(backupFileResponse.errors), + ); + return; + } + + const link = document.createElement('a'); + link.href = backupFileUrl; + link.download = ''; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + }; + const validateBackup = async (file: File) => { try { const { @@ -222,7 +252,7 @@ export function Backup() { return ( <> - + , + ): AbortableApolloMutationResponse { + return this.doRequest( + GQLMethod.MUTATION, + CREATE_BACKUP, + { input }, + { + ...options, + }, + ); + } + public restoreBackupFile( file: File, options?: MutationOptions,