From efccca6e2c03d2affcc912ec657a2f0ea1822324 Mon Sep 17 00:00:00 2001 From: terwer Date: Fri, 11 Aug 2023 17:25:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E8=87=AA=E6=9C=89=E8=83=BD=E5=8A=9B=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E5=9B=BE=E7=89=87=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 6 +- pnpm-lock.yaml | 28 +++---- src/adaptors/api/base/CommonblogConfig.ts | 77 ------------------- src/adaptors/api/base/baseBlogApi.ts | 7 +- src/adaptors/api/base/commonBlogConfig.ts | 54 +++++++++++++ ...laceholder.ts => commonBlogPlaceholder.ts} | 2 +- ...piAdaptor.ts => commonGithubApiAdaptor.ts} | 2 +- ...nGithubConfig.ts => commonGithubConfig.ts} | 4 +- ...ceholder.ts => commonGithubPlaceholder.ts} | 4 +- ...BlogApi.ts => metaweblogBlogApiAdaptor.ts} | 25 +++--- ...etaweblogConfig.ts => metaweblogConfig.ts} | 6 +- ...laceholder.ts => metaweblogPlaceholder.ts} | 4 +- src/adaptors/api/cnblogs/cnblogsApiAdaptor.ts | 4 +- src/adaptors/api/cnblogs/cnblogsConfig.ts | 2 +- .../api/cnblogs/cnblogsPlaceholder.ts | 2 +- src/adaptors/api/hexo/hexoApiAdaptor.ts | 18 ++++- src/adaptors/api/hexo/hexoConfig.ts | 2 +- src/adaptors/api/hexo/hexoPlaceHolder.ts | 2 +- .../api/hexo/hexoYamlConverterAdaptor.ts | 8 +- .../api/metaweblog/metaweblogApiAdaptor.ts | 36 --------- .../api/metaweblog/useMetaweblogApi.ts | 6 +- src/adaptors/api/notion/notionConfig.ts | 4 +- src/adaptors/api/notion/notionPlaceHolder.ts | 4 +- src/adaptors/api/typecho/typechoApiAdaptor.ts | 4 +- src/adaptors/api/typecho/typechoConfig.ts | 2 +- .../api/typecho/typechoPlaceholder.ts | 2 +- src/adaptors/api/typecho/useTypechoApi.ts | 2 +- src/adaptors/api/wordpress/useWordpressApi.ts | 2 +- .../api/wordpress/wordpressApiAdaptor.ts | 4 +- src/adaptors/api/wordpress/wordpressConfig.ts | 2 +- .../api/wordpress/wordpressPlaceholder.ts | 2 +- src/adaptors/api/yuque/useYuqueApi.ts | 2 +- src/adaptors/api/yuque/yuqueConfig.ts | 4 +- src/adaptors/api/yuque/yuquePlaceHolder.ts | 4 +- src/adaptors/index.ts | 48 ++++++------ src/adaptors/web/base/baseWebApi.ts | 33 +++++++- ...{CommonWebConfig.ts => commonWebConfig.ts} | 2 +- ...Placeholder.ts => commonWebPlaceholder.ts} | 0 src/adaptors/web/csdn/csdnConfig.ts | 2 +- .../{JianshuConfig.ts => jianshuConfig.ts} | 2 +- src/adaptors/web/jianshu/useJianshuWeb.ts | 2 +- .../{JuejinConfig.ts => juejinConfig.ts} | 2 +- src/adaptors/web/juejin/useJuejinWeb.ts | 2 +- src/adaptors/web/wechat/useWechatWeb.ts | 2 +- .../{WechatConfig.ts => wechatConfig.ts} | 2 +- src/adaptors/web/wechat/wechatWebAdaptor.ts | 2 +- src/adaptors/web/zhihu/zhihuConfig.ts | 2 +- src/adaptors/web/zhihu/zhihuPlaceholder.ts | 2 +- src/adaptors/web/zhihu/zhihuWebAdaptor.ts | 68 +++++++++++----- .../publish/SinglePublishDoPublish.vue | 6 +- src/components/set/PublishSetting.vue | 8 +- src/components/set/preference/PostBind.vue | 2 +- .../singleplatform/base/CommonBlogSetting.vue | 12 +-- .../metaweblog/OthermetaSetting.vue | 4 +- src/components/test/CnblogsTest.vue | 2 +- src/components/test/HexoTest.vue | 2 +- src/components/test/HugoTest.vue | 2 +- src/components/test/SiyuanTest.vue | 2 +- src/components/test/VitepressTest.vue | 2 +- src/components/test/WordpressTest.vue | 2 +- src/components/test/YuqueTest.vue | 2 +- src/components/test/ZhihuTest.vue | 2 +- src/components/test/kmsTest.vue | 2 +- src/composables/usePicgoBridge.ts | 36 +++++++-- src/composables/usePublish.ts | 69 ++++++++--------- src/composables/usePublishConfig.spec.ts | 2 +- src/composables/usePublishConfig.ts | 27 ++++--- src/main.ts | 2 +- src/platforms/yamlConvertAdaptor.ts | 8 +- src/types/IPublishCfg.ts | 8 +- src/utils/luteUtil.ts | 2 +- src/utils/{VueUtils.ts => vueUtils.ts} | 0 72 files changed, 369 insertions(+), 343 deletions(-) delete mode 100644 src/adaptors/api/base/CommonblogConfig.ts create mode 100644 src/adaptors/api/base/commonBlogConfig.ts rename src/adaptors/api/base/{CommonblogPlaceholder.ts => commonBlogPlaceholder.ts} (95%) rename src/adaptors/api/base/github/{CommonGithubApiAdaptor.ts => commonGithubApiAdaptor.ts} (99%) rename src/adaptors/api/base/github/{CommonGithubConfig.ts => commonGithubConfig.ts} (96%) rename src/adaptors/api/base/github/{CommonGithubPlaceholder.ts => commonGithubPlaceholder.ts} (89%) rename src/adaptors/api/base/metaweblog/{metaweblogBlogApi.ts => metaweblogBlogApiAdaptor.ts} (92%) rename src/adaptors/api/base/metaweblog/{MetaweblogConfig.ts => metaweblogConfig.ts} (94%) rename src/adaptors/api/base/metaweblog/{MetaweblogPlaceholder.ts => metaweblogPlaceholder.ts} (88%) delete mode 100644 src/adaptors/api/metaweblog/metaweblogApiAdaptor.ts rename src/adaptors/web/base/{CommonWebConfig.ts => commonWebConfig.ts} (96%) rename src/adaptors/web/base/{CommonWebPlaceholder.ts => commonWebPlaceholder.ts} (100%) rename src/adaptors/web/jianshu/{JianshuConfig.ts => jianshuConfig.ts} (95%) rename src/adaptors/web/juejin/{JuejinConfig.ts => juejinConfig.ts} (95%) rename src/adaptors/web/wechat/{WechatConfig.ts => wechatConfig.ts} (95%) rename src/utils/{VueUtils.ts => vueUtils.ts} (100%) diff --git a/package.json b/package.json index a2937717..faf3b189 100644 --- a/package.json +++ b/package.json @@ -62,20 +62,20 @@ "shorthash2": "^1.0.3", "simple-xmlrpc": "^1.4.2", "siyuan": "^0.7.9", - "siyuan-plugin-picgo": "^1.2.0", + "siyuan-plugin-picgo": "^1.3.0", "uuid": "^9.0.0", "vue": "^3.3.4", "vue-i18n": "^9.2.2", "vue-router": "^4.2.4", "xmlbuilder2": "^3.1.1", - "zhi-blog-api": "^1.20.17", + "zhi-blog-api": "^1.20.21", "zhi-common": "^1.14.2", "zhi-device": "^2.3.0", "zhi-fetch-middleware": "^0.2.20", "zhi-github-middleware": "^0.2.2", "zhi-lib-base": "^0.4.4", "zhi-notion-markdown": "^0.1.2", - "zhi-siyuan-api": "^2.0.21", + "zhi-siyuan-api": "^2.0.26", "zhi-xmlrpc-middleware": "^0.4.15" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8ea6d029..58947bdc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,8 +39,8 @@ dependencies: specifier: ^0.7.9 version: 0.7.9 siyuan-plugin-picgo: - specifier: ^1.2.0 - version: 1.2.0(typescript@5.1.6) + specifier: ^1.3.0 + version: 1.3.0(typescript@5.1.6) uuid: specifier: ^9.0.0 version: 9.0.0 @@ -57,8 +57,8 @@ dependencies: specifier: ^3.1.1 version: 3.1.1 zhi-blog-api: - specifier: ^1.20.17 - version: 1.20.17 + specifier: ^1.20.21 + version: 1.20.21 zhi-common: specifier: ^1.14.2 version: 1.14.2 @@ -78,8 +78,8 @@ dependencies: specifier: ^0.1.2 version: 0.1.2 zhi-siyuan-api: - specifier: ^2.0.21 - version: 2.0.21 + specifier: ^2.0.26 + version: 2.0.26 zhi-xmlrpc-middleware: specifier: ^0.4.15 version: 0.4.15 @@ -6109,8 +6109,8 @@ packages: sax: 1.2.4 dev: false - /siyuan-plugin-picgo@1.2.0(typescript@5.1.6): - resolution: {integrity: sha512-FrEo8XbJeMS5XsD1BGdIqaNFGi2RcVcmMOif629ZBFNqyCPfsziQVgpfIlbFE5jWkPh5dWrO8ZnUR6BIVb9bBw==} + /siyuan-plugin-picgo@1.3.0(typescript@5.1.6): + resolution: {integrity: sha512-RY5if+gZ31QcddXIzfH+ECwRlceqVj7MucCmNIX2h3rZDrQApovqkVF//0a1GpzVUqdIlBv+8MPqgLwjbmd0qw==} dependencies: '@element-plus/icons-vue': 2.1.0(vue@3.3.4) '@fortawesome/fontawesome-svg-core': 6.4.2 @@ -6133,7 +6133,7 @@ packages: zhi-device: 2.3.0 zhi-fetch-middleware: 0.2.20 zhi-lib-base: 0.4.4 - zhi-siyuan-api: 2.0.21 + zhi-siyuan-api: 2.0.26 transitivePeerDependencies: - '@vue/composition-api' - typescript @@ -7323,8 +7323,8 @@ packages: engines: {node: '>=12.20'} dev: true - /zhi-blog-api@1.20.17: - resolution: {integrity: sha512-OnAEh0SHmkQvDPmfM1UBcvvXHk4fwUVgXb4w2F6bqO+RDye8B49VaPSwvLUyNI7MaHIFbIyE1yFcupJd3P3/uQ==} + /zhi-blog-api@1.20.21: + resolution: {integrity: sha512-0cDqukNxvIoAa8rK8qdh3rulAqH1qNH2cGSunK1vl3nbMVAAeCQVR4XiDXDMwxer68bjVY9z1HQDN2v2cjctog==} dependencies: zhi-lib-base: 0.4.4 dev: false @@ -7374,10 +7374,10 @@ packages: - supports-color dev: false - /zhi-siyuan-api@2.0.21: - resolution: {integrity: sha512-fGlvQ4Cb62DBY/8r2yMhZohgQOj0LHSp+/3OEIii4LZzN7+a7FBZawzaHSQo/e+Dpr8taZV3pEr0SBG7LyIDOA==} + /zhi-siyuan-api@2.0.26: + resolution: {integrity: sha512-2GbonTBOy6LytWcyWAw6ypZNol9iyvdyWZVe714MqIwtQQqkqIm8WS9Bh6cTSJVzx+oDOljuKCq3pVM3qwjAOg==} dependencies: - zhi-blog-api: 1.20.17 + zhi-blog-api: 1.20.21 zhi-common: 1.14.2 zhi-lib-base: 0.4.4 dev: false diff --git a/src/adaptors/api/base/CommonblogConfig.ts b/src/adaptors/api/base/CommonblogConfig.ts deleted file mode 100644 index fb61cb45..00000000 --- a/src/adaptors/api/base/CommonblogConfig.ts +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2023, Terwer . All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Terwer designates this - * particular file as subject to the "Classpath" exception as provided - * by Terwer in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com - * or visit www.terwer.space if you need additional information or have any - * questions. - */ - -import {BlogConfig, PageTypeEnum} from "zhi-blog-api" -import {CommonblogPlaceholder} from "~/src/adaptors/api/base/CommonblogPlaceholder.ts" - -/* - * Copyright (c) 2023, Terwer . All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Terwer designates this - * particular file as subject to the "Classpath" exception as provided - * by Terwer in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com - * or visit www.terwer.space if you need additional information or have any - * questions. - */ -export class CommonblogConfig extends BlogConfig { - /** - * 操作提示 - */ - public override placeholder = {} as CommonblogPlaceholder - - constructor(home: string, apiUrl: string, username: string, password: string, middlewareUrl?: string) { - super() - this.home = home - this.apiUrl = apiUrl - this.username = username - this.password = password - this.apiStatus = false - this.blogid = "" - this.blogName = "" - this.posidKey = "" - this.previewUrl = "" - this.pageType = PageTypeEnum.Markdown - this.middlewareUrl = middlewareUrl - this.usernameEnabled = false - this.allowPreviewUrlChange = true - this.showTokenTip = false - this.placeholder = new CommonblogPlaceholder() - } -} diff --git a/src/adaptors/api/base/baseBlogApi.ts b/src/adaptors/api/base/baseBlogApi.ts index f36c0cf9..8c835fc4 100644 --- a/src/adaptors/api/base/baseBlogApi.ts +++ b/src/adaptors/api/base/baseBlogApi.ts @@ -23,7 +23,7 @@ * questions. */ -import { BlogApi, BlogConfig } from "zhi-blog-api" +import { BlogApi, BlogConfig, Post } from "zhi-blog-api" import { SiyuanKernelApi } from "zhi-siyuan-api" import { CommonFetchClient } from "zhi-fetch-middleware" import { AppInstance } from "~/src/appInstance.ts" @@ -64,6 +64,11 @@ export class BaseBlogApi extends BlogApi { this.useSiyuanProxy = isUseSiyuanProxy() } + public async preEditPost(post: Post, id?: string, publishCfg?: any): Promise { + this.logger.info("未处理,原样返回。如需处理,请在子类重写") + return post + } + // ================ // private methods // ================ diff --git a/src/adaptors/api/base/commonBlogConfig.ts b/src/adaptors/api/base/commonBlogConfig.ts new file mode 100644 index 00000000..5512844d --- /dev/null +++ b/src/adaptors/api/base/commonBlogConfig.ts @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2023, Terwer . All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Terwer designates this + * particular file as subject to the "Classpath" exception as provided + * by Terwer in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com + * or visit www.terwer.space if you need additional information or have any + * questions. + */ + +import { BlogConfig, PageTypeEnum } from "zhi-blog-api" +import { CommonBlogPlaceholder } from "~/src/adaptors/api/base/commonBlogPlaceholder.ts" + +export class CommonBlogConfig extends BlogConfig { + + /** + * 操作提示 + */ + public override placeholder = {} as CommonBlogPlaceholder + + constructor(home: string, apiUrl: string, username: string, password: string, middlewareUrl?: string) { + super() + this.home = home + this.apiUrl = apiUrl + this.username = username + this.password = password + this.apiStatus = false + this.blogid = "" + this.blogName = "" + this.posidKey = "" + this.previewUrl = "" + this.pageType = PageTypeEnum.Markdown + this.middlewareUrl = middlewareUrl + this.usernameEnabled = false + this.allowPreviewUrlChange = true + this.showTokenTip = false + this.placeholder = new CommonBlogPlaceholder() + } +} diff --git a/src/adaptors/api/base/CommonblogPlaceholder.ts b/src/adaptors/api/base/commonBlogPlaceholder.ts similarity index 95% rename from src/adaptors/api/base/CommonblogPlaceholder.ts rename to src/adaptors/api/base/commonBlogPlaceholder.ts index 39f3f61d..05950125 100644 --- a/src/adaptors/api/base/CommonblogPlaceholder.ts +++ b/src/adaptors/api/base/commonBlogPlaceholder.ts @@ -28,4 +28,4 @@ import { BlogPlaceholder } from "zhi-blog-api" /** * Metaweblog 操作提示 */ -export class CommonblogPlaceholder extends BlogPlaceholder {} +export class CommonBlogPlaceholder extends BlogPlaceholder {} diff --git a/src/adaptors/api/base/github/CommonGithubApiAdaptor.ts b/src/adaptors/api/base/github/commonGithubApiAdaptor.ts similarity index 99% rename from src/adaptors/api/base/github/CommonGithubApiAdaptor.ts rename to src/adaptors/api/base/github/commonGithubApiAdaptor.ts index bd24e854..07c4294a 100644 --- a/src/adaptors/api/base/github/CommonGithubApiAdaptor.ts +++ b/src/adaptors/api/base/github/commonGithubApiAdaptor.ts @@ -27,7 +27,7 @@ import { BaseBlogApi } from "~/src/adaptors/api/base/baseBlogApi.ts" import { createAppLogger } from "~/src/utils/appLogger.ts" import { CategoryInfo, Post, UserBlog } from "zhi-blog-api" import { CommonGithubClient, GithubConfig } from "zhi-github-middleware" -import { CommonGithubConfig } from "~/src/adaptors/api/base/github/CommonGithubConfig.ts" +import { CommonGithubConfig } from "~/src/adaptors/api/base/github/commonGithubConfig.ts" import { StrUtil } from "zhi-common" import { toRaw } from "vue" import { Base64 } from "js-base64" diff --git a/src/adaptors/api/base/github/CommonGithubConfig.ts b/src/adaptors/api/base/github/commonGithubConfig.ts similarity index 96% rename from src/adaptors/api/base/github/CommonGithubConfig.ts rename to src/adaptors/api/base/github/commonGithubConfig.ts index 1d1cfb40..a760fe20 100644 --- a/src/adaptors/api/base/github/CommonGithubConfig.ts +++ b/src/adaptors/api/base/github/commonGithubConfig.ts @@ -24,12 +24,12 @@ */ import { PasswordType } from "zhi-blog-api" -import { CommonblogConfig } from "~/src/adaptors/api/base/CommonblogConfig.ts" +import { CommonBlogConfig } from "~/src/adaptors/api/base/commonBlogConfig.ts" /** * CommonGithubConfig 类用于存储 GitHub 相关配置信息 */ -class CommonGithubConfig extends CommonblogConfig { +class CommonGithubConfig extends CommonBlogConfig { /** * Github仓库名称 */ diff --git a/src/adaptors/api/base/github/CommonGithubPlaceholder.ts b/src/adaptors/api/base/github/commonGithubPlaceholder.ts similarity index 89% rename from src/adaptors/api/base/github/CommonGithubPlaceholder.ts rename to src/adaptors/api/base/github/commonGithubPlaceholder.ts index 93cb682f..064d9880 100644 --- a/src/adaptors/api/base/github/CommonGithubPlaceholder.ts +++ b/src/adaptors/api/base/github/commonGithubPlaceholder.ts @@ -23,11 +23,11 @@ * questions. */ -import { CommonblogPlaceholder } from "~/src/adaptors/api/base/CommonblogPlaceholder.ts" +import { CommonBlogPlaceholder } from "~/src/adaptors/api/base/commonBlogPlaceholder.ts" /** * Github 操作提示 */ -class CommonGithubPlaceholder extends CommonblogPlaceholder {} +class CommonGithubPlaceholder extends CommonBlogPlaceholder {} export { CommonGithubPlaceholder } diff --git a/src/adaptors/api/base/metaweblog/metaweblogBlogApi.ts b/src/adaptors/api/base/metaweblog/metaweblogBlogApiAdaptor.ts similarity index 92% rename from src/adaptors/api/base/metaweblog/metaweblogBlogApi.ts rename to src/adaptors/api/base/metaweblog/metaweblogBlogApiAdaptor.ts index 626ac2b0..90a89686 100644 --- a/src/adaptors/api/base/metaweblog/metaweblogBlogApi.ts +++ b/src/adaptors/api/base/metaweblog/metaweblogBlogApiAdaptor.ts @@ -23,26 +23,24 @@ * questions. */ -import { BlogApi, CategoryInfo, Post, PostStatusEnum, UserBlog } from "zhi-blog-api" -import { AppInstance } from "~/src/appInstance.ts" +import { CategoryInfo, Post, PostStatusEnum, UserBlog } from "zhi-blog-api" import { createAppLogger } from "~/src/utils/appLogger.ts" import { CommonXmlrpcClient } from "zhi-xmlrpc-middleware" -import { MetaweblogConfig } from "~/src/adaptors/api/base/metaweblog/MetaweblogConfig.ts" import { MetaweblogConstants } from "~/src/adaptors/api/base/metaweblog/metaweblogConstants.ts" import { StrUtil } from "zhi-common" import { BrowserUtil } from "zhi-device" +import { BaseBlogApi } from "~/src/adaptors/api/base/baseBlogApi.ts" +import { MetaweblogConfig } from "~/src/adaptors/api/base/metaweblog/metaweblogConfig.ts" /** - * MetaweblogBlogApi 类继承自 BlogApi 类,并为 Metaweblog API 提供了额外的功能 + * MetaweblogBlogApi 类继承自 BaseBlogApi 类,并为 Metaweblog API 提供了额外的功能 * * @author terwer * @version 0.9.0 * @since 0.9.0 */ -class MetaweblogBlogApi extends BlogApi { - protected readonly cfg: MetaweblogConfig - protected logger - private readonly commonXmlrpcClient +class MetaweblogBlogApiAdaptor extends BaseBlogApi { + private readonly commonXmlrpcClient: CommonXmlrpcClient /** * 初始化 metaweblog API 适配器 @@ -50,10 +48,9 @@ class MetaweblogBlogApi extends BlogApi { * @param appInstance 应用实例 * @param cfg 配置项 */ - constructor(appInstance: AppInstance, cfg: MetaweblogConfig) { - super() + constructor(appInstance: any, cfg: MetaweblogConfig) { + super(appInstance, cfg) - this.cfg = cfg this.cfg.blogid = "metaweblog" this.logger = createAppLogger("metaweblog-api-adaptor") this.commonXmlrpcClient = new CommonXmlrpcClient(appInstance, cfg.apiUrl) @@ -75,11 +72,11 @@ class MetaweblogBlogApi extends BlogApi { * * @param keyword */ - public override async getRecentPostsCount(keyword?: string): Promise { + public async getRecentPostsCount(keyword?: string): Promise { return 0 } - public override async getRecentPosts(numOfPosts: number): Promise { + public async getRecentPosts(numOfPosts: number): Promise { const result: Post[] = [] const blogPosts = await this.metaweblogCall(MetaweblogConstants.METHOD_GET_RECENT_POSTS, [ this.cfg.blogid, @@ -287,4 +284,4 @@ class MetaweblogBlogApi extends BlogApi { } } -export { MetaweblogBlogApi } +export { MetaweblogBlogApiAdaptor } diff --git a/src/adaptors/api/base/metaweblog/MetaweblogConfig.ts b/src/adaptors/api/base/metaweblog/metaweblogConfig.ts similarity index 94% rename from src/adaptors/api/base/metaweblog/MetaweblogConfig.ts rename to src/adaptors/api/base/metaweblog/metaweblogConfig.ts index e310d777..23a4677a 100644 --- a/src/adaptors/api/base/metaweblog/MetaweblogConfig.ts +++ b/src/adaptors/api/base/metaweblog/metaweblogConfig.ts @@ -24,13 +24,13 @@ */ import { PageTypeEnum } from "zhi-blog-api" -import { MetaweblogPlaceholder } from "~/src/adaptors/api/base/metaweblog/MetaweblogPlaceholder.ts" -import { CommonblogConfig } from "~/src/adaptors/api/base/CommonblogConfig.ts" +import { MetaweblogPlaceholder } from "~/src/adaptors/api/base/metaweblog/metaweblogPlaceholder.ts" +import { CommonBlogConfig } from "~/src/adaptors/api/base/commonBlogConfig.ts" /** * Metaweblog配置类 */ -export class MetaweblogConfig extends CommonblogConfig { +export class MetaweblogConfig extends CommonBlogConfig { /** * 首页 */ diff --git a/src/adaptors/api/base/metaweblog/MetaweblogPlaceholder.ts b/src/adaptors/api/base/metaweblog/metaweblogPlaceholder.ts similarity index 88% rename from src/adaptors/api/base/metaweblog/MetaweblogPlaceholder.ts rename to src/adaptors/api/base/metaweblog/metaweblogPlaceholder.ts index d0bb158c..644dafd5 100644 --- a/src/adaptors/api/base/metaweblog/MetaweblogPlaceholder.ts +++ b/src/adaptors/api/base/metaweblog/metaweblogPlaceholder.ts @@ -23,9 +23,9 @@ * questions. */ -import { CommonblogPlaceholder } from "~/src/adaptors/api/base/CommonblogPlaceholder.ts" +import { CommonBlogPlaceholder } from "~/src/adaptors/api/base/commonBlogPlaceholder.ts" /** * Metaweblog 操作提示 */ -export class MetaweblogPlaceholder extends CommonblogPlaceholder {} +export class MetaweblogPlaceholder extends CommonBlogPlaceholder {} diff --git a/src/adaptors/api/cnblogs/cnblogsApiAdaptor.ts b/src/adaptors/api/cnblogs/cnblogsApiAdaptor.ts index 8593017a..71e811e3 100644 --- a/src/adaptors/api/cnblogs/cnblogsApiAdaptor.ts +++ b/src/adaptors/api/cnblogs/cnblogsApiAdaptor.ts @@ -28,7 +28,7 @@ import { CnblogsConfig } from "~/src/adaptors/api/cnblogs/cnblogsConfig.ts" 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 { MetaweblogBlogApiAdaptor } from "~/src/adaptors/api/base/metaweblog/metaweblogBlogApiAdaptor.ts" /** * 博客园 API 适配器 @@ -39,7 +39,7 @@ import { MetaweblogBlogApi } from "~/src/adaptors/api/base/metaweblog/metaweblog * @version 0.9.0 * @since 0.9.0 */ -class CnblogsApiAdaptor extends MetaweblogBlogApi { +class CnblogsApiAdaptor extends MetaweblogBlogApiAdaptor { /** * 初始化博客园 API 适配器 * diff --git a/src/adaptors/api/cnblogs/cnblogsConfig.ts b/src/adaptors/api/cnblogs/cnblogsConfig.ts index 88271cec..8c6738ad 100644 --- a/src/adaptors/api/cnblogs/cnblogsConfig.ts +++ b/src/adaptors/api/cnblogs/cnblogsConfig.ts @@ -24,7 +24,7 @@ */ import { PageTypeEnum, PasswordType } from "zhi-blog-api" -import { MetaweblogConfig } from "~/src/adaptors/api/base/metaweblog/MetaweblogConfig.ts" +import { MetaweblogConfig } from "~/src/adaptors/api/base/metaweblog/metaweblogConfig.ts" /** * 博客园配置 diff --git a/src/adaptors/api/cnblogs/cnblogsPlaceholder.ts b/src/adaptors/api/cnblogs/cnblogsPlaceholder.ts index a4376458..8932583c 100644 --- a/src/adaptors/api/cnblogs/cnblogsPlaceholder.ts +++ b/src/adaptors/api/cnblogs/cnblogsPlaceholder.ts @@ -23,7 +23,7 @@ * questions. */ -import { MetaweblogPlaceholder } from "~/src/adaptors/api/base/metaweblog/MetaweblogPlaceholder.ts" +import { MetaweblogPlaceholder } from "~/src/adaptors/api/base/metaweblog/metaweblogPlaceholder.ts" /** * 博客园操作提示 diff --git a/src/adaptors/api/hexo/hexoApiAdaptor.ts b/src/adaptors/api/hexo/hexoApiAdaptor.ts index e942bc8c..90efb087 100644 --- a/src/adaptors/api/hexo/hexoApiAdaptor.ts +++ b/src/adaptors/api/hexo/hexoApiAdaptor.ts @@ -23,7 +23,12 @@ * questions. */ -import { CommonGithubApiAdaptor } from "~/src/adaptors/api/base/github/CommonGithubApiAdaptor.ts" +import { CommonGithubApiAdaptor } from "~/src/adaptors/api/base/github/commonGithubApiAdaptor.ts" +import { Post } from "zhi-blog-api" +import { CommonGithubConfig } from "~/src/adaptors/api/base/github/commonGithubConfig.ts" +import { YamlConvertAdaptor } from "~/src/platforms/yamlConvertAdaptor.ts" +import { YamlFormatObj } from "~/src/models/yamlFormatObj.ts" +import { HexoYamlConverterAdaptor } from "~/src/adaptors/api/hexo/hexoYamlConverterAdaptor.ts" /** * Hexo API 适配器 @@ -32,6 +37,15 @@ import { CommonGithubApiAdaptor } from "~/src/adaptors/api/base/github/CommonGit * @version 1.3.2 * @since 0.8.1 */ -class HexoApiAdaptor extends CommonGithubApiAdaptor {} +class HexoApiAdaptor extends CommonGithubApiAdaptor { + public async preEditPost(post: Post, dynCfg: any): Promise { + const cfg = this.cfg as CommonGithubConfig + const yamlApi: YamlConvertAdaptor = new HexoYamlConverterAdaptor() + const yamlObj: YamlFormatObj = yamlApi.convertToYaml(post, cfg) + post.description = yamlObj.mdFullContent + this.logger.info("handled yaml using HexoYamlConverterAdaptor") + return post + } +} export { HexoApiAdaptor } diff --git a/src/adaptors/api/hexo/hexoConfig.ts b/src/adaptors/api/hexo/hexoConfig.ts index 542c6060..a15dc172 100644 --- a/src/adaptors/api/hexo/hexoConfig.ts +++ b/src/adaptors/api/hexo/hexoConfig.ts @@ -23,7 +23,7 @@ * questions. */ -import { CommonGithubConfig } from "~/src/adaptors/api/base/github/CommonGithubConfig.ts" +import { CommonGithubConfig } from "~/src/adaptors/api/base/github/commonGithubConfig.ts" import { PageTypeEnum, PasswordType } from "zhi-blog-api" /** diff --git a/src/adaptors/api/hexo/hexoPlaceHolder.ts b/src/adaptors/api/hexo/hexoPlaceHolder.ts index 4111540c..dcc85f90 100644 --- a/src/adaptors/api/hexo/hexoPlaceHolder.ts +++ b/src/adaptors/api/hexo/hexoPlaceHolder.ts @@ -23,7 +23,7 @@ * questions. */ -import { CommonGithubPlaceholder } from "~/src/adaptors/api/base/github/CommonGithubPlaceholder.ts" +import { CommonGithubPlaceholder } from "~/src/adaptors/api/base/github/commonGithubPlaceholder.ts" class HexoPlaceHolder extends CommonGithubPlaceholder {} diff --git a/src/adaptors/api/hexo/hexoYamlConverterAdaptor.ts b/src/adaptors/api/hexo/hexoYamlConverterAdaptor.ts index f879d83c..9465cc97 100644 --- a/src/adaptors/api/hexo/hexoYamlConverterAdaptor.ts +++ b/src/adaptors/api/hexo/hexoYamlConverterAdaptor.ts @@ -27,9 +27,9 @@ import { YamlConvertAdaptor } from "~/src/platforms/yamlConvertAdaptor.ts" import { createAppLogger } from "~/src/utils/appLogger.ts" import { YamlFormatObj } from "~/src/models/yamlFormatObj.ts" import { Post } from "zhi-blog-api" -import { CommonblogConfig } from "~/src/adaptors/api/base/CommonblogConfig.ts" +import { CommonBlogConfig } from "~/src/adaptors/api/base/commonBlogConfig.ts" import { DateUtil, StrUtil, YamlUtil } from "zhi-common" -import { CommonGithubConfig } from "~/src/adaptors/api/base/github/CommonGithubConfig.ts" +import { CommonGithubConfig } from "~/src/adaptors/api/base/github/commonGithubConfig.ts" /** * Hexo平台的YAML解析器 @@ -40,7 +40,7 @@ import { CommonGithubConfig } from "~/src/adaptors/api/base/github/CommonGithubC export class HexoYamlConverterAdaptor extends YamlConvertAdaptor { private readonly logger = createAppLogger("hexo-yaml-converter-adaptor") - convertToYaml(post: Post, cfg?: CommonblogConfig): YamlFormatObj { + convertToYaml(post: Post, cfg?: CommonBlogConfig): YamlFormatObj { let yamlFormatObj: YamlFormatObj = new YamlFormatObj() this.logger.debug("您正在使用 Hexo Yaml Converter", post) @@ -108,7 +108,7 @@ export class HexoYamlConverterAdaptor extends YamlConvertAdaptor { return yamlFormatObj } - convertToAttr(yamlFormatObj: YamlFormatObj, cfg?: CommonblogConfig): Post { + convertToAttr(yamlFormatObj: YamlFormatObj, cfg?: CommonBlogConfig): Post { return super.convertToAttr(yamlFormatObj, cfg) } } diff --git a/src/adaptors/api/metaweblog/metaweblogApiAdaptor.ts b/src/adaptors/api/metaweblog/metaweblogApiAdaptor.ts deleted file mode 100644 index f997a7b9..00000000 --- a/src/adaptors/api/metaweblog/metaweblogApiAdaptor.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2023, Terwer . All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Terwer designates this - * particular file as subject to the "Classpath" exception as provided - * by Terwer in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Terwer, Shenzhen, Guangdong, China, youweics@163.com - * or visit www.terwer.space if you need additional information or have any - * questions. - */ - -import { MetaweblogBlogApi } from "~/src/adaptors/api/base/metaweblog/metaweblogBlogApi.ts" - -/** - * Metaweblog API 适配器 - * - * @author terwer - * @version 0.9.0 - * @since 0.9.0 - */ -class MetaweblogApiAdaptor extends MetaweblogBlogApi {} -export { MetaweblogApiAdaptor } diff --git a/src/adaptors/api/metaweblog/useMetaweblogApi.ts b/src/adaptors/api/metaweblog/useMetaweblogApi.ts index 9e4205bc..a4f62db2 100644 --- a/src/adaptors/api/metaweblog/useMetaweblogApi.ts +++ b/src/adaptors/api/metaweblog/useMetaweblogApi.ts @@ -23,14 +23,14 @@ * questions. */ -import { MetaweblogConfig } from "~/src/adaptors/api/base/metaweblog/MetaweblogConfig.ts" +import { MetaweblogConfig } from "~/src/adaptors/api/base/metaweblog/metaweblogConfig.ts" import { createAppLogger } from "~/src/utils/appLogger.ts" import { AppInstance } from "~/src/appInstance.ts" import { useSettingStore } from "~/src/stores/useSettingStore.ts" import { JsonUtil, ObjectUtil, StrUtil } from "zhi-common" import { Utils } from "~/src/utils/utils.ts" import { getDynPostidKey } from "~/src/platforms/dynamicConfig.ts" -import { MetaweblogApiAdaptor } from "~/src/adaptors/api/metaweblog/metaweblogApiAdaptor.ts" +import { MetaweblogBlogApiAdaptor } from "~/src/adaptors/api/base/metaweblog/metaweblogBlogApiAdaptor.ts" /** * 使用Metaweblog API的自定义hook @@ -84,7 +84,7 @@ export const useMetaweblogApi = async (key?: string, newCfg?: MetaweblogConfig) } // 创建Metaweblog API适配器 - const blogApi = new MetaweblogApiAdaptor(appInstance, cfg) + const blogApi = new MetaweblogBlogApiAdaptor(appInstance, cfg) // 记录Metaweblog API创建成功 logger.info("Metaweblog API created successfully.") diff --git a/src/adaptors/api/notion/notionConfig.ts b/src/adaptors/api/notion/notionConfig.ts index 42c878b6..153e1df6 100644 --- a/src/adaptors/api/notion/notionConfig.ts +++ b/src/adaptors/api/notion/notionConfig.ts @@ -24,12 +24,12 @@ */ import { PageTypeEnum, PasswordType } from "zhi-blog-api" -import { CommonblogConfig } from "~/src/adaptors/api/base/CommonblogConfig.ts" +import { CommonBlogConfig } from "~/src/adaptors/api/base/commonBlogConfig.ts" /** * Notion 配置 */ -class NotionConfig extends CommonblogConfig { +class NotionConfig extends CommonBlogConfig { constructor(password: string, middlewareUrl?: string) { super("https://www.notion.so/", "https://api.notion.com/v1", "", password, middlewareUrl) diff --git a/src/adaptors/api/notion/notionPlaceHolder.ts b/src/adaptors/api/notion/notionPlaceHolder.ts index 505469b7..254d675d 100644 --- a/src/adaptors/api/notion/notionPlaceHolder.ts +++ b/src/adaptors/api/notion/notionPlaceHolder.ts @@ -23,11 +23,11 @@ * questions. */ -import { CommonblogPlaceholder } from "~/src/adaptors/api/base/CommonblogPlaceholder.ts" +import { CommonBlogPlaceholder } from "~/src/adaptors/api/base/commonBlogPlaceholder.ts" /** * Notion 配置提示 */ -class NotionPlaceHolder extends CommonblogPlaceholder {} +class NotionPlaceHolder extends CommonBlogPlaceholder {} export { NotionPlaceHolder } diff --git a/src/adaptors/api/typecho/typechoApiAdaptor.ts b/src/adaptors/api/typecho/typechoApiAdaptor.ts index 3fb9fcfd..6db206c3 100644 --- a/src/adaptors/api/typecho/typechoApiAdaptor.ts +++ b/src/adaptors/api/typecho/typechoApiAdaptor.ts @@ -26,7 +26,7 @@ import { AppInstance } from "~/src/appInstance.ts" import { createAppLogger } from "~/src/utils/appLogger.ts" import { TypechoConfig } from "~/src/adaptors/api/typecho/typechoConfig.ts" -import { MetaweblogBlogApi } from "~/src/adaptors/api/base/metaweblog/metaweblogBlogApi.ts" +import { MetaweblogBlogApiAdaptor } from "~/src/adaptors/api/base/metaweblog/metaweblogBlogApiAdaptor.ts" /** * Typecho API 适配器 @@ -35,7 +35,7 @@ import { MetaweblogBlogApi } from "~/src/adaptors/api/base/metaweblog/metaweblog * @version 0.9.0 * @since 0.9.0 */ -class TypechoApiAdaptor extends MetaweblogBlogApi { +class TypechoApiAdaptor extends MetaweblogBlogApiAdaptor { /** * 初始化 Typecho API 适配器 * diff --git a/src/adaptors/api/typecho/typechoConfig.ts b/src/adaptors/api/typecho/typechoConfig.ts index 7c1a563f..669f3f5a 100644 --- a/src/adaptors/api/typecho/typechoConfig.ts +++ b/src/adaptors/api/typecho/typechoConfig.ts @@ -25,7 +25,7 @@ import { PageTypeEnum } from "zhi-blog-api" import TypechoUtils from "~/src/adaptors/api/typecho/typechoUtils.ts" -import { MetaweblogConfig } from "~/src/adaptors/api/base/metaweblog/MetaweblogConfig.ts" +import { MetaweblogConfig } from "~/src/adaptors/api/base/metaweblog/metaweblogConfig.ts" /** * Typecho 配置 diff --git a/src/adaptors/api/typecho/typechoPlaceholder.ts b/src/adaptors/api/typecho/typechoPlaceholder.ts index f5759586..0394dea8 100644 --- a/src/adaptors/api/typecho/typechoPlaceholder.ts +++ b/src/adaptors/api/typecho/typechoPlaceholder.ts @@ -23,7 +23,7 @@ * questions. */ -import { MetaweblogPlaceholder } from "~/src/adaptors/api/base/metaweblog/MetaweblogPlaceholder.ts" +import { MetaweblogPlaceholder } from "~/src/adaptors/api/base/metaweblog/metaweblogPlaceholder.ts" /** * WordPress 操作提示 diff --git a/src/adaptors/api/typecho/useTypechoApi.ts b/src/adaptors/api/typecho/useTypechoApi.ts index a53dde6f..3a49b8b7 100644 --- a/src/adaptors/api/typecho/useTypechoApi.ts +++ b/src/adaptors/api/typecho/useTypechoApi.ts @@ -28,7 +28,7 @@ import { AppInstance } from "~/src/appInstance.ts" import { Utils } from "~/src/utils/utils.ts" import { useSettingStore } from "~/src/stores/useSettingStore.ts" import { TypechoConfig } from "~/src/adaptors/api/typecho/typechoConfig.ts" -import {JsonUtil, ObjectUtil, StrUtil} from "zhi-common" +import { JsonUtil, ObjectUtil, StrUtil } from "zhi-common" import { getDynPostidKey } from "~/src/platforms/dynamicConfig.ts" import { TypechoApiAdaptor } from "~/src/adaptors/api/typecho/typechoApiAdaptor.ts" diff --git a/src/adaptors/api/wordpress/useWordpressApi.ts b/src/adaptors/api/wordpress/useWordpressApi.ts index 4cc1a845..314dbbfe 100644 --- a/src/adaptors/api/wordpress/useWordpressApi.ts +++ b/src/adaptors/api/wordpress/useWordpressApi.ts @@ -27,7 +27,7 @@ import { createAppLogger } from "~/src/utils/appLogger.ts" import { AppInstance } from "~/src/appInstance.ts" import { Utils } from "~/src/utils/utils.ts" import { useSettingStore } from "~/src/stores/useSettingStore.ts" -import {JsonUtil, ObjectUtil, StrUtil} from "zhi-common" +import { JsonUtil, ObjectUtil, StrUtil } from "zhi-common" import { WordpressConfig } from "~/src/adaptors/api/wordpress/wordpressConfig.ts" import { WordpressApiAdaptor } from "~/src/adaptors/api/wordpress/wordpressApiAdaptor.ts" import { getDynPostidKey } from "~/src/platforms/dynamicConfig.ts" diff --git a/src/adaptors/api/wordpress/wordpressApiAdaptor.ts b/src/adaptors/api/wordpress/wordpressApiAdaptor.ts index 1b07fad3..1902118e 100644 --- a/src/adaptors/api/wordpress/wordpressApiAdaptor.ts +++ b/src/adaptors/api/wordpress/wordpressApiAdaptor.ts @@ -26,7 +26,7 @@ import { WordpressConfig } from "~/src/adaptors/api/wordpress/wordpressConfig.ts" import { AppInstance } from "~/src/appInstance.ts" import { createAppLogger } from "~/src/utils/appLogger.ts" -import { MetaweblogBlogApi } from "~/src/adaptors/api/base/metaweblog/metaweblogBlogApi.ts" +import { MetaweblogBlogApiAdaptor } from "~/src/adaptors/api/base/metaweblog/metaweblogBlogApiAdaptor.ts" /** * WordPress API 适配器 @@ -35,7 +35,7 @@ import { MetaweblogBlogApi } from "~/src/adaptors/api/base/metaweblog/metaweblog * @version 0.9.0 * @since 0.9.0 */ -class WordpressApiAdaptor extends MetaweblogBlogApi { +class WordpressApiAdaptor extends MetaweblogBlogApiAdaptor { /** * 初始化 WordPress API 适配器 * diff --git a/src/adaptors/api/wordpress/wordpressConfig.ts b/src/adaptors/api/wordpress/wordpressConfig.ts index 1e90ee78..2479de68 100644 --- a/src/adaptors/api/wordpress/wordpressConfig.ts +++ b/src/adaptors/api/wordpress/wordpressConfig.ts @@ -23,7 +23,7 @@ * questions. */ -import { MetaweblogConfig } from "~/src/adaptors/api/base/metaweblog/MetaweblogConfig.ts" +import { MetaweblogConfig } from "~/src/adaptors/api/base/metaweblog/metaweblogConfig.ts" import { PageTypeEnum } from "zhi-blog-api" import WordpressUtils from "~/src/adaptors/api/wordpress/wordpressUtils.ts" diff --git a/src/adaptors/api/wordpress/wordpressPlaceholder.ts b/src/adaptors/api/wordpress/wordpressPlaceholder.ts index d779221b..0cd45daa 100644 --- a/src/adaptors/api/wordpress/wordpressPlaceholder.ts +++ b/src/adaptors/api/wordpress/wordpressPlaceholder.ts @@ -23,7 +23,7 @@ * questions. */ -import { MetaweblogPlaceholder } from "~/src/adaptors/api/base/metaweblog/MetaweblogPlaceholder.ts" +import { MetaweblogPlaceholder } from "~/src/adaptors/api/base/metaweblog/metaweblogPlaceholder.ts" /** * WordPress 操作提示 diff --git a/src/adaptors/api/yuque/useYuqueApi.ts b/src/adaptors/api/yuque/useYuqueApi.ts index 21795a29..1f5c6970 100644 --- a/src/adaptors/api/yuque/useYuqueApi.ts +++ b/src/adaptors/api/yuque/useYuqueApi.ts @@ -28,7 +28,7 @@ import { AppInstance } from "~/src/appInstance.ts" import { Utils } from "~/src/utils/utils.ts" import { YuqueConfig } from "~/src/adaptors/api/yuque/yuqueConfig.ts" import { useSettingStore } from "~/src/stores/useSettingStore.ts" -import {JsonUtil, ObjectUtil, StrUtil} from "zhi-common" +import { JsonUtil, ObjectUtil, StrUtil } from "zhi-common" import { getDynPostidKey } from "~/src/platforms/dynamicConfig.ts" import { YuqueApiAdaptor } from "~/src/adaptors/api/yuque/yuqueApiAdaptor.ts" diff --git a/src/adaptors/api/yuque/yuqueConfig.ts b/src/adaptors/api/yuque/yuqueConfig.ts index 6c5112a6..22601ddc 100644 --- a/src/adaptors/api/yuque/yuqueConfig.ts +++ b/src/adaptors/api/yuque/yuqueConfig.ts @@ -24,12 +24,12 @@ */ import { PageTypeEnum, PasswordType } from "zhi-blog-api" -import { CommonblogConfig } from "~/src/adaptors/api/base/CommonblogConfig.ts" +import { CommonBlogConfig } from "~/src/adaptors/api/base/commonBlogConfig.ts" /** * Yuque 配置 */ -class YuqueConfig extends CommonblogConfig { +class YuqueConfig extends CommonBlogConfig { constructor(username: string, password: string, middlewareUrl?: string) { super("https://www.yuque.com/", "https://www.yuque.com/api/v2", username, password, middlewareUrl) diff --git a/src/adaptors/api/yuque/yuquePlaceHolder.ts b/src/adaptors/api/yuque/yuquePlaceHolder.ts index 57fe9910..b370f49e 100644 --- a/src/adaptors/api/yuque/yuquePlaceHolder.ts +++ b/src/adaptors/api/yuque/yuquePlaceHolder.ts @@ -23,11 +23,11 @@ * questions. */ -import { CommonblogPlaceholder } from "~/src/adaptors/api/base/CommonblogPlaceholder.ts" +import { CommonBlogPlaceholder } from "~/src/adaptors/api/base/commonBlogPlaceholder.ts" /** * Yuque 配置提示 */ -class YuquePlaceHolder extends CommonblogPlaceholder {} +class YuquePlaceHolder extends CommonBlogPlaceholder {} export { YuquePlaceHolder } diff --git a/src/adaptors/index.ts b/src/adaptors/index.ts index 7257c607..32c4da97 100644 --- a/src/adaptors/index.ts +++ b/src/adaptors/index.ts @@ -34,7 +34,6 @@ import { useZhihuWeb } from "~/src/adaptors/web/zhihu/useZhihuWeb.ts" import { useSiyuanApi } from "~/src/composables/useSiyuanApi.ts" import { useMetaweblogApi } from "~/src/adaptors/api/metaweblog/useMetaweblogApi.ts" import { useNotionApi } from "~/src/adaptors/api/notion/useNotionApi.ts" -import { YamlConvertAdaptor } from "~/src/platforms/yamlConvertAdaptor.ts" import { useHexoApi } from "~/src/adaptors/api/hexo/useHexoApi.ts" /** @@ -214,29 +213,30 @@ class Adaptors { return blogAdaptor } - /** - * 根据平台key查找YAML适配器 - * - * @param key - * @param newCfg - */ - public static async getYamlAdaptor(key: string, newCfg?: any): Promise { - let yamlAdp = null - const type: SubPlatformType = getSubPlatformTypeByKey(key) - - switch (type) { - case SubPlatformType.Github_Hexo: { - const { yamlAdaptor } = await useHexoApi(key, newCfg) - yamlAdp = yamlAdaptor - break - } - default: { - break - } - } - this.logger.debug(`get yamlAdaptor from key ${key}=>`, yamlAdp) - return yamlAdp - } + // 新增 preEditPost , 此方法不再需要 + // /** + // * 根据平台key查找YAML适配器 + // * + // * @param key + // * @param newCfg + // */ + // public static async getYamlAdaptor(key: string, newCfg?: any): Promise { + // let yamlAdp = null + // const type: SubPlatformType = getSubPlatformTypeByKey(key) + // + // switch (type) { + // case SubPlatformType.Github_Hexo: { + // const { yamlAdaptor } = await useHexoApi(key, newCfg) + // yamlAdp = yamlAdaptor + // break + // } + // default: { + // break + // } + // } + // this.logger.debug(`get yamlAdaptor from key ${key}=>`, yamlAdp) + // return yamlAdp + // } } export default Adaptors diff --git a/src/adaptors/web/base/baseWebApi.ts b/src/adaptors/web/base/baseWebApi.ts index e3c21de6..29799d46 100644 --- a/src/adaptors/web/base/baseWebApi.ts +++ b/src/adaptors/web/base/baseWebApi.ts @@ -22,7 +22,7 @@ * or visit www.terwer.space if you need additional information or have any * questions. */ -import { ElectronCookie, Post, WebApi, WebConfig } from "zhi-blog-api" +import { Attachment, ElectronCookie, MediaObject, Post, WebApi, WebConfig } from "zhi-blog-api" import { SiyuanKernelApi } from "zhi-siyuan-api" import { CommonFetchClient } from "zhi-fetch-middleware" import { AppInstance } from "~/src/appInstance.ts" @@ -73,6 +73,11 @@ class BaseWebApi extends WebApi { return cookies.map((cookie) => `${cookie.name}=${cookie.value}`).join(";") } + public async preEditPost(post: Post, id?: string, publishCfg?: any): Promise { + this.logger.info("未处理,原样返回。如需处理,请在子类重写") + return post + } + // 兼容的方法 public async newPost(post: Post, publish?: boolean): Promise { const res = await this.addPost(post) @@ -82,6 +87,32 @@ class BaseWebApi extends WebApi { return res.post_id } + public async newMediaObject(mediaObject: MediaObject, customHandler?: any): Promise { + const bits = mediaObject.bits + const res = await this.uploadFile(bits as any) + return { + attachment_id: res?.id, + date_created_gmt: new Date(), + parent: 0, + link: res?.url, + title: "20220616-132401-001.jpg", + caption: "", + description: "", + metadata: { + width: 0, + height: 0, + file: "", + filesize: 113032, + sizes: [], + }, + type: "image/jpeg", + thumbnail: "https://terwergreen.files.wordpress.com/2022/06/20220616-132401-001.jpg?w=150", + id: "4108", + file: "20220616-132401-001.jpg", + url: "http://terwergreen.files.wordpress.com/2022/06/20220616-132401-001.jpg", + } + } + // ================ // private methods // ================ diff --git a/src/adaptors/web/base/CommonWebConfig.ts b/src/adaptors/web/base/commonWebConfig.ts similarity index 96% rename from src/adaptors/web/base/CommonWebConfig.ts rename to src/adaptors/web/base/commonWebConfig.ts index fb6ce23f..3d172ebf 100644 --- a/src/adaptors/web/base/CommonWebConfig.ts +++ b/src/adaptors/web/base/commonWebConfig.ts @@ -24,7 +24,7 @@ */ import { PageTypeEnum, WebConfig } from "zhi-blog-api" -import { CommonWebPlaceholder } from "~/src/adaptors/web/base/CommonWebPlaceholder.ts" +import { CommonWebPlaceholder } from "~/src/adaptors/web/base/commonWebPlaceholder.ts" /** * 网页授权配置 diff --git a/src/adaptors/web/base/CommonWebPlaceholder.ts b/src/adaptors/web/base/commonWebPlaceholder.ts similarity index 100% rename from src/adaptors/web/base/CommonWebPlaceholder.ts rename to src/adaptors/web/base/commonWebPlaceholder.ts diff --git a/src/adaptors/web/csdn/csdnConfig.ts b/src/adaptors/web/csdn/csdnConfig.ts index cb797113..0a994850 100644 --- a/src/adaptors/web/csdn/csdnConfig.ts +++ b/src/adaptors/web/csdn/csdnConfig.ts @@ -23,7 +23,7 @@ * questions. */ -import { CommonWebConfig } from "~/src/adaptors/web/base/CommonWebConfig.ts" +import { CommonWebConfig } from "~/src/adaptors/web/base/commonWebConfig.ts" /** * CSDN配置 diff --git a/src/adaptors/web/jianshu/JianshuConfig.ts b/src/adaptors/web/jianshu/jianshuConfig.ts similarity index 95% rename from src/adaptors/web/jianshu/JianshuConfig.ts rename to src/adaptors/web/jianshu/jianshuConfig.ts index 2d1f1db7..638c3b5d 100644 --- a/src/adaptors/web/jianshu/JianshuConfig.ts +++ b/src/adaptors/web/jianshu/jianshuConfig.ts @@ -23,7 +23,7 @@ * questions. */ -import { CommonWebConfig } from "~/src/adaptors/web/base/CommonWebConfig.ts" +import { CommonWebConfig } from "~/src/adaptors/web/base/commonWebConfig.ts" /** * 简书配置 diff --git a/src/adaptors/web/jianshu/useJianshuWeb.ts b/src/adaptors/web/jianshu/useJianshuWeb.ts index 8363704d..5c8fb0cf 100644 --- a/src/adaptors/web/jianshu/useJianshuWeb.ts +++ b/src/adaptors/web/jianshu/useJianshuWeb.ts @@ -23,7 +23,7 @@ * questions. */ -import { JianshuConfig } from "~/src/adaptors/web/jianshu/JianshuConfig.ts" +import { JianshuConfig } from "~/src/adaptors/web/jianshu/jianshuConfig.ts" import { createAppLogger } from "~/src/utils/appLogger.ts" import { AppInstance } from "~/src/appInstance.ts" import { useSettingStore } from "~/src/stores/useSettingStore.ts" diff --git a/src/adaptors/web/juejin/JuejinConfig.ts b/src/adaptors/web/juejin/juejinConfig.ts similarity index 95% rename from src/adaptors/web/juejin/JuejinConfig.ts rename to src/adaptors/web/juejin/juejinConfig.ts index 807d25a9..f1aa48d8 100644 --- a/src/adaptors/web/juejin/JuejinConfig.ts +++ b/src/adaptors/web/juejin/juejinConfig.ts @@ -23,7 +23,7 @@ * questions. */ -import { CommonWebConfig } from "~/src/adaptors/web/base/CommonWebConfig.ts" +import { CommonWebConfig } from "~/src/adaptors/web/base/commonWebConfig.ts" /** * 掘金配置 diff --git a/src/adaptors/web/juejin/useJuejinWeb.ts b/src/adaptors/web/juejin/useJuejinWeb.ts index 0cbb8cb2..72e2f764 100644 --- a/src/adaptors/web/juejin/useJuejinWeb.ts +++ b/src/adaptors/web/juejin/useJuejinWeb.ts @@ -23,7 +23,7 @@ * questions. */ -import { JuejinConfig } from "~/src/adaptors/web/juejin/JuejinConfig.ts" +import { JuejinConfig } from "~/src/adaptors/web/juejin/juejinConfig.ts" import { createAppLogger } from "~/src/utils/appLogger.ts" import { AppInstance } from "~/src/appInstance.ts" import { useSettingStore } from "~/src/stores/useSettingStore.ts" diff --git a/src/adaptors/web/wechat/useWechatWeb.ts b/src/adaptors/web/wechat/useWechatWeb.ts index 426ff623..b7db38de 100644 --- a/src/adaptors/web/wechat/useWechatWeb.ts +++ b/src/adaptors/web/wechat/useWechatWeb.ts @@ -23,7 +23,7 @@ * questions. */ -import { WechatConfig } from "~/src/adaptors/web/wechat/WechatConfig.ts" +import { WechatConfig } from "~/src/adaptors/web/wechat/wechatConfig.ts" import { AppInstance } from "~/src/appInstance.ts" import { createAppLogger } from "~/src/utils/appLogger.ts" import { useSettingStore } from "~/src/stores/useSettingStore.ts" diff --git a/src/adaptors/web/wechat/WechatConfig.ts b/src/adaptors/web/wechat/wechatConfig.ts similarity index 95% rename from src/adaptors/web/wechat/WechatConfig.ts rename to src/adaptors/web/wechat/wechatConfig.ts index bc84e81b..332f3f7b 100644 --- a/src/adaptors/web/wechat/WechatConfig.ts +++ b/src/adaptors/web/wechat/wechatConfig.ts @@ -23,7 +23,7 @@ * questions. */ -import { CommonWebConfig } from "~/src/adaptors/web/base/CommonWebConfig.ts" +import { CommonWebConfig } from "~/src/adaptors/web/base/commonWebConfig.ts" /** * 微信公众号配置 diff --git a/src/adaptors/web/wechat/wechatWebAdaptor.ts b/src/adaptors/web/wechat/wechatWebAdaptor.ts index c4c1ed81..4e6ca7ca 100644 --- a/src/adaptors/web/wechat/wechatWebAdaptor.ts +++ b/src/adaptors/web/wechat/wechatWebAdaptor.ts @@ -23,7 +23,7 @@ * questions. */ -import {BaseWebApi} from "~/src/adaptors/web/base/baseWebApi.ts"; +import { BaseWebApi } from "~/src/adaptors/web/base/baseWebApi.ts" /** * 掘金网页授权适配器 diff --git a/src/adaptors/web/zhihu/zhihuConfig.ts b/src/adaptors/web/zhihu/zhihuConfig.ts index f47a5800..89fdfb7c 100644 --- a/src/adaptors/web/zhihu/zhihuConfig.ts +++ b/src/adaptors/web/zhihu/zhihuConfig.ts @@ -23,7 +23,7 @@ * questions. */ -import { CommonWebConfig } from "~/src/adaptors/web/base/CommonWebConfig.ts" +import { CommonWebConfig } from "~/src/adaptors/web/base/commonWebConfig.ts" import { PageTypeEnum, PasswordType } from "zhi-blog-api" /** diff --git a/src/adaptors/web/zhihu/zhihuPlaceholder.ts b/src/adaptors/web/zhihu/zhihuPlaceholder.ts index 3b768556..06aee182 100644 --- a/src/adaptors/web/zhihu/zhihuPlaceholder.ts +++ b/src/adaptors/web/zhihu/zhihuPlaceholder.ts @@ -23,7 +23,7 @@ * questions. */ -import { CommonWebPlaceholder } from "~/src/adaptors/web/base/CommonWebPlaceholder.ts" +import { CommonWebPlaceholder } from "~/src/adaptors/web/base/commonWebPlaceholder.ts" class ZhihuPlaceholder extends CommonWebPlaceholder {} diff --git a/src/adaptors/web/zhihu/zhihuWebAdaptor.ts b/src/adaptors/web/zhihu/zhihuWebAdaptor.ts index 73caee56..f7a83621 100644 --- a/src/adaptors/web/zhihu/zhihuWebAdaptor.ts +++ b/src/adaptors/web/zhihu/zhihuWebAdaptor.ts @@ -24,9 +24,10 @@ */ import { BaseWebApi } from "~/src/adaptors/web/base/baseWebApi.ts" -import { Post, UserBlog } from "zhi-blog-api" +import { MediaObject, Post, UserBlog } from "zhi-blog-api" import * as cheerio from "cheerio" import { JsonUtil, StrUtil } from "zhi-common" +import { usePicgoBridge } from "~/src/composables/usePicgoBridge.ts" /** * 知乎网页授权适配器 @@ -95,6 +96,24 @@ class ZhihuWebAdaptor extends BaseWebApi { return result } + public async preEditPost(post: Post, dynCfg: any): Promise { + // 找到所有的图片 + const { getImageItemsFromMd } = usePicgoBridge() + const images = await getImageItemsFromMd(post.postid, post.markdown) + if (images.length === 0) { + this.logger.info("未找到图片,不处理") + return post + } + // 批量处理图片上传 + this.logger.info(`找到${images.length}张图片,开始上传`) + const file = null + const mediaObject = new MediaObject("20220616-132401-001.jpg", "image/jpeg", file) + this.newMediaObject(mediaObject) + throw new Error("开发中") + this.logger.info("图片全部上传完成") + return post + } + public async addPost(post: Post) { const params = JSON.stringify({ title: post.title, @@ -175,6 +194,31 @@ class ZhihuWebAdaptor extends BaseWebApi { return true } + public async getPreviewUrl(postid: string): Promise { + return `https://zhuanlan.zhihu.com/p/${postid}` + } + + public async deletePost(postid: string): Promise { + let flag = false + try { + const res = await this.proxyFetch(`https://www.zhihu.com/api/v4/articles/${postid}`, [], {}, "DELETE") + this.logger.debug("delete zhihu article res=>", res) + if (res.success) { + flag = true + } else { + throw new Error(res.error.message) + } + } catch (e) { + this.logger.error("知乎文章删除失败", e) + throw e + } + + return flag + } + + // ================ + // private methods + // ================ /** * 收录文章到专栏 * @@ -197,26 +241,8 @@ class ZhihuWebAdaptor extends BaseWebApi { this.logger.info("文章收录到专栏成功") } - public async getPreviewUrl(postid: string): Promise { - return `https://zhuanlan.zhihu.com/p/${postid}` - } - - public async deletePost(postid: string): Promise { - let flag = false - try { - const res = await this.proxyFetch(`https://www.zhihu.com/api/v4/articles/${postid}`, [], {}, "DELETE") - this.logger.debug("delete zhihu article res=>", res) - if (res.success) { - flag = true - } else { - throw new Error(res.error.message) - } - } catch (e) { - this.logger.error("知乎文章删除失败", e) - throw e - } - - return flag + public async uploadFile(file: File): Promise { + return await super.uploadFile(file) } } diff --git a/src/components/publish/SinglePublishDoPublish.vue b/src/components/publish/SinglePublishDoPublish.vue index 204a185a..098f634c 100644 --- a/src/components/publish/SinglePublishDoPublish.vue +++ b/src/components/publish/SinglePublishDoPublish.vue @@ -112,7 +112,7 @@ const handlePublish = async () => { formData.actionEnable = true } catch (e) { ElMessage.error(e.message) - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) } finally { formData.isPublishLoading = false } @@ -162,7 +162,7 @@ const doDelete = async () => { } } catch (e) { ElMessage.error(e.message) - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) } finally { formData.isDeleteLoading = false } @@ -224,7 +224,7 @@ const initPage = async () => { refreshChangeTips() } catch (e) { const errMsg = t("main.opt.failure") + "=>" + e - logger.error(errMsg) + logger.error(t("main.opt.failure") + "=>", e) await kernelApi.pushErrMsg({ msg: errMsg, timeout: 7000, diff --git a/src/components/set/PublishSetting.vue b/src/components/set/PublishSetting.vue index 3aebf286..f099cdf3 100644 --- a/src/components/set/PublishSetting.vue +++ b/src/components/set/PublishSetting.vue @@ -52,7 +52,7 @@ import { AppInstance } from "~/src/appInstance.ts" import { ElectronCookie, WebConfig } from "zhi-blog-api" import { useSiyuanDevice } from "~/src/composables/useSiyuanDevice.ts" import CookieSetting from "~/src/components/set/publish/singleplatform/base/CookieSetting.vue" -import { CommonWebConfig } from "~/src/adaptors/web/base/CommonWebConfig.ts" +import { CommonWebConfig } from "~/src/adaptors/web/base/commonWebConfig.ts" const logger = createAppLogger("publish-setting") @@ -295,7 +295,7 @@ const _handleValidateOpenBrowserAuth = (dynCfg: DynamicConfig) => { } catch (e) { dynCfg.isAuth = false ElMessage.error(t("main.opt.failure") + "=>" + e) - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) } formData.dynamicConfigArray = replacePlatformByKey(formData.dynamicConfigArray, dynCfg.platformKey, dynCfg) @@ -338,7 +338,7 @@ const _handleValidateChromeExtensionAuth = async (dynCfg: DynamicConfig) => { } catch (e) { dynCfg.isAuth = false ElMessage.error(t("main.opt.failure") + "=>" + e) - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) } formData.dynamicConfigArray = replacePlatformByKey(formData.dynamicConfigArray, dynCfg.platformKey, dynCfg) @@ -411,7 +411,7 @@ const handleCheckAndUpgrade = async () => { } catch (e) { formData.logMessage += `\n${t("setting.upgrade.syp.tip4")}` + e ElMessage.error(t("main.opt.failure") + "=>" + e) - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) } formData.logMessage += `\n${t("setting.upgrade.syp.tip5")}` formData.isUpgradeLoading = false diff --git a/src/components/set/preference/PostBind.vue b/src/components/set/preference/PostBind.vue index c33b60d4..a861b650 100644 --- a/src/components/set/preference/PostBind.vue +++ b/src/components/set/preference/PostBind.vue @@ -79,7 +79,7 @@ const submitForm = async (formEl: any) => { await updateSetting(setting) ElMessage.success(t("main.opt.success")) } catch (e) { - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) ElMessage.error(t("main.opt.failure") + "=>" + e) } } diff --git a/src/components/set/publish/singleplatform/base/CommonBlogSetting.vue b/src/components/set/publish/singleplatform/base/CommonBlogSetting.vue index 9deb53bc..7c118510 100644 --- a/src/components/set/publish/singleplatform/base/CommonBlogSetting.vue +++ b/src/components/set/publish/singleplatform/base/CommonBlogSetting.vue @@ -31,7 +31,7 @@ import { useSettingStore } from "~/src/stores/useSettingStore.ts" import { onMounted, reactive, ref, toRaw } from "vue" import { DynamicConfig, DynamicJsonCfg, getDynCfgByKey, setDynamicJsonCfg } from "~/src/platforms/dynamicConfig.ts" import { SypConfig } from "~/syp.config.ts" -import { CommonblogConfig } from "~/src/adaptors/api/base/CommonblogConfig.ts" +import { CommonBlogConfig } from "~/src/adaptors/api/base/commonBlogConfig.ts" import { JsonUtil, ObjectUtil, StrUtil } from "zhi-common" import { DYNAMIC_CONFIG_KEY } from "~/src/utils/constants.ts" import { PageTypeEnum, PasswordType } from "zhi-blog-api" @@ -86,7 +86,7 @@ const getSettingTips = (bid?: string) => { // datas const isLoading = ref(false) const formData = reactive({ - cfg: {} as CommonblogConfig, + cfg: {} as CommonBlogConfig, settingTips: "", kwSpaces: [], @@ -139,11 +139,11 @@ const valiConf = async () => { } catch (e) { formData.cfg.apiStatus = false errMsg = e - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) } if (!formData.cfg.apiStatus) { - logger.error(errMsg.toString(), "") + logger.error(errMsg.toString()) ElMessage.error(t("setting.blog.vali.error") + "=>" + errMsg) } else { ElMessage.success(t("main.opt.success")) @@ -209,11 +209,11 @@ const initConf = async () => { formData.dynCfg = getDynCfgByKey(formData.dynamicConfigArray, props.apiType) logger.debug("Commonblog通用Setting配置初始化") - let conf = props.cfg as CommonblogConfig + let conf = props.cfg as CommonBlogConfig // 如果没有配置。读取默认配置 if (ObjectUtil.isEmptyObject(conf)) { const apiConf = formData.setting[props.apiType] - conf = JsonUtil.safeParse(apiConf, {} as CommonblogConfig) + conf = JsonUtil.safeParse(apiConf, {} as CommonBlogConfig) } if (conf) { diff --git a/src/components/set/publish/singleplatform/metaweblog/OthermetaSetting.vue b/src/components/set/publish/singleplatform/metaweblog/OthermetaSetting.vue index b0995ba7..cda930dc 100644 --- a/src/components/set/publish/singleplatform/metaweblog/OthermetaSetting.vue +++ b/src/components/set/publish/singleplatform/metaweblog/OthermetaSetting.vue @@ -2,8 +2,8 @@ import { useVueI18n } from "~/src/composables/useVueI18n.ts" import { useMetaweblogApi } from "~/src/adaptors/api/metaweblog/useMetaweblogApi.ts" import MetaweblogSetting from "~/src/components/set/publish/singleplatform/base/impl/MetaweblogSetting.vue" -import { MetaweblogConfig } from "~/src/adaptors/api/base/metaweblog/MetaweblogConfig.ts" -import { MetaweblogPlaceholder } from "~/src/adaptors/api/base/metaweblog/MetaweblogPlaceholder.ts" +import { MetaweblogConfig } from "~/src/adaptors/api/base/metaweblog/metaweblogConfig.ts" +import { MetaweblogPlaceholder } from "~/src/adaptors/api/base/metaweblog/metaweblogPlaceholder.ts" const props = defineProps({ apiType: { diff --git a/src/components/test/CnblogsTest.vue b/src/components/test/CnblogsTest.vue index 5bb363b7..443e2aba 100644 --- a/src/components/test/CnblogsTest.vue +++ b/src/components/test/CnblogsTest.vue @@ -323,7 +323,7 @@ const cnblogsHandleApi = async () => { isLoading.value = false } catch (e) { logMessage.value = e - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) isLoading.value = false } } diff --git a/src/components/test/HexoTest.vue b/src/components/test/HexoTest.vue index bdf203e8..4b7fdb9b 100644 --- a/src/components/test/HexoTest.vue +++ b/src/components/test/HexoTest.vue @@ -248,7 +248,7 @@ const wordpressHandleApi = async () => { isLoading.value = false } catch (e) { logMessage.value = e - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) isLoading.value = false } } diff --git a/src/components/test/HugoTest.vue b/src/components/test/HugoTest.vue index 0f8bee24..d0721026 100644 --- a/src/components/test/HugoTest.vue +++ b/src/components/test/HugoTest.vue @@ -248,7 +248,7 @@ const wordpressHandleApi = async () => { isLoading.value = false } catch (e) { logMessage.value = e - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) isLoading.value = false } } diff --git a/src/components/test/SiyuanTest.vue b/src/components/test/SiyuanTest.vue index bdeb9707..94ea777c 100644 --- a/src/components/test/SiyuanTest.vue +++ b/src/components/test/SiyuanTest.vue @@ -324,7 +324,7 @@ const siyuanHandleApi = async () => { isLoading.value = false } catch (e) { logMessage.value = e - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) isLoading.value = false } } diff --git a/src/components/test/VitepressTest.vue b/src/components/test/VitepressTest.vue index 4c2ec904..d3062bfc 100644 --- a/src/components/test/VitepressTest.vue +++ b/src/components/test/VitepressTest.vue @@ -248,7 +248,7 @@ const wordpressHandleApi = async () => { isLoading.value = false } catch (e) { logMessage.value = e - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) isLoading.value = false } } diff --git a/src/components/test/WordpressTest.vue b/src/components/test/WordpressTest.vue index b6746127..44db7e50 100644 --- a/src/components/test/WordpressTest.vue +++ b/src/components/test/WordpressTest.vue @@ -255,7 +255,7 @@ const wordpressHandleApi = async () => { isLoading.value = false } catch (e) { logMessage.value = e - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) isLoading.value = false } } diff --git a/src/components/test/YuqueTest.vue b/src/components/test/YuqueTest.vue index 9e6cbf79..7df06b21 100644 --- a/src/components/test/YuqueTest.vue +++ b/src/components/test/YuqueTest.vue @@ -253,7 +253,7 @@ const yuqueHandleApi = async () => { isLoading.value = false } catch (e) { logMessage.value = e - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) isLoading.value = false } } diff --git a/src/components/test/ZhihuTest.vue b/src/components/test/ZhihuTest.vue index b98ea395..e4d074f7 100644 --- a/src/components/test/ZhihuTest.vue +++ b/src/components/test/ZhihuTest.vue @@ -97,7 +97,7 @@ const zhihuHandleApi = async () => { isLoading.value = false } catch (e) { logMessage.value = e - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) isLoading.value = false } } diff --git a/src/components/test/kmsTest.vue b/src/components/test/kmsTest.vue index 3ea2d3c5..8b58c69c 100644 --- a/src/components/test/kmsTest.vue +++ b/src/components/test/kmsTest.vue @@ -271,7 +271,7 @@ const kmsHandleApi = async () => { isLoading.value = false } catch (e) { logMessage.value = e - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) isLoading.value = false } } diff --git a/src/composables/usePicgoBridge.ts b/src/composables/usePicgoBridge.ts index b4804bf8..35e90a92 100644 --- a/src/composables/usePicgoBridge.ts +++ b/src/composables/usePicgoBridge.ts @@ -23,11 +23,10 @@ * questions. */ -import { PicgoPostApi } from "siyuan-plugin-picgo" +import { ImageParser, ParsedImage, PicgoPostApi } from "siyuan-plugin-picgo" import { useSiyuanApi } from "~/src/composables/useSiyuanApi.ts" import { ElMessage } from "element-plus" import { createAppLogger } from "~/src/utils/appLogger.ts" -import { useVueI18n } from "~/src/composables/useVueI18n.ts" import { StrUtil } from "zhi-common" /** @@ -38,7 +37,6 @@ import { StrUtil } from "zhi-common" */ const usePicgoBridge = () => { const logger = createAppLogger("use-picgo-bridge") - const { t } = useVueI18n() const { kernelApi, blogApi } = useSiyuanApi() const picgoPostApi = new PicgoPostApi(kernelApi) @@ -50,6 +48,7 @@ const usePicgoBridge = () => { */ const handlePicgo = async (pageId: string, mdContent?: string) => { let md: string = mdContent + const picgoErrMsg = "文档可能已经成功发布,但是图片上传失败或者当前场景不支持图片上传,详细信息=>" try { const attrs = await kernelApi.getBlockAttrs(pageId) @@ -70,22 +69,43 @@ const usePicgoBridge = () => { if (picgoPostResult.flag) { md = picgoPostResult.mdContent } else { - logger.warn(t("github.post.picgo.picbed.error") + "=>" + picgoPostResult.errmsg) - ElMessage.warning(t("github.post.picgo.picbed.error") + "=>" + picgoPostResult.errmsg) + logger.warn(picgoErrMsg + picgoPostResult.errmsg) + ElMessage.warning(picgoErrMsg + picgoPostResult.errmsg) } } else { - logger.info(t("github.post.picgo.picbed.error") + "=>" + picgoPostResult.errmsg) + logger.info(picgoErrMsg + picgoPostResult.errmsg) } } catch (e) { - logger.error(t("github.post.picgo.picbed.error") + "=>", e) - ElMessage.error(t("github.post.picgo.picbed.error") + "=>" + e) + logger.error(picgoErrMsg, e) + ElMessage.error("文档可能已经成功发布,但是图片上传失败或者当前场景不支持图片上传,详细信息=>" + e) } return md } + /** + * 从 Markdown 中提取图片项 + * + * @param pageId - 思源笔记的文档ID + * @param md - Markdown字符串 + * @returns 解析后的图片数组 + */ + const getImageItemsFromMd = async (pageId: string, md: string): Promise => { + const imageParser = new ImageParser() + let retImgs: ParsedImage[] = [] + const parsedImages = imageParser.parseImagesToArray(md) + retImgs = [...new Set([...retImgs, ...parsedImages])] + logger.debug("retImgs=>", retImgs) + + const attrs = await kernelApi.getBlockAttrs(pageId) + const imageItemArray = await picgoPostApi.doConvertImagesToImagesItemArray(attrs, retImgs) + logger.debug("imageItemArray=>", imageItemArray) + return imageItemArray + } + return { handlePicgo, + getImageItemsFromMd, } } diff --git a/src/composables/usePublish.ts b/src/composables/usePublish.ts index 726294cd..fb0194e9 100644 --- a/src/composables/usePublish.ts +++ b/src/composables/usePublish.ts @@ -34,11 +34,9 @@ import { useSiyuanApi } from "~/src/composables/useSiyuanApi.ts" import { pre } from "~/src/utils/import/pre.ts" import { MethodEnum } from "~/src/models/methodEnum.ts" import { DynamicConfig } from "~/src/platforms/dynamicConfig.ts" -import { CommonblogConfig } from "~/src/adaptors/api/base/CommonblogConfig.ts" +import { CommonBlogConfig } from "~/src/adaptors/api/base/commonBlogConfig.ts" import { IPublishCfg } from "~/src/types/IPublishCfg.ts" import { usePublishConfig } from "~/src/composables/usePublishConfig.ts" -import { YamlConvertAdaptor } from "~/src/platforms/yamlConvertAdaptor.ts" -import { YamlFormatObj } from "~/src/models/yamlFormatObj.ts" import { ElMessage } from "element-plus" import { usePicgoBridge } from "~/src/composables/usePicgoBridge.ts" import { LuteUtil } from "~/src/utils/luteUtil.ts" @@ -55,9 +53,9 @@ const usePublish = () => { // uses const { t } = useVueI18n() - const { getSetting, updateSetting } = useSettingStore() + const { updateSetting } = useSettingStore() const { kernelApi, blogApi } = useSiyuanApi() - const { getPublishApi, getYamlApi } = usePublishConfig() + const { getPublishApi } = usePublishConfig() const { handlePicgo } = usePicgoBridge() // datas @@ -78,7 +76,7 @@ const usePublish = () => { */ const doSinglePublish = async (key: string, id: string, publishCfg: IPublishCfg, doc: Post) => { const setting: typeof SypConfig = publishCfg.setting - const cfg: CommonblogConfig = publishCfg.cfg + const cfg: CommonBlogConfig = publishCfg.cfg const dynCfg: DynamicConfig = publishCfg.dynCfg // vars @@ -112,23 +110,14 @@ const usePublish = () => { // 文章处理开始 // =================================== - // 分配属性 + // 分配文章属性 - 初始化和发布都会调用 post = await assignAttrs(post, id, publishCfg) - // 全局的预处理 + // 全局正文预处理 - 仅在发布的时候调用 logger.debug(`before preHandlePost, isAdd ${singleFormData.isAdd}, doc=>`, toRaw(post)) post = await preHandlePost(post, id, publishCfg) - logger.debug(`after preHandlePost, doc=>`, toRaw(post)) - - // 平台相关的预处理 - const yamlApi: YamlConvertAdaptor = await getYamlApi(key, cfg) - if (yamlApi instanceof YamlConvertAdaptor) { - const yamlObj: YamlFormatObj = yamlApi.convertToYaml(post, cfg) - post.description = yamlObj.mdFullContent - logger.info("handled yaml using YamlConvertAdaptor") - } else { - logger.info("yaml adaptor not found, ignore convert") - } + logger.debug(`after preHandlePost, post=>`, toRaw(post)) + // =================================== // 文章处理结束 // =================================== @@ -136,6 +125,19 @@ const usePublish = () => { // 初始化API const api = await getPublishApi(key, cfg) + // 平台相关的预处理 - 仅在发布的时候调用 + logger.debug(`before preEditPost, isAdd ${singleFormData.isAdd}, post=>`, toRaw(post)) + post = await api.preEditPost(post, dynCfg) + logger.debug(`after preEditPost, post=>`, toRaw(post)) + + // 发布格式 + if (cfg?.pageType == PageTypeEnum.Markdown) { + post.description = post.markdown + } else { + post.description = post.html + } + logger.debug("文章全部预处理完毕,最终结果", { post }) + // 处理发布:新增 或者 更新 if (singleFormData.isAdd) { logger.info("文章未发布,准备发布") @@ -174,7 +176,7 @@ const usePublish = () => { singleFormData.publishProcessStatus = true } catch (e) { singleFormData.errMsg = t("main.opt.failure") + "=>" + e - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) await kernelApi.pushErrMsg({ msg: singleFormData.errMsg, timeout: 7000, @@ -200,7 +202,7 @@ const usePublish = () => { */ const doSingleDelete = async (key: string, id: string, publishCfg: IPublishCfg) => { const setting: typeof SypConfig = publishCfg.setting - const cfg: CommonblogConfig = publishCfg.cfg + const cfg: CommonBlogConfig = publishCfg.cfg const dynCfg: DynamicConfig = publishCfg.dynCfg try { @@ -239,7 +241,7 @@ const usePublish = () => { } } catch (e) { singleFormData.errMsg = t("main.opt.failure") + "=>" + e - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) // ElMessage.error(singleFormData.errMsg) await kernelApi.pushErrMsg({ msg: singleFormData.errMsg, @@ -264,7 +266,7 @@ const usePublish = () => { const doForceSingleDelete = async (key: string, id: string, publishCfg: IPublishCfg) => { try { const setting: typeof SypConfig = publishCfg.setting - const cfg: CommonblogConfig = publishCfg.cfg + const cfg: CommonBlogConfig = publishCfg.cfg const dynCfg: DynamicConfig = publishCfg.dynCfg // 检测是否发布 @@ -295,7 +297,7 @@ const usePublish = () => { } } catch (e) { ElMessage.error(t("main.opt.failure") + "=>" + e) - logger.error(e) + logger.error(t("main.opt.failure") + "=>", e) await kernelApi.pushErrMsg({ msg: t("main.opt.failure") + "=>" + e, timeout: 7000, @@ -303,7 +305,7 @@ const usePublish = () => { } } - const getPostPreviewUrl = async (api: BlogAdaptor, postid: string, cfg: CommonblogConfig) => { + const getPostPreviewUrl = async (api: BlogAdaptor, postid: string, cfg: CommonBlogConfig) => { const previewUrl = await api.getPreviewUrl(postid) const isAbsoluteUrl = /^http/.test(previewUrl) return isAbsoluteUrl ? previewUrl : `${cfg?.home ?? ""}${previewUrl}` @@ -317,24 +319,15 @@ const usePublish = () => { * @param publishCfg - 发布配置 */ const preHandlePost = async (post: Post, id: string, publishCfg: IPublishCfg): Promise => { - const cfg: CommonblogConfig = publishCfg.cfg + const cfg: CommonBlogConfig = publishCfg.cfg // 图片替换 logger.debug("开始图片处理, post =>", { post }) post.markdown = await handlePicgo(id, post.markdown) // 利用 lute 把 md 转换成 html post.html = LuteUtil.mdToHtml(post.markdown) - logger.debug("图片处理完毕, post.markdown =>", post.markdown) - - // 平台特定的图片上传 - // 例如知乎不支持链接,需要自行上传 + logger.debug("图片处理完毕, post.markdown =>", { md: post.markdown }) - // 发布格式 - if (cfg?.pageType == PageTypeEnum.Markdown) { - post.description = post.markdown - } else { - post.description = post.html - } return post } @@ -349,7 +342,7 @@ const usePublish = () => { */ const assignAttrs = async (post: Post, id: string, publishCfg: IPublishCfg) => { const setting: typeof SypConfig = publishCfg.setting - const cfg: CommonblogConfig = publishCfg.cfg + const cfg: CommonBlogConfig = publishCfg.cfg const dynCfg: DynamicConfig = publishCfg.dynCfg const postMeta = ObjectUtil.getProperty(setting, id, {}) @@ -378,7 +371,7 @@ const usePublish = () => { publishCfg: IPublishCfg ) => { const setting: typeof SypConfig = publishCfg.setting - const cfg: CommonblogConfig = publishCfg.cfg + const cfg: CommonBlogConfig = publishCfg.cfg const dynCfg: DynamicConfig = publishCfg.dynCfg // 检测是否发布 diff --git a/src/composables/usePublishConfig.spec.ts b/src/composables/usePublishConfig.spec.ts index 1d92f7b5..fd71c7c4 100644 --- a/src/composables/usePublishConfig.spec.ts +++ b/src/composables/usePublishConfig.spec.ts @@ -27,7 +27,7 @@ import { beforeEach, describe, it } from "vitest" import { usePublishConfig } from "~/src/composables/usePublishConfig.ts" import { config, mount } from "@vue/test-utils" import App from "~/src/App.vue" -import { createVueApp } from "~/src/utils/VueUtils.ts" +import { createVueApp } from "~/src/utils/vueUtils.ts" import { InjectKeys } from "~/src/utils/injectKeys.ts" describe("test usePublishConfig", async () => { diff --git a/src/composables/usePublishConfig.ts b/src/composables/usePublishConfig.ts index 436fc243..1baf7b77 100644 --- a/src/composables/usePublishConfig.ts +++ b/src/composables/usePublishConfig.ts @@ -32,7 +32,7 @@ import { useSettingStore } from "~/src/stores/useSettingStore.ts" import { DynamicJsonCfg, getDynCfgByKey } from "~/src/platforms/dynamicConfig.ts" import { DYNAMIC_CONFIG_KEY } from "~/src/utils/constants.ts" import { BlogAdaptor, WebAdaptor } from "zhi-blog-api" -import { CommonblogConfig } from "~/src/adaptors/api/base/CommonblogConfig.ts" +import { CommonBlogConfig } from "~/src/adaptors/api/base/commonBlogConfig.ts" /** * 获取发布配置的自定义钩子 @@ -86,29 +86,28 @@ const usePublishConfig = () => { * @param cfg - 可选的配置项 * @returns Promise - 返回一个 Promise 对象,包含 BlogAdaptor 或 WebAdaptor */ - const getPublishApi = async (key: string, cfg?: CommonblogConfig): Promise => { + const getPublishApi = async (key: string, cfg?: CommonBlogConfig): Promise => { // 初始化API const apiAdaptor = await Adaptors.getAdaptor(key, cfg) const api = Utils.blogApi(appInstance, apiAdaptor) return api } - /** - * 获取YAML API - * - * @param key - 平台配置的键值 - * @param newCfg - 可选参数,用于指定新的配置 - * @returns 返回一个Promise,包含YAML适配器 - */ - const getYamlApi = async (key: string, newCfg?: any) => { - const yamlAdaptor = await Adaptors.getYamlAdaptor(key, newCfg) - return yamlAdaptor - } + // /** + // * 获取YAML API + // * + // * @param key - 平台配置的键值 + // * @param newCfg - 可选参数,用于指定新的配置 + // * @returns 返回一个Promise,包含YAML适配器 + // */ + // const getYamlApi = async (key: string, newCfg?: any) => { + // const yamlAdaptor = await Adaptors.getYamlAdaptor(key, newCfg) + // return yamlAdaptor + // } return { getPublishCfg, getPublishApi, - getYamlApi, } } diff --git a/src/main.ts b/src/main.ts index 8498a76f..c779ceec 100644 --- a/src/main.ts +++ b/src/main.ts @@ -23,7 +23,7 @@ * questions. */ -import { createVueApp } from "./utils/VueUtils" +import { createVueApp } from "./utils/vueUtils" import { InjectKeys } from "./utils/injectKeys" import { createAppLogger } from "./utils/appLogger" diff --git a/src/platforms/yamlConvertAdaptor.ts b/src/platforms/yamlConvertAdaptor.ts index 3531c3d3..bc1f290c 100644 --- a/src/platforms/yamlConvertAdaptor.ts +++ b/src/platforms/yamlConvertAdaptor.ts @@ -24,9 +24,9 @@ */ import { YamlFormatObj } from "~/src/models/yamlFormatObj.ts" -import { CommonGithubConfig } from "~/src/adaptors/api/base/github/CommonGithubConfig.ts" +import { CommonGithubConfig } from "~/src/adaptors/api/base/github/commonGithubConfig.ts" import { Post } from "zhi-blog-api" -import { CommonblogConfig } from "~/src/adaptors/api/base/CommonblogConfig.ts" +import { CommonBlogConfig } from "~/src/adaptors/api/base/commonBlogConfig.ts" export interface IYamlConvertAdaptor { convertToYaml(post: Post, githubCfg?: CommonGithubConfig): YamlFormatObj @@ -38,11 +38,11 @@ export interface IYamlConvertAdaptor { * YAML转换适配器 */ export class YamlConvertAdaptor implements IYamlConvertAdaptor { - convertToYaml(post: Post, cfg?: CommonblogConfig): YamlFormatObj { + convertToYaml(post: Post, cfg?: CommonBlogConfig): YamlFormatObj { throw new Error("YamlConvertAdaptor.convertToYaml: 该功能未实现,请在子类重写该方法") } - convertToAttr(yamlFormatObj: YamlFormatObj, cfg?: CommonblogConfig): Post { + convertToAttr(yamlFormatObj: YamlFormatObj, cfg?: CommonBlogConfig): Post { throw new Error("YamlConvertAdaptor.convertToAttr: 该功能未实现,请在子类重写该方法") } } diff --git a/src/types/IPublishCfg.ts b/src/types/IPublishCfg.ts index 0cdcf2d2..92343aa2 100644 --- a/src/types/IPublishCfg.ts +++ b/src/types/IPublishCfg.ts @@ -24,7 +24,7 @@ */ import { SypConfig } from "~/syp.config.ts" -import { CommonblogConfig } from "~/src/adaptors/api/base/CommonblogConfig.ts" +import { CommonBlogConfig } from "~/src/adaptors/api/base/commonBlogConfig.ts" import { DynamicConfig } from "~/src/platforms/dynamicConfig.ts" /** @@ -48,11 +48,11 @@ interface IPublishCfg { dynamicConfigArray: DynamicConfig[] /** - * CommonblogConfig 类型的配置对象 + * CommonBlogConfig 类型的配置对象 * - * @type {CommonblogConfig} + * @type {CommonBlogConfig} */ - cfg: CommonblogConfig + cfg: CommonBlogConfig /** * DynamicConfig 类型的动态配置对象 diff --git a/src/utils/luteUtil.ts b/src/utils/luteUtil.ts index 1bde3504..b8e406be 100644 --- a/src/utils/luteUtil.ts +++ b/src/utils/luteUtil.ts @@ -51,7 +51,7 @@ class LuteUtil { this.logger.info("使用Lute渲染Markdown") const lute = Lute.New() const html = lute.MarkdownStr("", md) - this.logger.debug("md to html =>", html) + this.logger.debug("md to html =>", { html }) return html } } diff --git a/src/utils/VueUtils.ts b/src/utils/vueUtils.ts similarity index 100% rename from src/utils/VueUtils.ts rename to src/utils/vueUtils.ts