Skip to content

Commit 806a89f

Browse files
committed
feat: add cnblogs posts list to sidebar view
1 parent fd959bf commit 806a89f

File tree

6 files changed

+47
-20
lines changed

6 files changed

+47
-20
lines changed

package.json

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,11 @@
236236
"name": "工作空间",
237237
"when": "vscode-cnb.isAuthorized"
238238
},
239+
{
240+
"id": "cnblogs-posts-list-another",
241+
"name": "博客园 - 随笔列表",
242+
"when": "vscode-cnb.isAuthorized"
243+
},
239244
{
240245
"id": "cnblogs-post-categories-list",
241246
"name": "分类列表",
@@ -261,28 +266,28 @@
261266
},
262267
{
263268
"command": "vscode-cnb.previous-posts-list",
264-
"when": "view == cnblogs-posts-list",
269+
"when": "view == cnblogs-posts-list || view == cnblogs-posts-list-another",
265270
"group": "navigation@1"
266271
},
267272
{
268273
"command": "vscode-cnb.next-posts-list",
269-
"when": "view == cnblogs-posts-list",
274+
"when": "view == cnblogs-posts-list || view == cnblogs-posts-list-another",
270275
"group": "navigation@2"
271276
},
272277
{
273278
"command": "vscode-cnb.seek-posts-list",
274-
"when": "view == cnblogs-posts-list",
279+
"when": "view == cnblogs-posts-list || view == cnblogs-posts-list-another",
275280
"group": "navigation@3"
276281
},
277282
{
278283
"command": "vscode-cnb.refresh-posts-list",
279-
"when": "view == cnblogs-posts-list",
284+
"when": "view == cnblogs-posts-list || view == cnblogs-posts-list-another",
280285
"group": "navigation@4"
281286
},
282287
{
283288
"command": "vscode-cnb.create-local-draft",
284289
"group": "navigation@5",
285-
"when": "view == cnblogs-posts-list"
290+
"when": "view == cnblogs-posts-list || view == cnblogs-posts-list-another"
286291
},
287292
{
288293
"command": "vscode-cnb.new-post-category",
@@ -386,12 +391,12 @@
386391
{
387392
"command": "vscode-cnb.delete-post",
388393
"group": "inline",
389-
"when": "view == cnblogs-posts-list && viewItem != cnb-local-drafts-folder && viewItem != cnb-local-draft-file"
394+
"when": "viewItem =~ /^cnb-post/"
390395
},
391396
{
392397
"command": "vscode-cnb.modify-post-settings",
393398
"group": "inline",
394-
"when": "view == cnblogs-posts-list && viewItem != cnb-local-drafts-folder && viewItem != cnb-local-draft-file"
399+
"when": "viewItem =~ /^cnb-post/"
395400
},
396401
{
397402
"command": "vscode-cnb.save-local-draft-to-cnblogs",
@@ -413,32 +418,32 @@
413418
},
414419
{
415420
"command": "vscode-cnb.rename-post",
416-
"when": "view == cnblogs-posts-list && viewItem != cnb-local-drafts-folder && viewItem != cnb-local-draft-file",
421+
"when": "viewItem =~ /^cnb-post/",
417422
"group": "1@2"
418423
},
419424
{
420425
"command": "vscode-cnb.modify-post-settings",
421-
"when": "view == cnblogs-posts-list && viewItem != cnb-local-drafts-folder && viewItem != cnb-local-draft-file",
426+
"when": "viewItem =~ /^cnb-post/",
422427
"group": "1@1"
423428
},
424429
{
425430
"command": "vscode-cnb.delete-post",
426-
"when": "view == cnblogs-posts-list && viewItem != cnb-local-drafts-folder && viewItem != cnb-local-draft-file",
431+
"when": "viewItem =~ /^cnb-post/",
427432
"group": "delete@1"
428433
},
429434
{
430435
"command": "vscode-cnb.delete-post-to-local-file-map",
431-
"when": "view == cnblogs-posts-list && viewItem != cnb-local-drafts-folder && viewItem != cnb-local-draft-file",
436+
"when": "viewItem =~ /^cnb-post-cached/",
432437
"group": "delete@2"
433438
},
434439
{
435440
"command": "vscode-cnb.reveal-local-post-file-in-os",
436-
"when": "view == cnblogs-posts-list",
441+
"when": "viewItem =~ /^cnb-post-cached/",
437442
"group": "0@1"
438443
},
439444
{
440445
"command": "vscode-cnb.view-post-online",
441-
"when": "view == cnblogs-posts-list",
446+
"when": "viewItem =~ /^cnb-post/",
442447
"group": "0@2"
443448
},
444449
{

src/commands/posts-list/delete-post-to-local-file-map.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { MessageOptions, window } from 'vscode';
22
import { Post } from '../../models/post';
33
import { PostFileMap, PostFileMapManager } from '../../services/post-file-map';
4+
import { revealPostsListItem } from '../../services/posts-list-view';
45
import { extensionViews } from '../../tree-view-providers/tree-view-registration';
56

67
const confirm = async (posts: Post[]): Promise<boolean> => {
@@ -20,7 +21,7 @@ export const deletePostToLocalFileMap = async (post: Post) => {
2021
const view = extensionViews.postsList!;
2122
let selectedPosts = view.selection.filter(x => x instanceof Post).map(x => x as Post);
2223
if (!selectedPosts.includes(post)) {
23-
await view.reveal(post);
24+
await revealPostsListItem(post);
2425
selectedPosts = post ? [post] : [];
2526
}
2627
if (selectedPosts.length <= 0) {

src/commands/posts-list/modify-post-settings.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { Post } from '../../models/post';
33
import { AlertService } from '../../services/alert.service';
44
import { postService } from '../../services/post.service';
55
import { PostFileMapManager } from '../../services/post-file-map';
6-
import { extensionViews } from '../../tree-view-providers/tree-view-registration';
76
import { inputPostSettings } from '../../utils/input-post-settings';
7+
import { revealPostsListItem } from '../../services/posts-list-view';
88

99
export const modifyPostSettings = async (input: Post | Uri) => {
1010
let post: Post | undefined;
@@ -25,7 +25,7 @@ export const modifyPostSettings = async (input: Post | Uri) => {
2525
}
2626

2727
if (post) {
28-
await extensionViews.postsList?.reveal(post);
28+
await revealPostsListItem(post);
2929
}
3030
const editDto = await postService.fetchPostEditDto(postId);
3131
const postEditDto = editDto.post;

src/commands/posts-list/rename-post.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { Post } from '../../models/post';
55
import { postService } from '../../services/post.service';
66
import { PostFileMapManager } from '../../services/post-file-map';
77
import { postsDataProvider } from '../../tree-view-providers/posts-data-provider';
8-
import { extensionViews } from '../../tree-view-providers/tree-view-registration';
8+
import { revealPostsListItem } from '../../services/posts-list-view';
99

1010
const renameLinkedFile = async (post: Post): Promise<void> => {
1111
const filePath = PostFileMapManager.getFilePath(post.id);
@@ -38,8 +38,7 @@ export const renamePost = async (post: Post) => {
3838
return;
3939
}
4040

41-
const view = extensionViews.postsList!;
42-
await view.reveal(post);
41+
await revealPostsListItem(post);
4342

4443
const input = await window.showInputBox({
4544
title: '请输入新的博文标题',

src/services/posts-list-view.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Post } from '../models/post';
2+
import { extensionViews } from '../tree-view-providers/tree-view-registration';
3+
4+
export const revealPostsListItem = async (
5+
post: Post,
6+
options?: { select?: boolean; focus?: boolean; expand?: boolean | number }
7+
) => {
8+
if (!post) {
9+
return;
10+
}
11+
12+
const view = [extensionViews.postsList, extensionViews.anotherPostsList].find(x => x?.visible);
13+
await view?.reveal(post, options);
14+
};

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { postCategoriesDataProvider } from './categories-view-data-provider';
77

88
export const extensionViews: {
99
postsList?: vscode.TreeView<PostDataProviderItem>;
10+
anotherPostsList?: vscode.TreeView<PostDataProviderItem>;
1011
account?: vscode.TreeView<vscode.TreeItem>;
1112
postCategoriesList?: vscode.TreeView<PostCategory>;
1213
} = {};
@@ -20,10 +21,17 @@ export const registerTreeViews = () => {
2021
treeDataProvider: postsDataProvider,
2122
canSelectMany: true,
2223
});
24+
extensionViews.anotherPostsList = vscode.window.createTreeView('cnblogs-posts-list-another', {
25+
treeDataProvider: postsDataProvider,
26+
canSelectMany: true,
27+
});
2328
extensionViews.postCategoriesList = vscode.window.createTreeView('cnblogs-post-categories-list', {
2429
treeDataProvider: postCategoriesDataProvider,
2530
canSelectMany: true,
2631
});
27-
const disposables = [extensionViews.account, extensionViews.postsList, extensionViews.postCategoriesList];
32+
const disposables = [];
33+
for (const key in extensionViews) {
34+
disposables.push((extensionViews as any)[key]);
35+
}
2836
globalState.extensionContext?.subscriptions.push(...disposables);
2937
};

0 commit comments

Comments
 (0)