Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(main): release siyuan-plugin-picgo 1.6.0 #294

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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