Feature/update backup restore to server changes (#438)

* [Codegen] Update back query/mutation

* Update backup restore

* [VersionMapping] Require server version "r1410" for preview
This commit is contained in:
schroda
2023-11-02 13:01:01 +01:00
committed by GitHub
parent cc59f88a1d
commit 1acda66b16
7 changed files with 84 additions and 42 deletions

View File

@@ -454,8 +454,9 @@ export type PageInfoFieldPolicy = {
hasPreviousPage?: FieldPolicy<any> | FieldReadFunction<any>, hasPreviousPage?: FieldPolicy<any> | FieldReadFunction<any>,
startCursor?: FieldPolicy<any> | FieldReadFunction<any> startCursor?: FieldPolicy<any> | FieldReadFunction<any>
}; };
export type PartialSettingsTypeKeySpecifier = ('autoDownloadNewChapters' | 'backupInterval' | 'backupPath' | 'backupTTL' | 'backupTime' | 'basicAuthEnabled' | 'basicAuthPassword' | 'basicAuthUsername' | 'debugLogsEnabled' | 'downloadAsCbz' | 'downloadsPath' | 'electronPath' | 'excludeCompleted' | 'excludeNotStarted' | 'excludeUnreadChapters' | 'globalUpdateInterval' | 'initialOpenInBrowserEnabled' | 'ip' | 'localSourcePath' | 'maxSourcesInParallel' | 'port' | 'socksProxyEnabled' | 'socksProxyHost' | 'socksProxyPort' | 'systemTrayEnabled' | 'webUIChannel' | 'webUIFlavor' | 'webUIInterface' | 'webUIUpdateCheckInterval' | PartialSettingsTypeKeySpecifier)[]; export type PartialSettingsTypeKeySpecifier = ('autoDownloadAheadLimit' | 'autoDownloadNewChapters' | 'backupInterval' | 'backupPath' | 'backupTTL' | 'backupTime' | 'basicAuthEnabled' | 'basicAuthPassword' | 'basicAuthUsername' | 'debugLogsEnabled' | 'downloadAsCbz' | 'downloadsPath' | 'electronPath' | 'excludeCompleted' | 'excludeEntryWithUnreadChapters' | 'excludeNotStarted' | 'excludeUnreadChapters' | 'globalUpdateInterval' | 'gqlDebugLogsEnabled' | 'initialOpenInBrowserEnabled' | 'ip' | 'localSourcePath' | 'maxSourcesInParallel' | 'port' | 'socksProxyEnabled' | 'socksProxyHost' | 'socksProxyPort' | 'systemTrayEnabled' | 'updateMangas' | 'webUIChannel' | 'webUIFlavor' | 'webUIInterface' | 'webUIUpdateCheckInterval' | PartialSettingsTypeKeySpecifier)[];
export type PartialSettingsTypeFieldPolicy = { export type PartialSettingsTypeFieldPolicy = {
autoDownloadAheadLimit?: FieldPolicy<any> | FieldReadFunction<any>,
autoDownloadNewChapters?: FieldPolicy<any> | FieldReadFunction<any>, autoDownloadNewChapters?: FieldPolicy<any> | FieldReadFunction<any>,
backupInterval?: FieldPolicy<any> | FieldReadFunction<any>, backupInterval?: FieldPolicy<any> | FieldReadFunction<any>,
backupPath?: FieldPolicy<any> | FieldReadFunction<any>, backupPath?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -469,9 +470,11 @@ export type PartialSettingsTypeFieldPolicy = {
downloadsPath?: FieldPolicy<any> | FieldReadFunction<any>, downloadsPath?: FieldPolicy<any> | FieldReadFunction<any>,
electronPath?: FieldPolicy<any> | FieldReadFunction<any>, electronPath?: FieldPolicy<any> | FieldReadFunction<any>,
excludeCompleted?: FieldPolicy<any> | FieldReadFunction<any>, excludeCompleted?: FieldPolicy<any> | FieldReadFunction<any>,
excludeEntryWithUnreadChapters?: FieldPolicy<any> | FieldReadFunction<any>,
excludeNotStarted?: FieldPolicy<any> | FieldReadFunction<any>, excludeNotStarted?: FieldPolicy<any> | FieldReadFunction<any>,
excludeUnreadChapters?: FieldPolicy<any> | FieldReadFunction<any>, excludeUnreadChapters?: FieldPolicy<any> | FieldReadFunction<any>,
globalUpdateInterval?: FieldPolicy<any> | FieldReadFunction<any>, globalUpdateInterval?: FieldPolicy<any> | FieldReadFunction<any>,
gqlDebugLogsEnabled?: FieldPolicy<any> | FieldReadFunction<any>,
initialOpenInBrowserEnabled?: FieldPolicy<any> | FieldReadFunction<any>, initialOpenInBrowserEnabled?: FieldPolicy<any> | FieldReadFunction<any>,
ip?: FieldPolicy<any> | FieldReadFunction<any>, ip?: FieldPolicy<any> | FieldReadFunction<any>,
localSourcePath?: FieldPolicy<any> | FieldReadFunction<any>, localSourcePath?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -481,6 +484,7 @@ export type PartialSettingsTypeFieldPolicy = {
socksProxyHost?: FieldPolicy<any> | FieldReadFunction<any>, socksProxyHost?: FieldPolicy<any> | FieldReadFunction<any>,
socksProxyPort?: FieldPolicy<any> | FieldReadFunction<any>, socksProxyPort?: FieldPolicy<any> | FieldReadFunction<any>,
systemTrayEnabled?: FieldPolicy<any> | FieldReadFunction<any>, systemTrayEnabled?: FieldPolicy<any> | FieldReadFunction<any>,
updateMangas?: FieldPolicy<any> | FieldReadFunction<any>,
webUIChannel?: FieldPolicy<any> | FieldReadFunction<any>, webUIChannel?: FieldPolicy<any> | FieldReadFunction<any>,
webUIFlavor?: FieldPolicy<any> | FieldReadFunction<any>, webUIFlavor?: FieldPolicy<any> | FieldReadFunction<any>,
webUIInterface?: FieldPolicy<any> | FieldReadFunction<any>, webUIInterface?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -521,9 +525,10 @@ export type ResetSettingsPayloadFieldPolicy = {
clientMutationId?: FieldPolicy<any> | FieldReadFunction<any>, clientMutationId?: FieldPolicy<any> | FieldReadFunction<any>,
settings?: FieldPolicy<any> | FieldReadFunction<any> settings?: FieldPolicy<any> | FieldReadFunction<any>
}; };
export type RestoreBackupPayloadKeySpecifier = ('clientMutationId' | 'status' | RestoreBackupPayloadKeySpecifier)[]; export type RestoreBackupPayloadKeySpecifier = ('clientMutationId' | 'id' | 'status' | RestoreBackupPayloadKeySpecifier)[];
export type RestoreBackupPayloadFieldPolicy = { export type RestoreBackupPayloadFieldPolicy = {
clientMutationId?: FieldPolicy<any> | FieldReadFunction<any>, clientMutationId?: FieldPolicy<any> | FieldReadFunction<any>,
id?: FieldPolicy<any> | FieldReadFunction<any>,
status?: FieldPolicy<any> | FieldReadFunction<any> status?: FieldPolicy<any> | FieldReadFunction<any>
}; };
export type SelectFilterKeySpecifier = ('default' | 'name' | 'values' | SelectFilterKeySpecifier)[]; export type SelectFilterKeySpecifier = ('default' | 'name' | 'values' | SelectFilterKeySpecifier)[];
@@ -561,8 +566,9 @@ export type SetSettingsPayloadFieldPolicy = {
clientMutationId?: FieldPolicy<any> | FieldReadFunction<any>, clientMutationId?: FieldPolicy<any> | FieldReadFunction<any>,
settings?: FieldPolicy<any> | FieldReadFunction<any> settings?: FieldPolicy<any> | FieldReadFunction<any>
}; };
export type SettingsKeySpecifier = ('autoDownloadNewChapters' | 'backupInterval' | 'backupPath' | 'backupTTL' | 'backupTime' | 'basicAuthEnabled' | 'basicAuthPassword' | 'basicAuthUsername' | 'debugLogsEnabled' | 'downloadAsCbz' | 'downloadsPath' | 'electronPath' | 'excludeCompleted' | 'excludeNotStarted' | 'excludeUnreadChapters' | 'globalUpdateInterval' | 'initialOpenInBrowserEnabled' | 'ip' | 'localSourcePath' | 'maxSourcesInParallel' | 'port' | 'socksProxyEnabled' | 'socksProxyHost' | 'socksProxyPort' | 'systemTrayEnabled' | 'webUIChannel' | 'webUIFlavor' | 'webUIInterface' | 'webUIUpdateCheckInterval' | SettingsKeySpecifier)[]; export type SettingsKeySpecifier = ('autoDownloadAheadLimit' | 'autoDownloadNewChapters' | 'backupInterval' | 'backupPath' | 'backupTTL' | 'backupTime' | 'basicAuthEnabled' | 'basicAuthPassword' | 'basicAuthUsername' | 'debugLogsEnabled' | 'downloadAsCbz' | 'downloadsPath' | 'electronPath' | 'excludeCompleted' | 'excludeEntryWithUnreadChapters' | 'excludeNotStarted' | 'excludeUnreadChapters' | 'globalUpdateInterval' | 'gqlDebugLogsEnabled' | 'initialOpenInBrowserEnabled' | 'ip' | 'localSourcePath' | 'maxSourcesInParallel' | 'port' | 'socksProxyEnabled' | 'socksProxyHost' | 'socksProxyPort' | 'systemTrayEnabled' | 'updateMangas' | 'webUIChannel' | 'webUIFlavor' | 'webUIInterface' | 'webUIUpdateCheckInterval' | SettingsKeySpecifier)[];
export type SettingsFieldPolicy = { export type SettingsFieldPolicy = {
autoDownloadAheadLimit?: FieldPolicy<any> | FieldReadFunction<any>,
autoDownloadNewChapters?: FieldPolicy<any> | FieldReadFunction<any>, autoDownloadNewChapters?: FieldPolicy<any> | FieldReadFunction<any>,
backupInterval?: FieldPolicy<any> | FieldReadFunction<any>, backupInterval?: FieldPolicy<any> | FieldReadFunction<any>,
backupPath?: FieldPolicy<any> | FieldReadFunction<any>, backupPath?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -576,9 +582,11 @@ export type SettingsFieldPolicy = {
downloadsPath?: FieldPolicy<any> | FieldReadFunction<any>, downloadsPath?: FieldPolicy<any> | FieldReadFunction<any>,
electronPath?: FieldPolicy<any> | FieldReadFunction<any>, electronPath?: FieldPolicy<any> | FieldReadFunction<any>,
excludeCompleted?: FieldPolicy<any> | FieldReadFunction<any>, excludeCompleted?: FieldPolicy<any> | FieldReadFunction<any>,
excludeEntryWithUnreadChapters?: FieldPolicy<any> | FieldReadFunction<any>,
excludeNotStarted?: FieldPolicy<any> | FieldReadFunction<any>, excludeNotStarted?: FieldPolicy<any> | FieldReadFunction<any>,
excludeUnreadChapters?: FieldPolicy<any> | FieldReadFunction<any>, excludeUnreadChapters?: FieldPolicy<any> | FieldReadFunction<any>,
globalUpdateInterval?: FieldPolicy<any> | FieldReadFunction<any>, globalUpdateInterval?: FieldPolicy<any> | FieldReadFunction<any>,
gqlDebugLogsEnabled?: FieldPolicy<any> | FieldReadFunction<any>,
initialOpenInBrowserEnabled?: FieldPolicy<any> | FieldReadFunction<any>, initialOpenInBrowserEnabled?: FieldPolicy<any> | FieldReadFunction<any>,
ip?: FieldPolicy<any> | FieldReadFunction<any>, ip?: FieldPolicy<any> | FieldReadFunction<any>,
localSourcePath?: FieldPolicy<any> | FieldReadFunction<any>, localSourcePath?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -588,13 +596,15 @@ export type SettingsFieldPolicy = {
socksProxyHost?: FieldPolicy<any> | FieldReadFunction<any>, socksProxyHost?: FieldPolicy<any> | FieldReadFunction<any>,
socksProxyPort?: FieldPolicy<any> | FieldReadFunction<any>, socksProxyPort?: FieldPolicy<any> | FieldReadFunction<any>,
systemTrayEnabled?: FieldPolicy<any> | FieldReadFunction<any>, systemTrayEnabled?: FieldPolicy<any> | FieldReadFunction<any>,
updateMangas?: FieldPolicy<any> | FieldReadFunction<any>,
webUIChannel?: FieldPolicy<any> | FieldReadFunction<any>, webUIChannel?: FieldPolicy<any> | FieldReadFunction<any>,
webUIFlavor?: FieldPolicy<any> | FieldReadFunction<any>, webUIFlavor?: FieldPolicy<any> | FieldReadFunction<any>,
webUIInterface?: FieldPolicy<any> | FieldReadFunction<any>, webUIInterface?: FieldPolicy<any> | FieldReadFunction<any>,
webUIUpdateCheckInterval?: FieldPolicy<any> | FieldReadFunction<any> webUIUpdateCheckInterval?: FieldPolicy<any> | FieldReadFunction<any>
}; };
export type SettingsTypeKeySpecifier = ('autoDownloadNewChapters' | 'backupInterval' | 'backupPath' | 'backupTTL' | 'backupTime' | 'basicAuthEnabled' | 'basicAuthPassword' | 'basicAuthUsername' | 'debugLogsEnabled' | 'downloadAsCbz' | 'downloadsPath' | 'electronPath' | 'excludeCompleted' | 'excludeNotStarted' | 'excludeUnreadChapters' | 'globalUpdateInterval' | 'initialOpenInBrowserEnabled' | 'ip' | 'localSourcePath' | 'maxSourcesInParallel' | 'port' | 'socksProxyEnabled' | 'socksProxyHost' | 'socksProxyPort' | 'systemTrayEnabled' | 'webUIChannel' | 'webUIFlavor' | 'webUIInterface' | 'webUIUpdateCheckInterval' | SettingsTypeKeySpecifier)[]; export type SettingsTypeKeySpecifier = ('autoDownloadAheadLimit' | 'autoDownloadNewChapters' | 'backupInterval' | 'backupPath' | 'backupTTL' | 'backupTime' | 'basicAuthEnabled' | 'basicAuthPassword' | 'basicAuthUsername' | 'debugLogsEnabled' | 'downloadAsCbz' | 'downloadsPath' | 'electronPath' | 'excludeCompleted' | 'excludeEntryWithUnreadChapters' | 'excludeNotStarted' | 'excludeUnreadChapters' | 'globalUpdateInterval' | 'gqlDebugLogsEnabled' | 'initialOpenInBrowserEnabled' | 'ip' | 'localSourcePath' | 'maxSourcesInParallel' | 'port' | 'socksProxyEnabled' | 'socksProxyHost' | 'socksProxyPort' | 'systemTrayEnabled' | 'updateMangas' | 'webUIChannel' | 'webUIFlavor' | 'webUIInterface' | 'webUIUpdateCheckInterval' | SettingsTypeKeySpecifier)[];
export type SettingsTypeFieldPolicy = { export type SettingsTypeFieldPolicy = {
autoDownloadAheadLimit?: FieldPolicy<any> | FieldReadFunction<any>,
autoDownloadNewChapters?: FieldPolicy<any> | FieldReadFunction<any>, autoDownloadNewChapters?: FieldPolicy<any> | FieldReadFunction<any>,
backupInterval?: FieldPolicy<any> | FieldReadFunction<any>, backupInterval?: FieldPolicy<any> | FieldReadFunction<any>,
backupPath?: FieldPolicy<any> | FieldReadFunction<any>, backupPath?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -608,9 +618,11 @@ export type SettingsTypeFieldPolicy = {
downloadsPath?: FieldPolicy<any> | FieldReadFunction<any>, downloadsPath?: FieldPolicy<any> | FieldReadFunction<any>,
electronPath?: FieldPolicy<any> | FieldReadFunction<any>, electronPath?: FieldPolicy<any> | FieldReadFunction<any>,
excludeCompleted?: FieldPolicy<any> | FieldReadFunction<any>, excludeCompleted?: FieldPolicy<any> | FieldReadFunction<any>,
excludeEntryWithUnreadChapters?: FieldPolicy<any> | FieldReadFunction<any>,
excludeNotStarted?: FieldPolicy<any> | FieldReadFunction<any>, excludeNotStarted?: FieldPolicy<any> | FieldReadFunction<any>,
excludeUnreadChapters?: FieldPolicy<any> | FieldReadFunction<any>, excludeUnreadChapters?: FieldPolicy<any> | FieldReadFunction<any>,
globalUpdateInterval?: FieldPolicy<any> | FieldReadFunction<any>, globalUpdateInterval?: FieldPolicy<any> | FieldReadFunction<any>,
gqlDebugLogsEnabled?: FieldPolicy<any> | FieldReadFunction<any>,
initialOpenInBrowserEnabled?: FieldPolicy<any> | FieldReadFunction<any>, initialOpenInBrowserEnabled?: FieldPolicy<any> | FieldReadFunction<any>,
ip?: FieldPolicy<any> | FieldReadFunction<any>, ip?: FieldPolicy<any> | FieldReadFunction<any>,
localSourcePath?: FieldPolicy<any> | FieldReadFunction<any>, localSourcePath?: FieldPolicy<any> | FieldReadFunction<any>,
@@ -620,6 +632,7 @@ export type SettingsTypeFieldPolicy = {
socksProxyHost?: FieldPolicy<any> | FieldReadFunction<any>, socksProxyHost?: FieldPolicy<any> | FieldReadFunction<any>,
socksProxyPort?: FieldPolicy<any> | FieldReadFunction<any>, socksProxyPort?: FieldPolicy<any> | FieldReadFunction<any>,
systemTrayEnabled?: FieldPolicy<any> | FieldReadFunction<any>, systemTrayEnabled?: FieldPolicy<any> | FieldReadFunction<any>,
updateMangas?: FieldPolicy<any> | FieldReadFunction<any>,
webUIChannel?: FieldPolicy<any> | FieldReadFunction<any>, webUIChannel?: FieldPolicy<any> | FieldReadFunction<any>,
webUIFlavor?: FieldPolicy<any> | FieldReadFunction<any>, webUIFlavor?: FieldPolicy<any> | FieldReadFunction<any>,
webUIInterface?: FieldPolicy<any> | FieldReadFunction<any>, webUIInterface?: FieldPolicy<any> | FieldReadFunction<any>,

View File

@@ -29,9 +29,11 @@ export type AboutPayload = {
}; };
export enum BackupRestoreState { export enum BackupRestoreState {
Failure = 'FAILURE',
Idle = 'IDLE', Idle = 'IDLE',
RestoringCategories = 'RESTORING_CATEGORIES', RestoringCategories = 'RESTORING_CATEGORIES',
RestoringManga = 'RESTORING_MANGA' RestoringManga = 'RESTORING_MANGA',
Success = 'SUCCESS'
} }
export type BackupRestoreStatus = { export type BackupRestoreStatus = {
@@ -1216,6 +1218,7 @@ export type PageInfo = {
export type PartialSettingsType = Settings & { export type PartialSettingsType = Settings & {
__typename?: 'PartialSettingsType'; __typename?: 'PartialSettingsType';
autoDownloadAheadLimit?: Maybe<Scalars['Int']['output']>;
autoDownloadNewChapters?: Maybe<Scalars['Boolean']['output']>; autoDownloadNewChapters?: Maybe<Scalars['Boolean']['output']>;
backupInterval?: Maybe<Scalars['Int']['output']>; backupInterval?: Maybe<Scalars['Int']['output']>;
backupPath?: Maybe<Scalars['String']['output']>; backupPath?: Maybe<Scalars['String']['output']>;
@@ -1229,9 +1232,11 @@ export type PartialSettingsType = Settings & {
downloadsPath?: Maybe<Scalars['String']['output']>; downloadsPath?: Maybe<Scalars['String']['output']>;
electronPath?: Maybe<Scalars['String']['output']>; electronPath?: Maybe<Scalars['String']['output']>;
excludeCompleted?: Maybe<Scalars['Boolean']['output']>; excludeCompleted?: Maybe<Scalars['Boolean']['output']>;
excludeEntryWithUnreadChapters?: Maybe<Scalars['Boolean']['output']>;
excludeNotStarted?: Maybe<Scalars['Boolean']['output']>; excludeNotStarted?: Maybe<Scalars['Boolean']['output']>;
excludeUnreadChapters?: Maybe<Scalars['Boolean']['output']>; excludeUnreadChapters?: Maybe<Scalars['Boolean']['output']>;
globalUpdateInterval?: Maybe<Scalars['Float']['output']>; globalUpdateInterval?: Maybe<Scalars['Float']['output']>;
gqlDebugLogsEnabled?: Maybe<Scalars['Boolean']['output']>;
initialOpenInBrowserEnabled?: Maybe<Scalars['Boolean']['output']>; initialOpenInBrowserEnabled?: Maybe<Scalars['Boolean']['output']>;
ip?: Maybe<Scalars['String']['output']>; ip?: Maybe<Scalars['String']['output']>;
localSourcePath?: Maybe<Scalars['String']['output']>; localSourcePath?: Maybe<Scalars['String']['output']>;
@@ -1241,6 +1246,7 @@ export type PartialSettingsType = Settings & {
socksProxyHost?: Maybe<Scalars['String']['output']>; socksProxyHost?: Maybe<Scalars['String']['output']>;
socksProxyPort?: Maybe<Scalars['String']['output']>; socksProxyPort?: Maybe<Scalars['String']['output']>;
systemTrayEnabled?: Maybe<Scalars['Boolean']['output']>; systemTrayEnabled?: Maybe<Scalars['Boolean']['output']>;
updateMangas?: Maybe<Scalars['Boolean']['output']>;
webUIChannel?: Maybe<WebUiChannel>; webUIChannel?: Maybe<WebUiChannel>;
webUIFlavor?: Maybe<WebUiFlavor>; webUIFlavor?: Maybe<WebUiFlavor>;
webUIInterface?: Maybe<WebUiInterface>; webUIInterface?: Maybe<WebUiInterface>;
@@ -1248,6 +1254,7 @@ export type PartialSettingsType = Settings & {
}; };
export type PartialSettingsTypeInput = { export type PartialSettingsTypeInput = {
autoDownloadAheadLimit?: InputMaybe<Scalars['Int']['input']>;
autoDownloadNewChapters?: InputMaybe<Scalars['Boolean']['input']>; autoDownloadNewChapters?: InputMaybe<Scalars['Boolean']['input']>;
backupInterval?: InputMaybe<Scalars['Int']['input']>; backupInterval?: InputMaybe<Scalars['Int']['input']>;
backupPath?: InputMaybe<Scalars['String']['input']>; backupPath?: InputMaybe<Scalars['String']['input']>;
@@ -1261,9 +1268,11 @@ export type PartialSettingsTypeInput = {
downloadsPath?: InputMaybe<Scalars['String']['input']>; downloadsPath?: InputMaybe<Scalars['String']['input']>;
electronPath?: InputMaybe<Scalars['String']['input']>; electronPath?: InputMaybe<Scalars['String']['input']>;
excludeCompleted?: InputMaybe<Scalars['Boolean']['input']>; excludeCompleted?: InputMaybe<Scalars['Boolean']['input']>;
excludeEntryWithUnreadChapters?: InputMaybe<Scalars['Boolean']['input']>;
excludeNotStarted?: InputMaybe<Scalars['Boolean']['input']>; excludeNotStarted?: InputMaybe<Scalars['Boolean']['input']>;
excludeUnreadChapters?: InputMaybe<Scalars['Boolean']['input']>; excludeUnreadChapters?: InputMaybe<Scalars['Boolean']['input']>;
globalUpdateInterval?: InputMaybe<Scalars['Float']['input']>; globalUpdateInterval?: InputMaybe<Scalars['Float']['input']>;
gqlDebugLogsEnabled?: InputMaybe<Scalars['Boolean']['input']>;
initialOpenInBrowserEnabled?: InputMaybe<Scalars['Boolean']['input']>; initialOpenInBrowserEnabled?: InputMaybe<Scalars['Boolean']['input']>;
ip?: InputMaybe<Scalars['String']['input']>; ip?: InputMaybe<Scalars['String']['input']>;
localSourcePath?: InputMaybe<Scalars['String']['input']>; localSourcePath?: InputMaybe<Scalars['String']['input']>;
@@ -1273,6 +1282,7 @@ export type PartialSettingsTypeInput = {
socksProxyHost?: InputMaybe<Scalars['String']['input']>; socksProxyHost?: InputMaybe<Scalars['String']['input']>;
socksProxyPort?: InputMaybe<Scalars['String']['input']>; socksProxyPort?: InputMaybe<Scalars['String']['input']>;
systemTrayEnabled?: InputMaybe<Scalars['Boolean']['input']>; systemTrayEnabled?: InputMaybe<Scalars['Boolean']['input']>;
updateMangas?: InputMaybe<Scalars['Boolean']['input']>;
webUIChannel?: InputMaybe<WebUiChannel>; webUIChannel?: InputMaybe<WebUiChannel>;
webUIFlavor?: InputMaybe<WebUiFlavor>; webUIFlavor?: InputMaybe<WebUiFlavor>;
webUIInterface?: InputMaybe<WebUiInterface>; webUIInterface?: InputMaybe<WebUiInterface>;
@@ -1299,7 +1309,7 @@ export type Query = {
mangas: MangaNodeList; mangas: MangaNodeList;
meta: GlobalMetaType; meta: GlobalMetaType;
metas: GlobalMetaNodeList; metas: GlobalMetaNodeList;
restoreStatus: BackupRestoreStatus; restoreStatus?: Maybe<BackupRestoreStatus>;
settings: SettingsType; settings: SettingsType;
source: SourceType; source: SourceType;
sources: SourceNodeList; sources: SourceNodeList;
@@ -1398,6 +1408,11 @@ export type QueryMetasArgs = {
}; };
export type QueryRestoreStatusArgs = {
id: Scalars['String']['input'];
};
export type QuerySourceArgs = { export type QuerySourceArgs = {
id: Scalars['LongString']['input']; id: Scalars['LongString']['input'];
}; };
@@ -1450,7 +1465,8 @@ export type RestoreBackupInput = {
export type RestoreBackupPayload = { export type RestoreBackupPayload = {
__typename?: 'RestoreBackupPayload'; __typename?: 'RestoreBackupPayload';
clientMutationId?: Maybe<Scalars['String']['output']>; clientMutationId?: Maybe<Scalars['String']['output']>;
status: BackupRestoreStatus; id: Scalars['String']['output'];
status?: Maybe<BackupRestoreStatus>;
}; };
export type SelectFilter = { export type SelectFilter = {
@@ -1521,6 +1537,7 @@ export type SetSettingsPayload = {
}; };
export type Settings = { export type Settings = {
autoDownloadAheadLimit?: Maybe<Scalars['Int']['output']>;
autoDownloadNewChapters?: Maybe<Scalars['Boolean']['output']>; autoDownloadNewChapters?: Maybe<Scalars['Boolean']['output']>;
backupInterval?: Maybe<Scalars['Int']['output']>; backupInterval?: Maybe<Scalars['Int']['output']>;
backupPath?: Maybe<Scalars['String']['output']>; backupPath?: Maybe<Scalars['String']['output']>;
@@ -1534,9 +1551,11 @@ export type Settings = {
downloadsPath?: Maybe<Scalars['String']['output']>; downloadsPath?: Maybe<Scalars['String']['output']>;
electronPath?: Maybe<Scalars['String']['output']>; electronPath?: Maybe<Scalars['String']['output']>;
excludeCompleted?: Maybe<Scalars['Boolean']['output']>; excludeCompleted?: Maybe<Scalars['Boolean']['output']>;
excludeEntryWithUnreadChapters?: Maybe<Scalars['Boolean']['output']>;
excludeNotStarted?: Maybe<Scalars['Boolean']['output']>; excludeNotStarted?: Maybe<Scalars['Boolean']['output']>;
excludeUnreadChapters?: Maybe<Scalars['Boolean']['output']>; excludeUnreadChapters?: Maybe<Scalars['Boolean']['output']>;
globalUpdateInterval?: Maybe<Scalars['Float']['output']>; globalUpdateInterval?: Maybe<Scalars['Float']['output']>;
gqlDebugLogsEnabled?: Maybe<Scalars['Boolean']['output']>;
initialOpenInBrowserEnabled?: Maybe<Scalars['Boolean']['output']>; initialOpenInBrowserEnabled?: Maybe<Scalars['Boolean']['output']>;
ip?: Maybe<Scalars['String']['output']>; ip?: Maybe<Scalars['String']['output']>;
localSourcePath?: Maybe<Scalars['String']['output']>; localSourcePath?: Maybe<Scalars['String']['output']>;
@@ -1546,6 +1565,7 @@ export type Settings = {
socksProxyHost?: Maybe<Scalars['String']['output']>; socksProxyHost?: Maybe<Scalars['String']['output']>;
socksProxyPort?: Maybe<Scalars['String']['output']>; socksProxyPort?: Maybe<Scalars['String']['output']>;
systemTrayEnabled?: Maybe<Scalars['Boolean']['output']>; systemTrayEnabled?: Maybe<Scalars['Boolean']['output']>;
updateMangas?: Maybe<Scalars['Boolean']['output']>;
webUIChannel?: Maybe<WebUiChannel>; webUIChannel?: Maybe<WebUiChannel>;
webUIFlavor?: Maybe<WebUiFlavor>; webUIFlavor?: Maybe<WebUiFlavor>;
webUIInterface?: Maybe<WebUiInterface>; webUIInterface?: Maybe<WebUiInterface>;
@@ -1554,6 +1574,7 @@ export type Settings = {
export type SettingsType = Settings & { export type SettingsType = Settings & {
__typename?: 'SettingsType'; __typename?: 'SettingsType';
autoDownloadAheadLimit: Scalars['Int']['output'];
autoDownloadNewChapters: Scalars['Boolean']['output']; autoDownloadNewChapters: Scalars['Boolean']['output'];
backupInterval: Scalars['Int']['output']; backupInterval: Scalars['Int']['output'];
backupPath: Scalars['String']['output']; backupPath: Scalars['String']['output'];
@@ -1567,9 +1588,11 @@ export type SettingsType = Settings & {
downloadsPath: Scalars['String']['output']; downloadsPath: Scalars['String']['output'];
electronPath: Scalars['String']['output']; electronPath: Scalars['String']['output'];
excludeCompleted: Scalars['Boolean']['output']; excludeCompleted: Scalars['Boolean']['output'];
excludeEntryWithUnreadChapters: Scalars['Boolean']['output'];
excludeNotStarted: Scalars['Boolean']['output']; excludeNotStarted: Scalars['Boolean']['output'];
excludeUnreadChapters: Scalars['Boolean']['output']; excludeUnreadChapters: Scalars['Boolean']['output'];
globalUpdateInterval: Scalars['Float']['output']; globalUpdateInterval: Scalars['Float']['output'];
gqlDebugLogsEnabled: Scalars['Boolean']['output'];
initialOpenInBrowserEnabled: Scalars['Boolean']['output']; initialOpenInBrowserEnabled: Scalars['Boolean']['output'];
ip: Scalars['String']['output']; ip: Scalars['String']['output'];
localSourcePath: Scalars['String']['output']; localSourcePath: Scalars['String']['output'];
@@ -1579,6 +1602,7 @@ export type SettingsType = Settings & {
socksProxyHost: Scalars['String']['output']; socksProxyHost: Scalars['String']['output'];
socksProxyPort: Scalars['String']['output']; socksProxyPort: Scalars['String']['output'];
systemTrayEnabled: Scalars['Boolean']['output']; systemTrayEnabled: Scalars['Boolean']['output'];
updateMangas: Scalars['Boolean']['output'];
webUIChannel: WebUiChannel; webUIChannel: WebUiChannel;
webUIFlavor: WebUiFlavor; webUIFlavor: WebUiFlavor;
webUIInterface: WebUiInterface; webUIInterface: WebUiInterface;
@@ -2098,7 +2122,7 @@ export type RestoreBackupMutationVariables = Exact<{
}>; }>;
export type RestoreBackupMutation = { __typename?: 'Mutation', restoreBackup: { __typename?: 'RestoreBackupPayload', clientMutationId?: string | null, status: { __typename?: 'BackupRestoreStatus', mangaProgress: number, state: BackupRestoreState, totalManga: number } } }; export type RestoreBackupMutation = { __typename?: 'Mutation', restoreBackup: { __typename?: 'RestoreBackupPayload', clientMutationId?: string | null, id: string, status?: { __typename?: 'BackupRestoreStatus', mangaProgress: number, state: BackupRestoreState, totalManga: number } | null } };
export type CreateCategoryMutationVariables = Exact<{ export type CreateCategoryMutationVariables = Exact<{
input: CreateCategoryInput; input: CreateCategoryInput;
@@ -2415,10 +2439,12 @@ export type ValidateBackupQueryVariables = Exact<{
export type ValidateBackupQuery = { __typename?: 'Query', validateBackup: { __typename?: 'ValidateBackupResult', missingSources: Array<{ __typename?: 'ValidateBackupSource', id: any, name: string }> } }; export type ValidateBackupQuery = { __typename?: 'Query', validateBackup: { __typename?: 'ValidateBackupResult', missingSources: Array<{ __typename?: 'ValidateBackupSource', id: any, name: string }> } };
export type GetRestoreStatusQueryVariables = Exact<{ [key: string]: never; }>; export type GetRestoreStatusQueryVariables = Exact<{
id: Scalars['String']['input'];
}>;
export type GetRestoreStatusQuery = { __typename?: 'Query', restoreStatus: { __typename?: 'BackupRestoreStatus', mangaProgress: number, state: BackupRestoreState, totalManga: number } }; export type GetRestoreStatusQuery = { __typename?: 'Query', restoreStatus?: { __typename?: 'BackupRestoreStatus', mangaProgress: number, state: BackupRestoreState, totalManga: number } | null };
export type GetCategoriesQueryVariables = Exact<{ export type GetCategoriesQueryVariables = Exact<{
after?: InputMaybe<Scalars['Cursor']['input']>; after?: InputMaybe<Scalars['Cursor']['input']>;

View File

@@ -21,6 +21,7 @@ export const RESTORE_BACKUP = gql`
mutation RESTORE_BACKUP($backup: Upload!) { mutation RESTORE_BACKUP($backup: Upload!) {
restoreBackup(input: { backup: $backup }) { restoreBackup(input: { backup: $backup }) {
clientMutationId clientMutationId
id
status { status {
mangaProgress mangaProgress
state state

View File

@@ -20,8 +20,8 @@ export const VALIDATE_BACKUP = gql`
`; `;
export const GET_RESTORE_STATUS = gql` export const GET_RESTORE_STATUS = gql`
query GET_RESTORE_STATUS { query GET_RESTORE_STATUS($id: String!) {
restoreStatus { restoreStatus(id: $id) {
mangaProgress mangaProgress
state state
totalManga totalManga

View File

@@ -1596,9 +1596,10 @@ export class RequestManager {
} }
public useGetBackupRestoreStatus( public useGetBackupRestoreStatus(
id: string,
options?: QueryHookOptions<GetRestoreStatusQuery, GetRestoreStatusQueryVariables>, options?: QueryHookOptions<GetRestoreStatusQuery, GetRestoreStatusQueryVariables>,
): AbortableApolloUseQueryResponse<GetRestoreStatusQuery, GetRestoreStatusQueryVariables> { ): AbortableApolloUseQueryResponse<GetRestoreStatusQuery, GetRestoreStatusQueryVariables> {
return this.doRequest(GQLMethod.USE_QUERY, GET_RESTORE_STATUS, undefined, options); return this.doRequest(GQLMethod.USE_QUERY, GET_RESTORE_STATUS, { id }, options);
} }
public getExportBackupUrl(): string { public getExportBackupUrl(): string {

View File

@@ -6,7 +6,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/ */
import { useContext, useEffect, useRef, useState } from 'react'; import { useContext, useEffect, useState } from 'react';
import List from '@mui/material/List'; import List from '@mui/material/List';
import ListItemText from '@mui/material/ListItemText'; import ListItemText from '@mui/material/ListItemText';
import { fromEvent } from 'file-selector'; import { fromEvent } from 'file-selector';
@@ -17,9 +17,11 @@ import { requestManager } from '@/lib/requests/RequestManager.ts';
import { makeToast } from '@/components/util/Toast'; import { makeToast } from '@/components/util/Toast';
import { ListItemLink } from '@/components/util/ListItemLink'; import { ListItemLink } from '@/components/util/ListItemLink';
import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarContext'; import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarContext';
import { BackupRestoreState, GetRestoreStatusQuery } from '@/lib/graphql/generated/graphql.ts'; import { BackupRestoreState } from '@/lib/graphql/generated/graphql.ts';
import { Progress } from '@/components/util/Progress.tsx'; import { Progress } from '@/components/util/Progress.tsx';
let backupRestoreId: string | undefined;
export function Backup() { export function Backup() {
const { t } = useTranslation(); const { t } = useTranslation();
const { setTitle, setAction } = useContext(NavBarContext); const { setTitle, setAction } = useContext(NavBarContext);
@@ -30,15 +32,15 @@ export function Backup() {
useSetDefaultBackTo('settings'); useSetDefaultBackTo('settings');
const [isRestoring, setIsRestoring] = useState<boolean | null>(null); const { data } = requestManager.useGetBackupRestoreStatus(backupRestoreId ?? '', {
const { data } = requestManager.useGetBackupRestoreStatus({ skip: !backupRestoreId,
skip: isRestoring !== null ? !isRestoring : false,
pollInterval: 1000, pollInterval: 1000,
}); });
const prevRestoreStatusRef = useRef<GetRestoreStatusQuery['restoreStatus'] | null>(null);
const [, setTriggerReRender] = useState(0);
const restoreProgress = (() => { const restoreProgress = (() => {
if (!isRestoring || !data) { if (!data?.restoreStatus) {
return 0; return 0;
} }
@@ -47,37 +49,36 @@ export function Backup() {
})(); })();
useEffect(() => { useEffect(() => {
if (!data || isRestoring !== null) { if (!data?.restoreStatus) {
return; return;
} }
const isRestoreInProgress = data?.restoreStatus.state !== BackupRestoreState.Idle; const isSuccess = data.restoreStatus.state === BackupRestoreState.Success;
setIsRestoring(isRestoreInProgress); const isFailure = data.restoreStatus.state === BackupRestoreState.Failure;
}, [data?.restoreStatus.state]);
useEffect(() => { const isRestoreFinished = isSuccess || isFailure;
if (!data) {
return;
}
const isRestoreFinished =
isRestoring &&
data.restoreStatus.mangaProgress === data.restoreStatus.totalManga &&
prevRestoreStatusRef.current?.state !== BackupRestoreState.Idle;
if (isRestoreFinished) { if (isRestoreFinished) {
setIsRestoring(false); if (isSuccess) {
makeToast(t('settings.backup.label.restored_backup'), 'success'); makeToast(t('settings.backup.label.restored_backup'), 'success');
} }
prevRestoreStatusRef.current = data.restoreStatus;
}, [data?.restoreStatus.state]); if (isFailure) {
makeToast(t('settings.backup.label.backup_restore_failed'), 'error');
}
backupRestoreId = undefined;
setTriggerReRender(Date.now());
}
}, [data?.restoreStatus?.state]);
const submitBackup = async (file: File) => { const submitBackup = async (file: File) => {
if (file.name.toLowerCase().match(/proto\.gz$|tachibk$/g)) { if (file.name.toLowerCase().match(/proto\.gz$|tachibk$/g)) {
makeToast(t('settings.backup.label.restoring_backup'), 'info'); makeToast(t('settings.backup.label.restoring_backup'), 'info');
try { try {
await requestManager.restoreBackupFile(file).response; const response = await requestManager.restoreBackupFile(file).response;
setIsRestoring(true); backupRestoreId = response.data?.restoreBackup.id;
setTriggerReRender(Date.now());
} catch (e) { } catch (e) {
makeToast(t('settings.backup.label.backup_restore_failed'), 'error'); makeToast(t('settings.backup.label.backup_restore_failed'), 'error');
} }
@@ -129,13 +130,13 @@ export function Backup() {
</ListItemLink> </ListItemLink>
<ListItemButton <ListItemButton
onClick={() => document.getElementById('backup-file')?.click()} onClick={() => document.getElementById('backup-file')?.click()}
disabled={!!isRestoring} disabled={!!backupRestoreId}
> >
<ListItemText <ListItemText
primary={t('settings.backup.label.restore_backup')} primary={t('settings.backup.label.restore_backup')}
secondary={t('settings.backup.label.restore_backup_info')} secondary={t('settings.backup.label.restore_backup_info')}
/> />
{isRestoring ? ( {backupRestoreId ? (
<ListItemIcon> <ListItemIcon>
<Progress progress={restoreProgress} /> <Progress progress={restoreProgress} />
</ListItemIcon> </ListItemIcon>

View File

@@ -1,6 +1,6 @@
[ [
{ {
"uiVersion": "PREVIEW", "uiVersion": "PREVIEW",
"serverVersion": "r1353" "serverVersion": "r1410"
} }
] ]