Skip to content

Commit

Permalink
Merge pull request #294 from terwer/release-please--branches--main--c…
Browse files Browse the repository at this point in the history
…omponents--siyuan-plugin-picgo

chore(main): release siyuan-plugin-picgo 1.6.0
  • Loading branch information
terwer committed Mar 27, 2024
2 parents 63f9a38 + bab9272 commit e5c6a58
Show file tree
Hide file tree
Showing 36 changed files with 503 additions and 200 deletions.
2 changes: 1 addition & 1 deletion .release-please-manifest.json
@@ -1,3 +1,3 @@
{
".": "1.5.1"
".": "1.6.0"
}
149 changes: 103 additions & 46 deletions CHANGELOG.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions libs/Universal-PicGo-Core/package.json
@@ -1,6 +1,6 @@
{
"name": "universal-picgo",
"version": "1.5.6",
"version": "1.6.0",
"type": "module",
"description": "picgo lib for node, browser and electron",
"main": "./dist/index.js",
Expand Down Expand Up @@ -44,4 +44,4 @@
"publishConfig": {
"access": "public"
}
}
}
4 changes: 2 additions & 2 deletions libs/Universal-PicGo-Core/src/index.ts
Expand Up @@ -17,12 +17,12 @@ import {
IUploaderConfigListItem,
IPluginConfig,
} from "./types"
import { isFileOrBlob } from "./utils/common"
import { isFileOrBlob, calculateMD5 } from "./utils/common"

export { UniversalPicGo, ExternalPicgo, eventBus }
export { ConfigDb, PluginLoaderDb, ExternalPicgoConfigDb }
export { PicgoTypeEnum, IBusEvent }
export { isFileOrBlob }
export { isFileOrBlob, calculateMD5 }
export { win, currentWin, parentWin, hasNodeEnv }
export {
type IPicGo,
Expand Down
Expand Up @@ -10,16 +10,11 @@
import crypto from "crypto"
import { ILocalesKey } from "../../../i18n/zh-CN"
import { IPicGo, IPluginConfig, IUpyunConfig } from "../../../types"
import { base64ToBuffer } from "../../../utils/common"
import { base64ToBuffer, calculateMD5 } from "../../../utils/common"
import { IBuildInEvent } from "../../../utils/enums"
import { Buffer } from "../../../utils/nodePolyfill"
import { AxiosRequestConfig } from "axios"

// 封装计算MD5哈希的方法
function calculateMD5(input: string) {
return crypto.createHash("md5").update(input).digest("hex")
}

function hmacsha1(secret: string, value: string) {
return crypto.createHmac("sha1", secret).update(value, "utf8").digest().toString("base64")
}
Expand Down
4 changes: 4 additions & 0 deletions libs/Universal-PicGo-Core/src/utils/common.ts
Expand Up @@ -12,6 +12,7 @@ import { hasNodeEnv, win } from "universal-picgo-store"
import imageSize from "./image-size"
import { calculateHash } from "./hashUtil"
import { Buffer } from "./nodePolyfill"
import crypto from "crypto"

export const isUrl = (url: string): boolean => url.startsWith("http://") || url.startsWith("https://")

Expand Down Expand Up @@ -442,3 +443,6 @@ export const getImageSize = (file: Buffer | typeof win.Buffer): IImgSize => {
}
}
}

// 封装计算MD5哈希的方法
export const calculateMD5 = (input: string) => crypto.createHash("md5").update(input).digest("hex")
4 changes: 2 additions & 2 deletions libs/Universal-PicGo-Store/package.json
@@ -1,6 +1,6 @@
{
"name": "universal-picgo-store",
"version": "1.5.6",
"version": "1.6.0",
"type": "module",
"description": "For PicGo projects to write & read data from browser, node or electron",
"main": "./dist/index.js",
Expand Down Expand Up @@ -39,4 +39,4 @@
"publishConfig": {
"access": "public"
}
}
}
4 changes: 2 additions & 2 deletions libs/zhi-siyuan-picgo/package.json
@@ -1,6 +1,6 @@
{
"name": "zhi-siyuan-picgo",
"version": "0.0.1",
"version": "1.6.0",
"type": "module",
"description": "picgo lib for siyuan-note",
"main": "./dist/index.js",
Expand Down Expand Up @@ -41,4 +41,4 @@
"publishConfig": {
"access": "public"
}
}
}
16 changes: 11 additions & 5 deletions libs/zhi-siyuan-picgo/src/index.ts
Expand Up @@ -7,26 +7,32 @@
* of this license document, but changing it is not allowed.
*/

import { SiyuanPicGo } from "./lib/siyuanPicgo"
import { SiyuanPicgoPostApi } from "./lib/siyuanPicgoPostApi"
import {
calculateMD5,
ConfigDb,
ExternalPicgoConfigDb,
IConfig,
IExternalPicgoConfig,
IImgInfo,
IPicGo,
IPicgoDb,
IConfig,
IPluginConfig,
PicgoTypeEnum,
PluginLoaderDb,
IPluginConfig,
} from "universal-picgo"
import { SiyuanConfig as SiyuanPicgoConfig } from "zhi-siyuan-api"
import { PicgoHelper } from "./lib/picgoHelper"
import { retrieveImageFromClipboardAsBlob } from "./lib/utils/browserClipboard"
import { copyToClipboardInBrowser } from "./lib/utils/utils"
import { copyToClipboardInBrowser, generateUniqueName } from "./lib/utils/utils"
import { ImageItem } from "./lib/models/ImageItem"
import { ImageParser } from "./lib/parser/ImageParser"
import { ParsedImage } from "./lib/models/ParsedImage"

export { SiyuanPicgoConfig, SiyuanPicgoPostApi, PicgoHelper }
export { retrieveImageFromClipboardAsBlob, copyToClipboardInBrowser }
export { SiyuanPicGo, SiyuanPicgoConfig, SiyuanPicgoPostApi, PicgoHelper }
export { ImageItem, ImageParser, ParsedImage }
export { retrieveImageFromClipboardAsBlob, copyToClipboardInBrowser, calculateMD5, generateUniqueName }
export { ConfigDb, PluginLoaderDb, ExternalPicgoConfigDb }
export { PicgoTypeEnum }
export { type IPicGo, type IImgInfo, type IPicgoDb, type IConfig, type IExternalPicgoConfig, type IPluginConfig }
50 changes: 50 additions & 0 deletions libs/zhi-siyuan-picgo/src/lib/siyuanPicgo.ts
@@ -0,0 +1,50 @@
/*
* GNU GENERAL PUBLIC LICENSE
* Version 3, 29 June 2007
*
* Copyright (C) 2024 Terwer, Inc. <https://terwer.space/>
* Everyone is permitted to copy and distribute verbatim copies
* of this license document, but changing it is not allowed.
*/

import { SiyuanPicgoPostApi } from "./siyuanPicgoPostApi"
import { SiyuanConfig, SiyuanKernelApi } from "zhi-siyuan-api"

/**
* 思源笔记 PicGo 实例
*/
class SiyuanPicGo {
public static async getInstance(siyuanConfig: SiyuanConfig, isDev?: boolean): Promise<SiyuanPicgoPostApi> {
return new Promise((resolve, _reject) => {
const siyuanApi = new SiyuanKernelApi(siyuanConfig)
const picgo = new SiyuanPicgoPostApi(siyuanConfig, isDev)

let needUpdate = false
const checkConfig = () => {
if (picgo.cfgUpdating) {
needUpdate = true
siyuanApi.pushMsg({
msg: "检测到旧配置,正在迁移配置,请勿进行任何操作...",
timeout: 1000,
})
console.warn("检测到旧配置,正在迁移配置,请勿进行任何操作...")
setTimeout(checkConfig, 1000)
} else {
if (needUpdate) {
siyuanApi.pushMsg({
msg: "PicGO 图床历史配置迁移完成",
timeout: 7000,
})
console.log("PicGO 图床历史配置迁移完成")
needUpdate = false
}
console.log("picgo instance is ready")
resolve(picgo)
}
}
checkConfig()
})
}
}

export { SiyuanPicGo }
30 changes: 19 additions & 11 deletions libs/zhi-siyuan-picgo/src/lib/siyuanPicgoPostApi.ts
Expand Up @@ -9,7 +9,7 @@

import { ILogger, simpleLogger } from "zhi-lib-base"
import { SiyuanPicGoUploadApi } from "./siyuanPicGoUploadApi"
import { hasNodeEnv, IImgInfo, IPicGo, win } from "universal-picgo"
import { hasNodeEnv, IPicGo, isFileOrBlob, win } from "universal-picgo"
import { ParsedImage } from "./models/ParsedImage"
import { ImageItem } from "./models/ImageItem"
import { SIYUAN_PICGO_FILE_MAP_KEY } from "./constants"
Expand All @@ -18,15 +18,15 @@ import { SiyuanConfig, SiyuanKernelApi } from "zhi-siyuan-api"
import { ImageParser } from "./parser/ImageParser"
import { PicgoPostResult } from "./models/PicgoPostResult"
import { DeviceDetection, DeviceTypeEnum, SiyuanDevice } from "zhi-device"
import { isFileOrBlob } from "universal-picgo"
import { IImgInfo } from "universal-picgo/src"

/**
* Picgo与文章交互的通用方法
*/
class SiyuanPicgoPostApi {
private readonly logger: ILogger
private readonly imageParser: ImageParser
private readonly siyuanApi: SiyuanKernelApi
public readonly siyuanApi: SiyuanKernelApi
private readonly siyuanConfig: SiyuanConfig
private readonly isSiyuanOrSiyuanNewWin: boolean
private readonly picgoApi: SiyuanPicGoUploadApi
Expand Down Expand Up @@ -71,7 +71,7 @@ class SiyuanPicgoPostApi {
*
* @param input 路径数组,可为空,为空上传剪贴板
*/
public async upload(input?: any[]): Promise<IImgInfo[] | Error> {
public async originalUpload(input?: any[]): Promise<IImgInfo[] | Error> {
return this.picgoApi.upload(input)
}

Expand Down Expand Up @@ -129,8 +129,10 @@ class SiyuanPicgoPostApi {
return ret
}

// ===================================================================================================================

/**
* 上传当前文章图片到图床(提供给外部调用)
* 上传当前文章图片到图床(单篇文档所有图片全部批量上传,提供给外部调用)
*
* @param pageId 文章ID
* @param attrs 文章属性
Expand Down Expand Up @@ -223,7 +225,7 @@ class SiyuanPicgoPostApi {
}

/**
* 上传单张图片到图床
* 上传单张图片到图床(当前图片单个上传,提供给外部调用)
*
* @param pageId 文章ID
* @param attrs 文章属性
Expand All @@ -238,7 +240,7 @@ class SiyuanPicgoPostApi {
): Promise<void> {
const mapInfoStr = attrs[SIYUAN_PICGO_FILE_MAP_KEY] ?? "{}"
const fileMap = JsonUtil.safeParse<any>(mapInfoStr, {})
this.logger.warn("fileMap=>", fileMap)
this.logger.debug("fileMap=>", fileMap)

// 处理上传
const filePaths = []
Expand All @@ -247,7 +249,8 @@ class SiyuanPicgoPostApi {
return
}

let imageFullPath: string
// 兼容剪贴板
let imageFullPath: string | Blob | File
// blob 或者 file 直接上传
if (isFileOrBlob(imageItem.url)) {
imageFullPath = imageItem.url
Expand All @@ -270,11 +273,16 @@ class SiyuanPicgoPostApi {
}
}

this.logger.warn("isSiyuanOrSiyuanNewWin=>" + this.isSiyuanOrSiyuanNewWin + ", imageFullPath=>", imageFullPath)
filePaths.push(imageFullPath)
// noinspection SuspiciousTypeOfGuard
if (!imageFullPath || (typeof imageFullPath === "string" && imageFullPath.trim().length == 0)) {
this.logger.warn("upload from clipboard")
} else {
filePaths.push(imageFullPath)
}
this.logger.warn("start uploading =>", filePaths)

// 批量上传
const imageJson: any = await this.picgoApi.upload(filePaths)
const imageJson: any = await this.originalUpload(filePaths)
this.logger.debug("图片上传完成,imageJson=>", imageJson)
const imageJsonObj = JsonUtil.safeParse(imageJson, []) as any
// 处理后续
Expand Down
11 changes: 2 additions & 9 deletions libs/zhi-siyuan-picgo/src/lib/utils/md5Util.ts
Expand Up @@ -7,20 +7,13 @@
* of this license document, but changing it is not allowed.
*/

import { md5 } from "js-md5"
import { calculateMD5 } from "universal-picgo"

/**
* 获取文件名的hash
*
* @param filename 文件名
*/
export const getFileHash = (filename: string): string => {
// import { createHash } from "crypto"
// const hash = createHash("sha256")
// hash.update(filename)
// return hash.digest("hex")

// Base64.toBase64(filename).substring(0, 8);

return md5(filename)
return calculateMD5(filename)
}
17 changes: 17 additions & 0 deletions libs/zhi-siyuan-picgo/src/lib/utils/utils.ts
Expand Up @@ -85,3 +85,20 @@ export const trimValues = (obj: any) => {
})
return newObj
}

export function generateUniqueName() {
const currentTime = Math.floor(Date.now() / 1000) // 获取当前时间戳(秒级)

function generateRandomString(length: number) {
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
let randomString = ""
for (let i = 0; i < length; i++) {
randomString += characters.charAt(Math.floor(Math.random() * characters.length))
}
return randomString
}

const randomString = generateRandomString(6) // 生成长度为6的随机字符串
const uniqueName = `${currentTime}_${randomString}`
return uniqueName + ".png"
}
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "siyuan-plugin-picgo",
"version": "1.5.1",
"version": "1.6.0",
"description": "picgo plugin for siyuan-note",
"scripts": {
"serve": "turbo run serve",
Expand Down
4 changes: 2 additions & 2 deletions packages/picgo-plugin-app/package.json
@@ -1,7 +1,7 @@
{
"name": "picgo-plugin-app",
"private": true,
"version": "1.5.1",
"version": "1.6.0",
"type": "module",
"scripts": {
"serve": "python -u scripts/serve.py && vite",
Expand Down Expand Up @@ -39,4 +39,4 @@
"zhi-siyuan-api": "^2.19.1",
"zhi-siyuan-picgo": "workspace:*"
}
}
}
Expand Up @@ -10,13 +10,11 @@
<script setup lang="ts">
import { UploadFilled } from "@element-plus/icons-vue"
import { onBeforeMount, onBeforeUnmount, reactive, ref } from "vue"
import { SiyuanPicGo } from "@/utils/siyuanPicgo.ts"
import { ElMessage, UploadRequestOptions } from "element-plus"
import { retrieveImageFromClipboardAsBlob } from "zhi-siyuan-picgo"
import { generateUniqueName, ImageItem, retrieveImageFromClipboardAsBlob } from "zhi-siyuan-picgo"
import { useVueI18n } from "$composables/useVueI18n.ts"
import { createAppLogger } from "@/utils/appLogger.ts"
import { usePicgoUpload } from "$composables/usePicgoUpload.ts"
import { ImageItem } from "zhi-siyuan-picgo/src/lib/models/ImageItem.ts"
const logger = createAppLogger("drag-upload")
Expand Down Expand Up @@ -53,7 +51,7 @@ const handleDragAction = async (file: Blob) => {
try {
formData.picgoCommonData.isUploadLoading = true
const imageItem = new ImageItem("", file as any, true, "", "")
const imageItem = new ImageItem(generateUniqueName(), file as any, true, "", "")
await picgoUploadMethods.doUploadImageToBed(imageItem)
res = {
Expand Down

0 comments on commit e5c6a58

Please sign in to comment.