Skip to content

Commit be17567

Browse files
committed
refactor: introduce PostCateStore
1 parent 6862b3e commit be17567

14 files changed

+151
-89
lines changed

src/auth/auth-manager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ authProvider.onDidChangeSessions(async e => {
1919
await AuthManager.updateAuthStatus()
2020
accountViewDataProvider.fireTreeDataChangedEvent()
2121

22-
postCategoryDataProvider.refresh()
22+
await postCategoryDataProvider.refreshAsync()
2323

2424
if (e.removed != null) postDataProvider.refresh()
2525
else await PostListView.refresh()

src/cmd/pdf/post-pdf-template-builder.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
/* eslint-disable prettier/prettier */
12
import { Post } from '@/model/post'
23
import { PostFileMapManager } from '@/service/post/post-file-map'
34
import fs from 'fs'
45
import { BlogSettingService } from '@/service/blog-setting'
5-
import { PostCatService } from '@/service/post/post-cat'
66
import { PostCat } from '@/model/post-cat'
77
import { markdownItFactory } from '@cnblogs/markdown-it-presets'
88
import { UserService } from '@/service/user.service'
9+
import { PostCateStore } from '@/stores/post-cate-store'
910

1011
export namespace PostPdfTemplateBuilder {
1112
export const HighlightedMessage = 'markdown-highlight-finished'
@@ -19,11 +20,11 @@ export namespace PostPdfTemplateBuilder {
1920

2021
const html = isMarkdown
2122
? markdownItFactory({
22-
codeHighlight: false,
23-
math: true,
24-
disableRules: [],
25-
html: true,
26-
}).render(postBody)
23+
codeHighlight: false,
24+
math: true,
25+
disableRules: [],
26+
html: true,
27+
}).render(postBody)
2728
: postBody
2829

2930
const buildTagHtml = (): Promise<string> => {
@@ -36,19 +37,19 @@ export namespace PostPdfTemplateBuilder {
3637
}
3738

3839
const buildCategoryHtml = async (): Promise<string> => {
39-
const categories = await PostCatService.getAll()
40+
const categories = (await PostCateStore.createAsync()).getFlatAll()
4041
const postCategories =
4142
post.categoryIds
4243
?.map(categoryId => categories.find(x => x.categoryId === categoryId))
4344
.filter((x): x is PostCat => x != null) ?? []
4445
let html =
4546
postCategories.length > 0
4647
? postCategories
47-
.map(
48-
c =>
49-
`<a href="https://www.cnblogs.com/${blogApp}/category/${c.categoryId}.html" target="_blank">${c?.title}</a>`
50-
)
51-
.join(', ')
48+
.map(
49+
c =>
50+
`<a href="https://www.cnblogs.com/${blogApp}/category/${c.categoryId}.html" target="_blank">${c?.title}</a>`
51+
)
52+
.join(', ')
5253
: ''
5354
html = html !== '' ? `<div id="BlogPostCat">分类: ${html}</div>` : ''
5455
return html

src/cmd/post-cat/del-selected-cat.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export async function delSelectedCat(input?: PostCatTreeItem | PostCat) {
5656
}
5757

5858
p.report({ increment: 100 })
59-
postCategoryDataProvider.refresh()
59+
await postCategoryDataProvider.refreshAsync()
6060
}
6161
)
6262
}

src/cmd/post-cat/new-post-cat.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { PostCatService } from '@/service/post/post-cat'
33
import { extTreeViews } from '@/tree-view/tree-view-register'
44
import { inputPostCat } from './input-post-cat'
55
import { postCategoryDataProvider } from '@/tree-view/provider/post-category-tree-data-provider'
6+
import { PostCateStore } from '@/stores/post-cate-store'
67

78
export async function newPostCat() {
89
const input = await inputPostCat('新建分类')
@@ -22,9 +23,9 @@ export async function newPostCat() {
2223
increment: 70,
2324
})
2425

25-
postCategoryDataProvider.refresh()
26+
await postCategoryDataProvider.refreshAsync()
2627

27-
const allCategory = await PostCatService.getAll()
28+
const allCategory = (await PostCateStore.createAsync()).getFlatAll()
2829
const newCategory = allCategory.find(x => x.title === input.title)
2930
if (newCategory !== undefined) await extTreeViews.postCategoriesList.reveal(newCategory)
3031

src/cmd/post-cat/update-post-cat-treeview.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export async function updatePostCatTreeView(arg?: PostCat | PostCatTreeItem) {
3232
p.report({ increment: 10 })
3333
try {
3434
await PostCatService.update(updateDto)
35-
postCategoryDataProvider.refresh()
35+
await postCategoryDataProvider.refreshAsync()
3636
p.report({ increment: 100 })
3737
} catch (e) {
3838
void Alert.err(`更新博文失败: ${<string>e}`)

src/cmd/show-local-file-to-post-info.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
/* eslint-disable prettier/prettier */
12
import path from 'path'
23
import { Uri } from 'vscode'
34
import { Alert } from '@/infra/alert'
45
import { PostService } from '@/service/post/post'
5-
import { PostCatService } from '@/service/post/post-cat'
66
import { PostFileMapManager } from '@/service/post/post-file-map'
77
import { searchPostByTitle } from '@/service/post/search-post-by-title'
88
import { viewPostOnline } from './view-post-online'
99
import format from 'date-fns/format'
10+
import { PostCateStore } from '@/stores/post-cate-store'
1011

1112
/**
1213
* 本地文件所关联的博文信息
@@ -64,7 +65,7 @@ export async function showLocalFileToPostInfo(input: Uri | number): Promise<numb
6465

6566
const { post } = await PostService.getPostEditDto(postId)
6667

67-
let categories = await PostCatService.getAll()
68+
let categories = (await PostCateStore.createAsync()).getFlatAll()
6869
categories = categories.filter(x => post.categoryIds?.includes(x.categoryId))
6970
const categoryDesc = categories.length > 0 ? `博文分类: ${categories.map(c => c.title).join(', ')}\n` : ''
7071
const tagsDesc = (post.tags?.length ?? 0) > 0 ? `博文标签: ${post.tags?.join(', ')}\n` : ''
@@ -77,9 +78,8 @@ export async function showLocalFileToPostInfo(input: Uri | number): Promise<numb
7778
detail: `🔗博文链接: ${postUrl}\n博文发布时间: ${format(
7879
post.datePublished ?? new Date(),
7980
'yyyy-MM-dd HH:mm'
80-
)}\n博文发布状态: ${post.isPublished ? '已发布' : '未发布'}\n博文访问权限: ${
81-
post.accessPermissionDesc
82-
}\n${categoryDesc}${tagsDesc}`.replace(/\n$/, ''),
81+
)}\n博文发布状态: ${post.isPublished ? '已发布' : '未发布'}\n博文访问权限: ${post.accessPermissionDesc
82+
}\n${categoryDesc}${tagsDesc}`.replace(/\n$/, ''),
8383
},
8484
...options
8585
)

src/model/post-cat.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ export class PostCat {
44
title = ''
55
visible = true
66
description = ''
7-
updateTime: Date = new Date()
87
itemCount = 0
98
order?: number
109
childCount = 0

src/service/post/post-cat.ts

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ import { UserService } from '../user.service'
88
// TODO: need better cache impl
99
let siteCategoryCache: SiteCat[] | null = null
1010

11-
const DEFAULT_ORDER = 999999
12-
1311
async function getAuthedPostCatReq() {
1412
const token = await AuthManager.acquireToken()
1513
// TODO: need better solution
@@ -24,54 +22,7 @@ export namespace PostCatService {
2422
const resp = await req.getAll()
2523
const { categories } = <{ categories: PostCat[] }>JSON.parse(resp)
2624
if (categories == null) return []
27-
return categories.map(x => Object.assign(new PostCat(), x))
28-
} catch (e) {
29-
if (await UserService.hasBlog()) void Alert.err(`查询随笔分类失败: ${<string>e}`)
30-
throw e
31-
}
32-
}
33-
34-
export async function getFlatAll() {
35-
const categories = await getAll()
36-
if (categories == null || categories.length === 0) return []
37-
38-
const flat = []
39-
const queue = categories
40-
while (queue.length > 0) {
41-
const current = queue.pop()
42-
if (current == null) continue
43-
flat.push(current)
44-
if (current.children != null) for (const child of current.children) queue.unshift(child)
45-
}
46-
47-
return flat.sort((x, y) => {
48-
const order1 = x.order ?? DEFAULT_ORDER
49-
const order2 = y.order ?? DEFAULT_ORDER
50-
if (order1 > order2) return 1
51-
else if (order1 < order2) return -1
52-
else return x.title.localeCompare(y.title)
53-
})
54-
}
55-
56-
export async function getOne(categoryId: number) {
57-
const req = await getAuthedPostCatReq()
58-
try {
59-
const resp = await req.getOne(categoryId)
60-
const { parent } = <{ parent: PostCat | null }>JSON.parse(resp)
61-
return Object.assign(new PostCat(), parent)
62-
} catch (e) {
63-
if (await UserService.hasBlog()) void Alert.err(`查询随笔分类失败: ${<string>e}`)
64-
throw e
65-
}
66-
}
67-
68-
export async function getAllUnder(parentId: number) {
69-
const req = await getAuthedPostCatReq()
70-
try {
71-
const resp = await req.getOne(parentId)
72-
const { categories } = <{ categories: PostCat[] }>JSON.parse(resp)
73-
if (categories == null) return []
74-
return categories.map(x => Object.assign(new PostCat(), x))
25+
return categories
7526
} catch (e) {
7627
if (await UserService.hasBlog()) void Alert.err(`查询随笔分类失败: ${<string>e}`)
7728
throw e

src/service/post/post-cfg-panel.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { Token } from '@/wasm'
1717
import { PostTagReq } from '@/wasm'
1818
import { PostTag } from '@/wasm'
1919
import { AuthManager } from '@/auth/auth-manager'
20+
import { PostCateStore } from '@/stores/post-cate-store'
2021

2122
async function getAuthedPostTagReq() {
2223
const token = await AuthManager.acquireToken()
@@ -72,11 +73,13 @@ export namespace PostCfgPanel {
7273
baseUrl: webview.asWebviewUri(Uri.joinPath(globalCtx.assetsUri, 'fonts')).toString() + '/',
7374
} as WebviewMsg.SetFluentIconBaseUrlMsg)
7475

76+
const postCateStore = await PostCateStore.createAsync()
77+
7578
await webview.postMessage({
7679
command: Webview.Cmd.Ui.editPostCfg,
7780
post: cloneDeep(post),
7881
activeTheme: vscode.window.activeColorTheme.kind,
79-
userCats: cloneDeep(await PostCatService.getFlatAll()),
82+
userCats: cloneDeep(postCateStore.getFlatAll()),
8083
siteCats: cloneDeep(await PostCatService.getSitePresetList()),
8184
tags,
8285
breadcrumbs,
@@ -161,10 +164,11 @@ const observeWebviewMsg = (panel: WebviewPanel, options: PostCfgPanelOpenOption)
161164
await doUploadImg(webview, <WebviewMsg.UploadImgMsg>message)
162165
} else if (command === Webview.Cmd.Ext.getChildCategories) {
163166
const { payload } = message as WebviewCommonCmd<Webview.Cmd.GetChildCategoriesPayload>
167+
const cateStore = await PostCateStore.createAsync()
164168
await webview.postMessage({
165169
command: Webview.Cmd.Ui.updateChildCategories,
166170
payload: {
167-
value: await PostCatService.getAllUnder(payload.parentId).catch(() => []),
171+
value: cateStore.getChildren(payload.parentId),
168172
parentId: payload.parentId,
169173
},
170174
})

src/setup/setup-cmd.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ export function setupCmd() {
9292
// post category
9393
regCmd(extName`.post-category.new`, newPostCat),
9494
regCmd(extName`.post-category.del-select`, delSelectedCat),
95-
regCmd(extName`.post-category.refresh`, () => postCategoryDataProvider.refresh()),
95+
regCmd(extName`.post-category.refresh`, () => postCategoryDataProvider.refreshAsync()),
9696
regCmd(extName`.post-category.update`, updatePostCatTreeView),
9797
// workspace
9898
regCmd(extName`.workspace.set`, Workspace.set),

0 commit comments

Comments
 (0)