@@ -1192,7 +1192,11 @@
|
|||||||
"backup": {
|
"backup": {
|
||||||
"action": {
|
"action": {
|
||||||
"create": {
|
"create": {
|
||||||
|
"error": {
|
||||||
|
"failure": "Could not create backup"
|
||||||
|
},
|
||||||
"label": {
|
"label": {
|
||||||
|
"in_progress": "Creating backup…",
|
||||||
"description": "Back up library as a Tachiyomi backup",
|
"description": "Back up library as a Tachiyomi backup",
|
||||||
"title": "Create backup"
|
"title": "Create backup"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) => {
|
const validateBackup = async (file: File) => {
|
||||||
try {
|
try {
|
||||||
const {
|
const {
|
||||||
@@ -222,7 +252,7 @@ export function Backup() {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<List sx={{ padding: 0 }}>
|
<List sx={{ padding: 0 }}>
|
||||||
<ListItemButton component="a" href={requestManager.getExportBackupUrl()} download>
|
<ListItemButton onClick={createBackup}>
|
||||||
<ListItemText
|
<ListItemText
|
||||||
primary={t('settings.backup.action.create.label.title')}
|
primary={t('settings.backup.action.create.label.title')}
|
||||||
secondary={t('settings.backup.action.create.label.description')}
|
secondary={t('settings.backup.action.create.label.description')}
|
||||||
|
|||||||
@@ -216,6 +216,9 @@ import {
|
|||||||
UserLoginMutationVariables,
|
UserLoginMutationVariables,
|
||||||
UserRefreshMutation,
|
UserRefreshMutation,
|
||||||
UserRefreshMutationVariables,
|
UserRefreshMutationVariables,
|
||||||
|
CreateBackupInput,
|
||||||
|
CreateBackupMutation,
|
||||||
|
CreateBackupMutationVariables,
|
||||||
} from '@/lib/graphql/generated/graphql.ts';
|
} from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { GET_GLOBAL_METADATAS } from '@/lib/graphql/queries/GlobalMetadataQuery.ts';
|
import { GET_GLOBAL_METADATAS } from '@/lib/graphql/queries/GlobalMetadataQuery.ts';
|
||||||
import { DELETE_GLOBAL_METADATA, SET_GLOBAL_METADATA } from '@/lib/graphql/mutations/GlobalMetadataMutation.ts';
|
import { DELETE_GLOBAL_METADATA, SET_GLOBAL_METADATA } from '@/lib/graphql/mutations/GlobalMetadataMutation.ts';
|
||||||
@@ -298,7 +301,7 @@ import {
|
|||||||
import { STOP_UPDATER, UPDATE_LIBRARY } from '@/lib/graphql/mutations/UpdaterMutation.ts';
|
import { STOP_UPDATER, UPDATE_LIBRARY } from '@/lib/graphql/mutations/UpdaterMutation.ts';
|
||||||
import { GET_LAST_UPDATE_TIMESTAMP, GET_UPDATE_STATUS } from '@/lib/graphql/queries/UpdaterQuery.ts';
|
import { GET_LAST_UPDATE_TIMESTAMP, GET_UPDATE_STATUS } from '@/lib/graphql/queries/UpdaterQuery.ts';
|
||||||
import { CustomCache } from '@/lib/storage/CustomCache.ts';
|
import { CustomCache } from '@/lib/storage/CustomCache.ts';
|
||||||
import { RESTORE_BACKUP } from '@/lib/graphql/mutations/BackupMutation.ts';
|
import { CREATE_BACKUP, RESTORE_BACKUP } from '@/lib/graphql/mutations/BackupMutation.ts';
|
||||||
import { GET_RESTORE_STATUS, VALIDATE_BACKUP } from '@/lib/graphql/queries/BackupQuery.ts';
|
import { GET_RESTORE_STATUS, VALIDATE_BACKUP } from '@/lib/graphql/queries/BackupQuery.ts';
|
||||||
import { DOWNLOAD_STATUS_SUBSCRIPTION } from '@/lib/graphql/subscriptions/DownloaderSubscription.ts';
|
import { DOWNLOAD_STATUS_SUBSCRIPTION } from '@/lib/graphql/subscriptions/DownloaderSubscription.ts';
|
||||||
import { UPDATER_SUBSCRIPTION } from '@/lib/graphql/subscriptions/UpdaterSubscription.ts';
|
import { UPDATER_SUBSCRIPTION } from '@/lib/graphql/subscriptions/UpdaterSubscription.ts';
|
||||||
@@ -2702,6 +2705,20 @@ export class RequestManager {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public createBackupFile(
|
||||||
|
input: CreateBackupInput,
|
||||||
|
options?: MutationOptions<CreateBackupMutation, CreateBackupMutationVariables>,
|
||||||
|
): AbortableApolloMutationResponse<CreateBackupMutation> {
|
||||||
|
return this.doRequest<CreateBackupMutation, CreateBackupMutationVariables>(
|
||||||
|
GQLMethod.MUTATION,
|
||||||
|
CREATE_BACKUP,
|
||||||
|
{ input },
|
||||||
|
{
|
||||||
|
...options,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public restoreBackupFile(
|
public restoreBackupFile(
|
||||||
file: File,
|
file: File,
|
||||||
options?: MutationOptions<RestoreBackupMutation, RestoreBackupMutationVariables>,
|
options?: MutationOptions<RestoreBackupMutation, RestoreBackupMutationVariables>,
|
||||||
|
|||||||
Reference in New Issue
Block a user