Feature(custom): write delete msg to log file

This commit is contained in:
Kuingsmile 2024-05-24 22:27:45 +08:00
parent f6936dae51
commit 16d6a19051
19 changed files with 140 additions and 55 deletions

View File

@ -140,7 +140,7 @@ async function deleteSFTPFile (config: ISftpPlistConfig, fileName: string) {
client.close() client.close()
return deleteResult return deleteResult
} catch (err: any) { } catch (err: any) {
console.error(err) picgo.log.error(err)
return false return false
} }
} }

View File

@ -14,7 +14,7 @@ import {
import windowManager from 'apis/app/window/windowManager' import windowManager from 'apis/app/window/windowManager'
// 枚举类型声明 // 枚举类型声明
import { IPasteStyle, IWindowList } from '#/types/enum' import { ILogType, IPasteStyle, IWindowList } from '#/types/enum'
// 上传器 // 上传器
import uploader from 'apis/app/uploader' import uploader from 'apis/app/uploader'
@ -91,6 +91,7 @@ import { ISftpPlistConfig } from 'piclist'
import { removeFileFromS3InMain, removeFileFromDogeInMain, removeFileFromHuaweiInMain } from '~/main/utils/deleteFunc' import { removeFileFromS3InMain, removeFileFromDogeInMain, removeFileFromHuaweiInMain } from '~/main/utils/deleteFunc'
import webServer from '../server/webServer' import webServer from '../server/webServer'
import { configPaths } from '~/universal/utils/configPaths' import { configPaths } from '~/universal/utils/configPaths'
import logger from '../apis/core/picgo/logger'
const STORE_PATH = app.getPath('userData') const STORE_PATH = app.getPath('userData')
const commonConfigList = ['data.json', 'data.bak.json'] const commonConfigList = ['data.json', 'data.bak.json']
@ -172,6 +173,11 @@ export default {
}) })
// Gallery image cloud delete IPC // Gallery image cloud delete IPC
ipcMain.on('logDeleteMsg', async (evt: IpcMainEvent, msg: string, logLevel: ILogType) => {
logger[logLevel](msg)
})
ipcMain.handle('delete-sftp-file', async (_evt: IpcMainInvokeEvent, config: ISftpPlistConfig, fileName: string) => { ipcMain.handle('delete-sftp-file', async (_evt: IpcMainInvokeEvent, config: ISftpPlistConfig, fileName: string) => {
try { try {
const client = SSHClient.instance const client = SSHClient.instance
@ -182,7 +188,7 @@ export default {
client.close() client.close()
return deleteResult return deleteResult
} catch (err: any) { } catch (err: any) {
console.error(err) logger.error(err)
return false return false
} }
}) })

View File

@ -1,3 +1,4 @@
import { deleteFailedLog, deleteLog } from '@/utils/common'
import axios from 'axios' import axios from 'axios'
import path from 'path' import path from 'path'
@ -16,7 +17,10 @@ export default class AlistApi {
const { fileName, config } = configMap const { fileName, config } = configMap
try { try {
const { version, url, uploadPath, token } = config const { version, url, uploadPath, token } = config
if (String(version) === '2') return true if (String(version) === '2') {
deleteLog(fileName, 'Alist', false, 'Alist version 2 is not supported, deletion is skipped')
return true
}
const result = await axios.request({ const result = await axios.request({
method: 'post', method: 'post',
url: `${url}/api/fs/remove`, url: `${url}/api/fs/remove`,
@ -29,9 +33,14 @@ export default class AlistApi {
names: [path.basename(fileName)] names: [path.basename(fileName)]
} }
}) })
return result.data.code === 200 if (result.data.code === 200) {
} catch (error) { deleteLog(fileName, 'Alist')
console.error(error) return true
}
deleteLog(fileName, 'Alist', false)
return false
} catch (error: any) {
deleteFailedLog(fileName, 'Alist', error)
return false return false
} }
} }

View File

@ -1,3 +1,4 @@
import { deleteFailedLog, deleteLog } from '@/utils/common'
import OSS from 'ali-oss' import OSS from 'ali-oss'
interface IConfigMap { interface IConfigMap {
@ -18,9 +19,14 @@ export default class AliyunApi {
const client = new OSS({ ...config, region: config.area }) const client = new OSS({ ...config, region: config.area })
const key = AliyunApi.#getKey(fileName, config.path) const key = AliyunApi.#getKey(fileName, config.path)
const result = await client.delete(key) const result = await client.delete(key)
return result.res.status === 204 if (result.res.status === 204) {
} catch (error) { deleteLog(fileName, 'Aliyun')
console.error(error) return true
}
deleteLog(fileName, 'Aliyun', false)
return false
} catch (error: any) {
deleteFailedLog(fileName, 'Aliyun', error)
return false return false
} }
} }

View File

@ -1,5 +1,5 @@
import { ipcRenderer } from 'electron' import { ipcRenderer } from 'electron'
import { getRawData } from '~/renderer/utils/common' import { deleteFailedLog, getRawData } from '~/renderer/utils/common'
import { removeFileFromS3InMain } from '~/main/utils/deleteFunc' import { removeFileFromS3InMain } from '~/main/utils/deleteFunc'
export default class AwsS3Api { export default class AwsS3Api {
@ -10,8 +10,8 @@ export default class AwsS3Api {
getRawData(configMap) getRawData(configMap)
) )
: await removeFileFromS3InMain(getRawData(configMap)) : await removeFileFromS3InMain(getRawData(configMap))
} catch (error) { } catch (error: any) {
console.log(error) deleteFailedLog(configMap.fileName, 'AWS S3', error)
return false return false
} }
} }

View File

@ -1,5 +1,5 @@
import { ipcRenderer } from 'electron' import { ipcRenderer } from 'electron'
import { getRawData } from '~/renderer/utils/common' import { deleteFailedLog, getRawData } from '~/renderer/utils/common'
import { removeFileFromDogeInMain } from '~/main/utils/deleteFunc' import { removeFileFromDogeInMain } from '~/main/utils/deleteFunc'
export default class AwsS3Api { export default class AwsS3Api {
@ -10,8 +10,8 @@ export default class AwsS3Api {
getRawData(configMap) getRawData(configMap)
) )
: await removeFileFromDogeInMain(getRawData(configMap)) : await removeFileFromDogeInMain(getRawData(configMap))
} catch (error) { } catch (error: any) {
console.log(error) deleteFailedLog(configMap.fileName, 'DogeCloud', error)
return false return false
} }
} }

View File

@ -1,3 +1,4 @@
import { deleteFailedLog, deleteLog } from '@/utils/common'
import { Octokit } from '@octokit/rest' import { Octokit } from '@octokit/rest'
interface IConfigMap { interface IConfigMap {
@ -34,9 +35,14 @@ export default class GithubApi {
sha: hash, sha: hash,
branch branch
}) })
return status === 200 if (status === 200) {
} catch (error) { deleteLog(fileName, 'GitHub')
console.error(error) return true
}
deleteLog(fileName, 'GitHub', false)
return false
} catch (error: any) {
deleteFailedLog(fileName, 'GitHub', error)
return false return false
} }
} }

View File

@ -1,5 +1,5 @@
import { ipcRenderer } from 'electron' import { ipcRenderer } from 'electron'
import { getRawData } from '~/renderer/utils/common' import { deleteFailedLog, getRawData } from '~/renderer/utils/common'
import { removeFileFromHuaweiInMain } from '~/main/utils/deleteFunc' import { removeFileFromHuaweiInMain } from '~/main/utils/deleteFunc'
export default class HuaweicloudApi { export default class HuaweicloudApi {
@ -10,8 +10,8 @@ export default class HuaweicloudApi {
getRawData(configMap) getRawData(configMap)
) )
: await removeFileFromHuaweiInMain(getRawData(configMap)) : await removeFileFromHuaweiInMain(getRawData(configMap))
} catch (error) { } catch (error: any) {
console.log(error) deleteFailedLog(configMap.fileName, 'HuaweiCloud', error)
return false return false
} }
} }

View File

@ -1,3 +1,4 @@
import { deleteFailedLog, deleteLog } from '@/utils/common'
import axios, { AxiosResponse } from 'axios' import axios, { AxiosResponse } from 'axios'
interface IConfigMap { interface IConfigMap {
@ -22,6 +23,7 @@ export default class ImgurApi {
Authorization = `Client-ID ${clientId}` Authorization = `Client-ID ${clientId}`
apiUrl = `${ImgurApi.#baseUrl}/image/${hash}` apiUrl = `${ImgurApi.#baseUrl}/image/${hash}`
} else { } else {
deleteLog(hash, 'Imgur', false, 'No credentials found')
return false return false
} }
try { try {
@ -29,9 +31,14 @@ export default class ImgurApi {
headers: { Authorization }, headers: { Authorization },
timeout: 30000 timeout: 30000
}) })
return response.status === 200 if (response.status === 200) {
} catch (error) { deleteLog(hash, 'Imgur')
console.error(error) return true
}
deleteLog(hash, 'Imgur', false)
return false
} catch (error: any) {
deleteFailedLog(hash, 'Imgur', error)
return false return false
} }
} }

View File

@ -1,3 +1,4 @@
import { deleteFailedLog, deleteLog } from '@/utils/common'
import fs from 'fs-extra' import fs from 'fs-extra'
interface IConfigMap { interface IConfigMap {
@ -8,15 +9,16 @@ export default class LocalApi {
static async delete (configMap: IConfigMap): Promise<boolean> { static async delete (configMap: IConfigMap): Promise<boolean> {
const { hash } = configMap const { hash } = configMap
if (!hash) { if (!hash) {
console.error('Local.delete: invalid params') deleteLog(hash, 'Local', false, 'Local.delete: invalid params')
return false return false
} }
try { try {
await fs.remove(hash) await fs.remove(hash)
deleteLog(hash, 'Local')
return true return true
} catch (error) { } catch (error: any) {
console.error(error) deleteFailedLog(hash, 'Local', error)
return false return false
} }
} }

View File

@ -1,3 +1,4 @@
import { deleteFailedLog, deleteLog } from '@/utils/common'
import axios, { AxiosResponse } from 'axios' import axios, { AxiosResponse } from 'axios'
import https from 'https' import https from 'https'
@ -5,13 +6,13 @@ export default class LskyplistApi {
static async delete (configMap: IStringKeyMap): Promise<boolean> { static async delete (configMap: IStringKeyMap): Promise<boolean> {
const { hash, config } = configMap const { hash, config } = configMap
if (!hash || !config || !config.token) { if (!hash || !config || !config.token) {
console.error('LskyplistApi.delete: invalid params') deleteLog(hash, 'Lskyplist', false, 'LskyplistApi.delete: invalid params')
return false return false
} }
const { host, token, version } = config const { host, token, version } = config
if (version !== 'V2') { if (version !== 'V2') {
console.error('LskyplistApi.delete: invalid version') deleteLog(hash, 'Lskyplist', false, 'LskyplistApi.delete: invalid version')
return false return false
} }
@ -30,9 +31,14 @@ export default class LskyplistApi {
timeout: 30000, timeout: 30000,
httpsAgent: requestAgent httpsAgent: requestAgent
}) })
return response.status === 200 && response.data.status === true if (response.status === 200 && response.data.status === true) {
} catch (error) { deleteLog(hash, 'Lskyplist')
console.error(error) return true
}
deleteLog(hash, 'Lskyplist', false)
return false
} catch (error: any) {
deleteFailedLog(hash, 'Lskyplist', error)
return false return false
} }
} }

View File

@ -1,3 +1,4 @@
import { deleteFailedLog, deleteLog } from '@/utils/common'
import axios, { AxiosResponse } from 'axios' import axios, { AxiosResponse } from 'axios'
export default class PiclistApi { export default class PiclistApi {
@ -5,7 +6,7 @@ export default class PiclistApi {
const { config, fullResult } = configMap const { config, fullResult } = configMap
const { host, port } = config const { host, port } = config
if (!host) { if (!host) {
console.error('PiclistApi.delete: invalid params') deleteLog(fullResult, 'Piclist', false, 'PiclistApi.delete: invalid params')
return false return false
} }
@ -18,9 +19,14 @@ export default class PiclistApi {
list: [fullResult] list: [fullResult]
} }
) )
return response.status === 200 && response.data?.success if (response.status === 200 && response.data?.success) {
} catch (error) { deleteLog(fullResult, 'Piclist')
console.error(error) return true
}
deleteLog(fullResult, 'Piclist', false)
return false
} catch (error: any) {
deleteFailedLog(fullResult, 'Piclist', error)
return false return false
} }
} }

View File

@ -1,3 +1,4 @@
import { deleteFailedLog, deleteLog } from '@/utils/common'
import Qiniu from 'qiniu' import Qiniu from 'qiniu'
interface IConfigMap { interface IConfigMap {
@ -26,9 +27,14 @@ export default class QiniuApi {
} }
}) })
}) as any }) as any
return res?.respInfo?.statusCode === 200 if (res?.respInfo?.statusCode === 200) {
} catch (error) { deleteLog(fileName, 'Qiniu')
console.error(error) return true
}
deleteLog(fileName, 'Qiniu', false)
return false
} catch (error: any) {
deleteFailedLog(fileName, 'Qiniu', error)
return false return false
} }
} }

View File

@ -1,5 +1,5 @@
import { ipcRenderer } from 'electron' import { ipcRenderer } from 'electron'
import { getRawData } from '~/renderer/utils/common' import { deleteFailedLog, getRawData } from '~/renderer/utils/common'
export default class SftpPlistApi { export default class SftpPlistApi {
static async delete (configMap: IStringKeyMap): Promise<boolean> { static async delete (configMap: IStringKeyMap): Promise<boolean> {
@ -10,8 +10,8 @@ export default class SftpPlistApi {
fileName fileName
) )
return deleteResult return deleteResult
} catch (error) { } catch (error: any) {
console.error(error) deleteFailedLog(fileName, 'SFTP', error)
return false return false
} }
} }

View File

@ -1,3 +1,4 @@
import { deleteFailedLog, deleteLog } from '@/utils/common'
import axios, { AxiosResponse } from 'axios' import axios, { AxiosResponse } from 'axios'
interface IConfigMap { interface IConfigMap {
@ -11,7 +12,7 @@ export default class SmmsApi {
static async delete (configMap: IConfigMap): Promise<boolean> { static async delete (configMap: IConfigMap): Promise<boolean> {
const { hash, config } = configMap const { hash, config } = configMap
if (!hash || !config || !config.token) { if (!hash || !config || !config.token) {
console.error('SmmsApi.delete: invalid params') deleteLog(hash, 'Smms', false, 'SmmsApi.delete: invalid params')
return false return false
} }
@ -29,9 +30,14 @@ export default class SmmsApi {
}, },
timeout: 30000 timeout: 30000
}) })
return response.status === 200 if (response.status === 200) {
} catch (error) { deleteLog(hash, 'Smms')
console.error(error) return true
}
deleteLog(hash, 'Smms', false)
return false
} catch (error: any) {
deleteFailedLog(hash, 'Smms', error)
return false return false
} }
} }

View File

@ -1,3 +1,4 @@
import { deleteFailedLog, deleteLog } from '@/utils/common'
import COS from 'cos-nodejs-sdk-v5' import COS from 'cos-nodejs-sdk-v5'
interface IConfigMap { interface IConfigMap {
@ -28,9 +29,14 @@ export default class TcyunApi {
Region: area, Region: area,
Key: key Key: key
}) })
return result.statusCode === 204 if (result.statusCode === 204) {
} catch (error) { deleteLog(fileName, 'Tcyun')
console.error(error) return true
}
deleteLog(fileName, 'Tcyun', false)
return false
} catch (error: any) {
deleteFailedLog(fileName, 'Tcyun', error)
return false return false
} }
} }

View File

@ -1,3 +1,4 @@
import { deleteFailedLog, deleteLog } from '@/utils/common'
import Upyun from 'upyun' import Upyun from 'upyun'
interface IConfigMap { interface IConfigMap {
@ -17,9 +18,15 @@ export default class UpyunApi {
} else { } else {
key = `${path.replace(/^\/+|\/+$/, '')}/${fileName}` key = `${path.replace(/^\/+|\/+$/, '')}/${fileName}`
} }
return await client.deleteFile(key) const result = await client.deleteFile(key)
} catch (error) { if (result) {
console.log(error) deleteLog(fileName, 'Upyun')
return true
}
deleteLog(fileName, 'Upyun', false)
return false
} catch (error: any) {
deleteFailedLog(fileName, 'Upyun', error)
return false return false
} }
} }

View File

@ -1,3 +1,4 @@
import { deleteFailedLog, deleteLog } from '@/utils/common'
import { AuthType, WebDAVClientOptions, createClient } from 'webdav' import { AuthType, WebDAVClientOptions, createClient } from 'webdav'
import { formatEndpoint } from '~/main/manage/utils/common' import { formatEndpoint } from '~/main/manage/utils/common'
@ -29,9 +30,10 @@ export default class WebdavApi {
} }
try { try {
await ctx.deleteFile(key) await ctx.deleteFile(key)
deleteLog(fileName, 'WebDAV')
return true return true
} catch (error) { } catch (error: any) {
console.log(error) deleteFailedLog(fileName, 'WebDAV', error)
return false return false
} }
} }

View File

@ -1,6 +1,7 @@
import { isReactive, isRef, toRaw, unref } from 'vue' import { isReactive, isRef, toRaw, unref } from 'vue'
import { ipcRenderer } from 'electron' import { ipcRenderer } from 'electron'
import { OPEN_URL } from '~/universal/events/constants' import { OPEN_URL } from '~/universal/events/constants'
import { ILogType } from '~/universal/types/enum'
const isDevelopment = process.env.NODE_ENV !== 'production' const isDevelopment = process.env.NODE_ENV !== 'production'
export const handleTalkingDataEvent = (data: ITalkingDataOptions) => { export const handleTalkingDataEvent = (data: ITalkingDataOptions) => {
@ -37,3 +38,12 @@ function sendToMain (channel: string, ...args: any[]) {
export const openURL = (url: string) => { export const openURL = (url: string) => {
sendToMain(OPEN_URL, url) sendToMain(OPEN_URL, url)
} }
export const deleteLog = (fileName?: string, type?: string, isSuccess = true, msg?: string) => {
ipcRenderer.send('logDeleteMsg', msg || `Delete ${fileName} on ${type} success`, isSuccess ? ILogType.success : ILogType.error)
}
export const deleteFailedLog = (fileName: string, type: string, error: any) => {
deleteLog(fileName, type, false)
ipcRenderer.send('logDeleteMsg', error, ILogType.error)
}