@@ -4,35 +4,55 @@ import vscode from 'vscode';
4
4
import { postsDataProvider } from '../../tree-view-providers/posts-data-provider' ;
5
5
import { AlertService } from '../../services/alert.service' ;
6
6
import { PostsListState } from '../../models/posts-list-state' ;
7
- import { PageModel } from '../../models/page-model' ;
8
- import { Post } from '../../models/post' ;
9
7
import { window } from 'vscode' ;
10
8
import { extensionViews } from '../../tree-view-providers/tree-view-registration' ;
11
9
12
- export const refreshPostsList = async ( ) => {
13
- if ( refreshing ) {
10
+ let refreshTask : Promise < any > | null = null ;
11
+
12
+ export const refreshPostsList = ( { queue = false } = { } ) : Promise < boolean > => {
13
+ if ( refreshing && ! queue ) {
14
14
alertRefreshing ( ) ;
15
- return ;
16
- }
17
- await setRefreshing ( true ) ;
18
- let pagedPosts : PageModel < Post > | undefined ;
19
- try {
20
- await postsDataProvider . loadPosts ( ) ;
21
- pagedPosts = postsDataProvider . pagedPosts ;
22
- if ( pagedPosts ) {
23
- await postService . updatePostsListState ( pagedPosts ) ;
24
- updatePostsListViewTitle ( ) ;
25
- }
26
- } catch ( e ) {
27
- console . error ( 'refresh posts list failed' , e ) ;
28
- AlertService . error ( '刷新博文列表失败' ) ;
15
+ return refreshTask || Promise . resolve ( false ) ;
16
+ } else if ( refreshing && refreshTask != null ) {
17
+ return refreshTask . then ( ( ) => refreshPostsList ( ) ) ;
29
18
}
30
- await setPostListContext (
31
- pagedPosts ?. pageCount ?? 0 ,
32
- pagedPosts ?. hasPrevious ?? false ,
33
- pagedPosts ?. hasNext ?? false
19
+
20
+ refreshTask = new Promise < boolean > ( resolve =>
21
+ setRefreshing ( true ) . finally ( ( ) =>
22
+ postsDataProvider
23
+ . loadPosts ( )
24
+ . then ( pagedPosts =>
25
+ setPostListContext (
26
+ pagedPosts ?. pageCount ?? 0 ,
27
+ pagedPosts ?. hasPrevious ?? false ,
28
+ pagedPosts ?. hasNext ?? false
29
+ ) . then ( ( ) => pagedPosts )
30
+ )
31
+ . then ( pagedPosts =>
32
+ pagedPosts == null
33
+ ? Promise . resolve ( false ) . finally ( ( ) => AlertService . error ( '刷新博文列表失败' ) )
34
+ : postService
35
+ . updatePostsListState ( pagedPosts )
36
+ . then ( ( ) => updatePostsListViewTitle ( ) )
37
+ . then (
38
+ ( ) => true ,
39
+ ( ) => true
40
+ )
41
+ )
42
+ . catch ( ( ) => false )
43
+ . then ( x =>
44
+ setRefreshing ( false ) . then (
45
+ ( ) => x ,
46
+ ( ) => x
47
+ )
48
+ )
49
+ . then ( undefined , ( ) => false )
50
+ . then ( x => resolve ( x ) )
51
+ . finally ( ( ) => ( refreshTask = null ) )
52
+ )
34
53
) ;
35
- await setRefreshing ( false ) ;
54
+
55
+ return refreshTask ;
36
56
} ;
37
57
38
58
export const gotoNextPostsList = async ( ) => {
@@ -71,7 +91,9 @@ export const seekPostsList = async () => {
71
91
let refreshing = false ;
72
92
const setRefreshing = async ( value = false ) => {
73
93
const extName = globalState . extensionName ;
74
- await vscode . commands . executeCommand ( 'setContext' , `${ extName } .posts-list.refreshing` , value ) ;
94
+ await vscode . commands
95
+ . executeCommand ( 'setContext' , `${ extName } .posts-list.refreshing` , value )
96
+ . then ( undefined , ( ) => false ) ;
75
97
refreshing = value ;
76
98
} ;
77
99
@@ -116,12 +138,14 @@ const updatePostsListViewTitle = () => {
116
138
return ;
117
139
}
118
140
const { pageIndex, pageCount } = state ;
119
- const view = extensionViews . postsList ;
120
- if ( view ) {
121
- let title = view . title ! ;
122
- const idx = title . indexOf ( '(' ) ;
123
- const pager = `第${ pageIndex } 页,共${ pageCount } 页` ;
124
- title = idx >= 0 ? title . substring ( 0 , idx ) : title ;
125
- view . title = `${ title } (${ pager } )` ;
141
+ const views = [ extensionViews . postsList , extensionViews . anotherPostsList ] ;
142
+ for ( const view of views ) {
143
+ if ( view ) {
144
+ let title = view . title ! ;
145
+ const idx = title . indexOf ( '(' ) ;
146
+ const pager = `第${ pageIndex } 页,共${ pageCount } 页` ;
147
+ title = idx >= 0 ? title . substring ( 0 , idx ) : title ;
148
+ view . title = `${ title } (${ pager } )` ;
149
+ }
126
150
}
127
151
} ;
0 commit comments