diff --git a/src/lib/Queue.ts b/src/lib/Queue.ts index cc40dd06..b8309d5d 100644 --- a/src/lib/Queue.ts +++ b/src/lib/Queue.ts @@ -34,6 +34,16 @@ export class Queue { this.queue = pLimit(concurrency); } + clear(): void { + this.pendingKeyToPromiseMap.forEach((promise) => { + promise.reject(new Error('Queue::clear: called')); + }); + + this.pendingKeyToPriorityMap.clear(); + this.pendingKeyToFnMap.clear(); + this.pendingKeyToPromiseMap.clear(); + } + enqueue(key: Key, fn: () => PromiseLike | T, priority: QueuePriority = Priority.NORMAL): Promise { this.counter = (this.counter + 1) % Infinity; const actualKey = `${key}_${this.counter}`; diff --git a/src/lib/requests/RequestManager.ts b/src/lib/requests/RequestManager.ts index 9e1ddbf8..9c182dad 100644 --- a/src/lib/requests/RequestManager.ts +++ b/src/lib/requests/RequestManager.ts @@ -409,6 +409,12 @@ export class RequestManager { this.graphQLClient.updateConfig(); } + public reset(): void { + this.graphQLClient.client.resetStore(); + this.cache.clear(); + this.imageQueue.clear(); + } + public getBaseUrl(): string { return this.restClient.getBaseUrl(); } @@ -2143,8 +2149,7 @@ export class RequestManager { ); result.response.then(() => { - this.graphQLClient.client.cache.reset(); - this.cache.clear(); + this.reset(); }); return result; diff --git a/src/screens/settings/ServerSettings.tsx b/src/screens/settings/ServerSettings.tsx index dbb454c8..4751fdab 100644 --- a/src/screens/settings/ServerSettings.tsx +++ b/src/screens/settings/ServerSettings.tsx @@ -88,6 +88,7 @@ export const ServerSettings = () => { const handleServerAddressChange = (address: string) => { const serverBaseUrl = address.replaceAll(/(\/)+$/g, ''); setServerAddress(serverBaseUrl); + requestManager.reset(); }; const updateSetting = (