From 21aaae28835e51f916e85f81801bb0219532fe89 Mon Sep 17 00:00:00 2001 From: laggage Date: Tue, 21 Mar 2023 14:58:04 +0800 Subject: [PATCH] fix(blog-export/records-list): clear cached data after authorized --- src/authentication/account-manager.ts | 4 +++ src/services/blog-export-records.store.ts | 6 ++++- .../blog-export-provider.ts | 27 ++++++++++++++++++- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/authentication/account-manager.ts b/src/authentication/account-manager.ts index 2a53a7e2..10c3040e 100644 --- a/src/authentication/account-manager.ts +++ b/src/authentication/account-manager.ts @@ -7,6 +7,7 @@ import { postCategoriesDataProvider } from '../tree-view-providers/post-categori import { OauthApi } from '@/services/oauth.api'; import { CnblogsAuthenticationProvider } from '@/authentication/authentication-provider'; import { CnblogsAuthenticationSession } from '@/authentication/session'; +import { BlogExportProvider } from '@/tree-view-providers/blog-export-provider'; const isAuthorizedStorageKey = 'isAuthorized'; @@ -38,6 +39,9 @@ class AccountManager extends vscode.Disposable { accountViewDataProvider.fireTreeDataChangedEvent(); postsDataProvider.fireTreeDataChangedEvent(undefined); postCategoriesDataProvider.fireTreeDataChangedEvent(); + BlogExportProvider.optionalInstance + ?.refreshRecords({ force: false, clearCache: true }) + .catch(console.warn); }) ); } diff --git a/src/services/blog-export-records.store.ts b/src/services/blog-export-records.store.ts index 0dd64a25..81c7f798 100644 --- a/src/services/blog-export-records.store.ts +++ b/src/services/blog-export-records.store.ts @@ -13,11 +13,15 @@ export class BlogExportRecordsStore { async refresh( options?: BlogExportRecordsStore['list'] extends (opt: infer U) => unknown ? U : never ): Promise { + await this.clearCache(); + return this.list(options); + } + + async clearCache(): Promise { if (this._cachedList) await this._cachedList.catch(() => false); this._cachedList = null; this._cached = null; - return this.list(options); } list({ diff --git a/src/tree-view-providers/blog-export-provider.ts b/src/tree-view-providers/blog-export-provider.ts index 915cba98..f3e9242b 100644 --- a/src/tree-view-providers/blog-export-provider.ts +++ b/src/tree-view-providers/blog-export-provider.ts @@ -83,13 +83,38 @@ export class BlogExportProvider implements TreeDataProvider return false; } - async refreshRecords({ notifyOnError = true, force = true } = {}): Promise { + /** + * Refresh the records of blog-export + * @param options + * @returns The boolean value which tell if the data has been refreshed + */ + async refreshRecords({ + /** + * Tell if to raise a notify to the user when error response received during the refreshing process + */ + notifyOnError = true, + /** + * Tell should reload the cached data + */ + force = true, + /** + * Tell should remove the cached data + * **NOTE** only works with `force=false`, when `force=true`, the cached data will always be removed and the re-created + */ + clearCache = true, + } = {}): Promise { const hasCacheRefreshed = force ? await this._store ?.refresh() .then(() => true) .catch(e => (notifyOnError ? void AlertService.warning(`刷新博客备份失败记录, ${e}`) : undefined)) + : clearCache + ? await this._store?.clearCache().then( + () => true, + () => true + ) : true; + if (hasCacheRefreshed) this._treeDataChangedSource?.fire(null); return hasCacheRefreshed ?? false;