Skip to content

Commit

Permalink
feat: 体验优化,防止重复提交
Browse files Browse the repository at this point in the history
  • Loading branch information
terwer committed Aug 1, 2023
1 parent fbc05da commit 6cb0ddc
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 45 deletions.
6 changes: 6 additions & 0 deletions src/adaptors/api/base/metaweblog/metaweblogBlogApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,12 +169,18 @@ class MetaweblogBlogApi extends BlogApi {
postid,
this.cfg.username,
this.cfg.password,
false,
])
this.logger.debug("ret=>", ret)

return ret
}

public async getPreviewUrl(postid: string): Promise<string> {
const previewUrl = this.cfg.previewUrl.replace(/\[postid\]/g, postid)
return StrUtil.pathJoin(this.cfg.home ?? "", previewUrl)
}

public async getCategories(): Promise<CategoryInfo[]> {
const result = [] as CategoryInfo[]

Expand Down
2 changes: 1 addition & 1 deletion src/adaptors/api/base/metaweblog/metaweblogConstants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class MetaweblogConstants {
public static METHOD_GET_USERS_BLOGS = "metaWeblog.getUsersBlogs"
public static METHOD_NEW_POST = "metaWeblog.newPost"
public static METHOD_EDIT_POST = "metaWeblog.editPost"
public static METHOD_DELETE_POST = "blogger.deletePost"
public static METHOD_DELETE_POST = "metaWeblog.deletePost"
public static METHOD_GET_RECENT_POSTS = "metaWeblog.getRecentPosts"
public static METHOD_GET_POST = "metaWeblog.getPost"
public static METHOD_GET_CATEGORIES = "metaWeblog.getCategories"
Expand Down
6 changes: 0 additions & 6 deletions src/adaptors/api/cnblogs/adaptor/cnblogsApiAdaptor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import { AppInstance } from "~/src/appInstance.ts"
import { createAppLogger } from "~/src/utils/appLogger.ts"
import { CnblogsConstants } from "~/src/adaptors/api/cnblogs/cnblogsConstants.ts"
import { MetaweblogBlogApi } from "~/src/adaptors/api/base/metaweblog/metaweblogBlogApi.ts"
import { StrUtil } from "zhi-common"

/**
* 博客园 API 适配器
Expand Down Expand Up @@ -64,11 +63,6 @@ class CnblogsApiAdaptor extends MetaweblogBlogApi {
return result
}

public override async getPreviewUrl(postid: string): Promise<string> {
const previewUrl = this.cfg.previewUrl.replace(/\[postid\]/g, postid)
return StrUtil.pathJoin(this.cfg.home ?? "", previewUrl)
}

public override async deletePost(postid: string): Promise<boolean> {
const ret = await this.metaweblogCall(CnblogsConstants.METHOD_DELETE_POST, [
this.cfg.blogid,
Expand Down
35 changes: 7 additions & 28 deletions src/adaptors/api/typecho/adaptor/typechoApiAdaptor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,10 @@
* questions.
*/

import { BlogApi, UserBlog } from "zhi-blog-api"
import { CommonXmlrpcClient } from "zhi-xmlrpc-middleware"
import { AppInstance } from "~/src/appInstance.ts"
import { createAppLogger } from "~/src/utils/appLogger.ts"
import { TypechoConfig } from "~/src/adaptors/api/typecho/config/typechoConfig.ts"
import { TypechoConstants } from "~/src/adaptors/api/typecho/typechoConstants.ts"
import {AppInstance} from "~/src/appInstance.ts"
import {createAppLogger} from "~/src/utils/appLogger.ts"
import {TypechoConfig} from "~/src/adaptors/api/typecho/config/typechoConfig.ts"
import {MetaweblogBlogApi} from "~/src/adaptors/api/base/metaweblog/metaweblogBlogApi.ts"

/**
* WordPress API 适配器
Expand All @@ -37,36 +35,17 @@ import { TypechoConstants } from "~/src/adaptors/api/typecho/typechoConstants.ts
* @version 0.9.0
* @since 0.9.0
*/
class TypechoApiAdaptor extends BlogApi {
private readonly logger
private readonly cfg: TypechoConfig
private readonly commonXmlrpcClient

class TypechoApiAdaptor extends MetaweblogBlogApi {
/**
* 初始化 WordPress API 适配器
*
* @param appInstance 应用实例
* @param cfg 配置项
*/
constructor(appInstance: AppInstance, cfg: TypechoConfig) {
super()

this.cfg = cfg
super(appInstance, cfg)
this.logger = createAppLogger("typecho-api-adaptor")
this.commonXmlrpcClient = new CommonXmlrpcClient(appInstance, cfg.apiUrl)
}

public override async getUsersBlogs(): Promise<Array<UserBlog>> {
let result: UserBlog[] = []
result = await this.typechoCall(TypechoConstants.METHOD_GET_USERS_BLOGS, [])
this.logger.debug("getUsersBlogs=>", result)
return result
}

private async typechoCall(method: string, params: string[]) {
const parameters = ["typecho", this.cfg.username, this.cfg.password]
params.forEach((param) => parameters.push(param))
return await this.commonXmlrpcClient.methodCall(method, parameters, this.cfg.middlewareUrl)
this.cfg.blogid = "typecho"
}
}
export { TypechoApiAdaptor }
2 changes: 1 addition & 1 deletion src/adaptors/api/typecho/config/typechoConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class TypechoConfig extends MetaweblogConfig {
const { home, apiUrl } = TypechoUtils.parseHomeAndUrl(homeAddr)
this.home = home
this.apiUrl = apiUrl
this.previewUrl = "/?p=[postid]"
this.previewUrl = "/index.php/archives/[postid]"
this.pageType = PageTypeEnum.Markdown
}
}
Expand Down
20 changes: 18 additions & 2 deletions src/components/publish/PublishIndex.vue
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ const formData = reactive({
failBatchResults: <any[]>[],
dynList: <string[]>[],
actionEnable: true,
})
const handlePublish = async () => {
Expand All @@ -86,6 +87,8 @@ const handlePublish = async () => {
}
}
// 需要刷新才能继续操作,防止重复提交
formData.actionEnable = false
formData.showProcessResult = true
if (formData.errCount === 0) {
ElMessage.success("多平台文章分发成功")
Expand Down Expand Up @@ -140,6 +143,8 @@ const doDelete = async () => {
}
}
// 需要刷新才能继续操作,防止重复提交
formData.actionEnable = false
formData.showProcessResult = true
if (formData.errCount === 0) {
ElMessage.success("多平台文章删除成功")
Expand Down Expand Up @@ -185,6 +190,7 @@ onMounted(async () => {
</div>
<div v-for="errRet in formData.failBatchResults">
[{{ errRet.key }}] {{ StrUtil.isEmptyString(errRet.name) ? "" : `[${errRet.name}]` }} {{ errRet.errMsg }}
<a href="javascript:void(0)" @click="doSingleDelete(errRet.key, id)">强制解除关联</a>
</div>
<div v-if="formData.successBatchResults.length > 0" class="success-result success-tips">
已分发成功的结果如下:
Expand Down Expand Up @@ -220,10 +226,20 @@ onMounted(async () => {

<!-- 发布 -->
<el-form-item label-width="100px" class="form-action">
<el-button type="primary" :loading="formData.isPublishLoading" @click="handlePublish">
<el-button
type="primary"
:loading="formData.isPublishLoading"
@click="handlePublish"
:disabled="!formData.actionEnable"
>
{{ t("main.publish") }}
</el-button>
<el-button type="danger" :loading="formData.isDeleteLoading" @click="handleDelete">
<el-button
type="danger"
:loading="formData.isDeleteLoading"
@click="handleDelete"
:disabled="!formData.actionEnable"
>
{{ t("main.cancel") }}
</el-button>
</el-form-item>
Expand Down
14 changes: 7 additions & 7 deletions src/stores/common/commonStorage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,10 @@ class CommonStorage implements StorageLikeAsync {
this.logger.info(`Retrieving value for '${key}' from CommonStorage.`)
let ret
if (this.storageViaSiyuanApi) {
// 如果当前运行在思源笔记中,则直接返回 null
// 如果当前运行在思源笔记中
try {
ret = (await this.kernelApi.getFile(key, "text")) ?? ""
this.logger.debug(`Use SiYuan Api LocalStorageAdaptor to getItem - Retrieving '${key}', Value: ${ret}`)
// this.logger.debug(`Use SiYuan Api LocalStorageAdaptor to getItem - Retrieving '${key}', Value: ${ret}`)
} catch (error) {
this.logger.error(`Failed to get value for key '${key}' from SiYuan Api LocalStorageAdaptor. Error:`, error)
}
Expand All @@ -80,7 +80,7 @@ class CommonStorage implements StorageLikeAsync {
const win = SiyuanDevice.siyuanWindow()
const value = win.localStorage.getItem(key)
ret = value ?? ""
this.logger.debug(`Use Browser LocalStorageAdaptor to getItem - Retrieving '${key}', Value: ${ret}`)
// this.logger.debug(`Use Browser LocalStorageAdaptor to getItem - Retrieving '${key}', Value: ${ret}`)
} catch (error) {
this.logger.error(`Failed to get value for key '${key}' from Browser LocalStorageAdaptor. Error:`, error)
}
Expand All @@ -90,7 +90,7 @@ class CommonStorage implements StorageLikeAsync {
if (StrUtil.isEmptyString(ret)) {
ret = "{}"
}
this.logger.debug(`Final getItem - '${key}', Value: '${ret}'`)
// this.logger.debug(`Final getItem - '${key}', Value: '${ret}'`)
return ret
}

Expand All @@ -112,15 +112,15 @@ class CommonStorage implements StorageLikeAsync {
* @returns 一个 Promise,在设置值后解析。
*/
public async setItem(key: string, value: string): Promise<void> {
this.logger.debug(`Setting value for '${key}' in CommonStorage to '${value}'.`)
// this.logger.debug(`Setting value for '${key}' in CommonStorage to '${value}'.`)
if (this.storageViaSiyuanApi) {
// 如果当前运行在思源笔记中,则直接返回空字符串
await this.kernelApi.saveTextData(key, value)
this.logger.debug(`Use SiYuan Api LocalStorageAdaptor to setItem - Key '${key}', Value: '${value}'`)
this.logger.debug(`Use SiYuan Api LocalStorageAdaptor to setItem - Key '${key}'`)
} else {
const win = SiyuanDevice.siyuanWindow()
win.localStorage.setItem(key, value)
this.logger.debug(`Use Browser LocalStorageAdaptor to setItem - Key '${key}', Value: '${value}'`)
this.logger.debug(`Use Browser LocalStorageAdaptor to setItem - Key '${key}'`)
}
}
}
Expand Down

0 comments on commit 6cb0ddc

Please sign in to comment.