Skip to content

Commit aa8095a

Browse files
authored
Merge pull request #18 from cnblogs/fix-switch-user-bug
fix: fix user info not updated in the account info ui when log out and switch to another account
2 parents 387bd5c + 286099c commit aa8095a

File tree

5 files changed

+34
-9
lines changed

5 files changed

+34
-9
lines changed

src/commands/post-category/refresh-post-categories-list.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ import { postCategoriesDataProvider } from '../../tree-view-providers/categories
33

44
export const refreshPostCategoriesList = () => {
55
postCategoryService.clearCache();
6-
postCategoriesDataProvider.triggerTreeDataChangeEvent();
6+
postCategoriesDataProvider.fireTreeDataChangedEvent();
77
};

src/services/account.service.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import { URLSearchParams } from 'url';
77
import { generateCodeChallenge } from './code-challenge.service';
88
import * as RandomString from 'randomstring';
99
import fetch from 'node-fetch';
10+
import { accountViewDataProvider } from '../tree-view-providers/account-view-data-provider';
11+
import { postsDataProvider } from '../tree-view-providers/posts-data-provider';
12+
import { postCategoriesDataProvider } from '../tree-view-providers/categories-view-data-provider';
1013

1114
const isAuthorizedStorageKey = 'isAuthorized';
1215

@@ -58,6 +61,9 @@ export class AccountService extends vscode.Disposable {
5861
]);
5962
url = `${url}?${search}`;
6063
await vscode.commands.executeCommand('vscode.open', vscode.Uri.parse(url));
64+
accountViewDataProvider.fireTreeDataChangedEvent();
65+
postsDataProvider.fireTreeDataChangedEvent(undefined);
66+
postCategoriesDataProvider.fireTreeDataChangedEvent();
6167
}
6268

6369
async logout() {
@@ -68,8 +74,8 @@ export class AccountService extends vscode.Disposable {
6874
const { clientId, revocationEndpoint, authority } = globalState.config.oauth;
6975
const token = this.curUser?.authorizationInfo?.accessToken;
7076

71-
this.setIsAuthorized(false);
72-
globalState.storage.update('user', {});
77+
await globalState.storage.update('user', {});
78+
await this.setIsAuthorized(false);
7379

7480
if (token) {
7581
const body = new URLSearchParams([

src/tree-view-providers/account-view-data-provider.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,25 @@
11
import { accountService } from '../services/account.service';
2-
import { Event, ProviderResult, ThemeIcon, TreeDataProvider, TreeItem } from 'vscode';
2+
import { Event, EventEmitter, ProviderResult, ThemeIcon, TreeDataProvider, TreeItem } from 'vscode';
33

44
export class AccountViewDataProvider implements TreeDataProvider<TreeItem> {
5-
constructor() {}
6-
onDidChangeTreeData?: Event<void | TreeItem | null | undefined> | undefined;
5+
private static _instance?: AccountViewDataProvider;
6+
protected _onDidChangeTreeData = new EventEmitter<null | undefined>();
7+
8+
static get instance() {
9+
if (!this._instance) {
10+
this._instance = new AccountViewDataProvider();
11+
}
12+
return this._instance;
13+
}
14+
15+
protected constructor() {}
16+
17+
onDidChangeTreeData: Event<void | TreeItem | null | undefined> | undefined = this._onDidChangeTreeData.event;
18+
719
getTreeItem(element: TreeItem): TreeItem | Thenable<TreeItem> {
820
return element;
921
}
22+
1023
getChildren(element?: TreeItem): ProviderResult<TreeItem[]> {
1124
if (!accountService.isAuthorized || element) {
1225
return [];
@@ -65,4 +78,10 @@ export class AccountViewDataProvider implements TreeDataProvider<TreeItem> {
6578
},
6679
];
6780
}
81+
82+
fireTreeDataChangedEvent() {
83+
this._onDidChangeTreeData.fire(undefined);
84+
}
6885
}
86+
87+
export const accountViewDataProvider = AccountViewDataProvider.instance;

src/tree-view-providers/categories-view-data-provider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export class PostCategoriesViewDataProvider implements TreeDataProvider<PostCate
6464
return Promise.resolve(undefined);
6565
}
6666

67-
triggerTreeDataChangeEvent(item?: PostCategory) {
67+
fireTreeDataChangedEvent(item?: PostCategory) {
6868
this._treeDataChanged.fire(item);
6969
}
7070
}

src/tree-view-providers/tree-view-registration.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { globalState } from '../services/global-state';
22
import * as vscode from 'vscode';
3-
import { AccountViewDataProvider } from './account-view-data-provider';
3+
import { accountViewDataProvider } from './account-view-data-provider';
44
import { PostDataProviderItem, postsDataProvider } from './posts-data-provider';
55
import { PostCategory } from '../models/post-category';
66
import { postCategoriesDataProvider } from './categories-view-data-provider';
@@ -14,7 +14,7 @@ export const extensionViews: {
1414

1515
export const registerTreeViews = () => {
1616
extensionViews.account = vscode.window.createTreeView('cnblogs-account', {
17-
treeDataProvider: new AccountViewDataProvider(),
17+
treeDataProvider: accountViewDataProvider,
1818
canSelectMany: false,
1919
});
2020
extensionViews.postsList = vscode.window.createTreeView('cnblogs-posts-list', {

0 commit comments

Comments
 (0)