From 16d6a19051e55763ce71ac5b7485c6b7317ec5ca Mon Sep 17 00:00:00 2001 From: Kuingsmile Date: Fri, 24 May 2024 22:27:45 +0800 Subject: [PATCH] :sparkles: Feature(custom): write delete msg to log file --- src/main/apis/app/uploader/apis.ts | 2 +- src/main/events/ipcList.ts | 10 ++++++++-- src/renderer/apis/alist.ts | 17 +++++++++++++---- src/renderer/apis/aliyun.ts | 12 +++++++++--- src/renderer/apis/awss3.ts | 6 +++--- src/renderer/apis/dogecloud.ts | 6 +++--- src/renderer/apis/github.ts | 12 +++++++++--- src/renderer/apis/huaweiyun.ts | 6 +++--- src/renderer/apis/imgur.ts | 13 ++++++++++--- src/renderer/apis/local.ts | 8 +++++--- src/renderer/apis/lskyplist.ts | 16 +++++++++++----- src/renderer/apis/piclist.ts | 14 ++++++++++---- src/renderer/apis/qiniu.ts | 12 +++++++++--- src/renderer/apis/sftpplist.ts | 6 +++--- src/renderer/apis/smms.ts | 14 ++++++++++---- src/renderer/apis/tcyun.ts | 12 +++++++++--- src/renderer/apis/upyun.ts | 13 ++++++++++--- src/renderer/apis/webdav.ts | 6 ++++-- src/renderer/utils/common.ts | 10 ++++++++++ 19 files changed, 140 insertions(+), 55 deletions(-) diff --git a/src/main/apis/app/uploader/apis.ts b/src/main/apis/app/uploader/apis.ts index fe8ad59..d9e8b45 100644 --- a/src/main/apis/app/uploader/apis.ts +++ b/src/main/apis/app/uploader/apis.ts @@ -140,7 +140,7 @@ async function deleteSFTPFile (config: ISftpPlistConfig, fileName: string) { client.close() return deleteResult } catch (err: any) { - console.error(err) + picgo.log.error(err) return false } } diff --git a/src/main/events/ipcList.ts b/src/main/events/ipcList.ts index 5a4e24b..802cc37 100644 --- a/src/main/events/ipcList.ts +++ b/src/main/events/ipcList.ts @@ -14,7 +14,7 @@ import { 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' @@ -91,6 +91,7 @@ import { ISftpPlistConfig } from 'piclist' import { removeFileFromS3InMain, removeFileFromDogeInMain, removeFileFromHuaweiInMain } from '~/main/utils/deleteFunc' import webServer from '../server/webServer' import { configPaths } from '~/universal/utils/configPaths' +import logger from '../apis/core/picgo/logger' const STORE_PATH = app.getPath('userData') const commonConfigList = ['data.json', 'data.bak.json'] @@ -172,6 +173,11 @@ export default { }) // 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) => { try { const client = SSHClient.instance @@ -182,7 +188,7 @@ export default { client.close() return deleteResult } catch (err: any) { - console.error(err) + logger.error(err) return false } }) diff --git a/src/renderer/apis/alist.ts b/src/renderer/apis/alist.ts index 594d937..5ec5a30 100644 --- a/src/renderer/apis/alist.ts +++ b/src/renderer/apis/alist.ts @@ -1,3 +1,4 @@ +import { deleteFailedLog, deleteLog } from '@/utils/common' import axios from 'axios' import path from 'path' @@ -16,7 +17,10 @@ export default class AlistApi { const { fileName, config } = configMap try { 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({ method: 'post', url: `${url}/api/fs/remove`, @@ -29,9 +33,14 @@ export default class AlistApi { names: [path.basename(fileName)] } }) - return result.data.code === 200 - } catch (error) { - console.error(error) + if (result.data.code === 200) { + deleteLog(fileName, 'Alist') + return true + } + deleteLog(fileName, 'Alist', false) + return false + } catch (error: any) { + deleteFailedLog(fileName, 'Alist', error) return false } } diff --git a/src/renderer/apis/aliyun.ts b/src/renderer/apis/aliyun.ts index e513850..663f428 100644 --- a/src/renderer/apis/aliyun.ts +++ b/src/renderer/apis/aliyun.ts @@ -1,3 +1,4 @@ +import { deleteFailedLog, deleteLog } from '@/utils/common' import OSS from 'ali-oss' interface IConfigMap { @@ -18,9 +19,14 @@ export default class AliyunApi { const client = new OSS({ ...config, region: config.area }) const key = AliyunApi.#getKey(fileName, config.path) const result = await client.delete(key) - return result.res.status === 204 - } catch (error) { - console.error(error) + if (result.res.status === 204) { + deleteLog(fileName, 'Aliyun') + return true + } + deleteLog(fileName, 'Aliyun', false) + return false + } catch (error: any) { + deleteFailedLog(fileName, 'Aliyun', error) return false } } diff --git a/src/renderer/apis/awss3.ts b/src/renderer/apis/awss3.ts index 72e173c..89aa5d1 100644 --- a/src/renderer/apis/awss3.ts +++ b/src/renderer/apis/awss3.ts @@ -1,5 +1,5 @@ import { ipcRenderer } from 'electron' -import { getRawData } from '~/renderer/utils/common' +import { deleteFailedLog, getRawData } from '~/renderer/utils/common' import { removeFileFromS3InMain } from '~/main/utils/deleteFunc' export default class AwsS3Api { @@ -10,8 +10,8 @@ export default class AwsS3Api { getRawData(configMap) ) : await removeFileFromS3InMain(getRawData(configMap)) - } catch (error) { - console.log(error) + } catch (error: any) { + deleteFailedLog(configMap.fileName, 'AWS S3', error) return false } } diff --git a/src/renderer/apis/dogecloud.ts b/src/renderer/apis/dogecloud.ts index c66efd5..7344a91 100644 --- a/src/renderer/apis/dogecloud.ts +++ b/src/renderer/apis/dogecloud.ts @@ -1,5 +1,5 @@ import { ipcRenderer } from 'electron' -import { getRawData } from '~/renderer/utils/common' +import { deleteFailedLog, getRawData } from '~/renderer/utils/common' import { removeFileFromDogeInMain } from '~/main/utils/deleteFunc' export default class AwsS3Api { @@ -10,8 +10,8 @@ export default class AwsS3Api { getRawData(configMap) ) : await removeFileFromDogeInMain(getRawData(configMap)) - } catch (error) { - console.log(error) + } catch (error: any) { + deleteFailedLog(configMap.fileName, 'DogeCloud', error) return false } } diff --git a/src/renderer/apis/github.ts b/src/renderer/apis/github.ts index f5e6165..98a6071 100644 --- a/src/renderer/apis/github.ts +++ b/src/renderer/apis/github.ts @@ -1,3 +1,4 @@ +import { deleteFailedLog, deleteLog } from '@/utils/common' import { Octokit } from '@octokit/rest' interface IConfigMap { @@ -34,9 +35,14 @@ export default class GithubApi { sha: hash, branch }) - return status === 200 - } catch (error) { - console.error(error) + if (status === 200) { + deleteLog(fileName, 'GitHub') + return true + } + deleteLog(fileName, 'GitHub', false) + return false + } catch (error: any) { + deleteFailedLog(fileName, 'GitHub', error) return false } } diff --git a/src/renderer/apis/huaweiyun.ts b/src/renderer/apis/huaweiyun.ts index c1ef65f..d2354a1 100644 --- a/src/renderer/apis/huaweiyun.ts +++ b/src/renderer/apis/huaweiyun.ts @@ -1,5 +1,5 @@ import { ipcRenderer } from 'electron' -import { getRawData } from '~/renderer/utils/common' +import { deleteFailedLog, getRawData } from '~/renderer/utils/common' import { removeFileFromHuaweiInMain } from '~/main/utils/deleteFunc' export default class HuaweicloudApi { @@ -10,8 +10,8 @@ export default class HuaweicloudApi { getRawData(configMap) ) : await removeFileFromHuaweiInMain(getRawData(configMap)) - } catch (error) { - console.log(error) + } catch (error: any) { + deleteFailedLog(configMap.fileName, 'HuaweiCloud', error) return false } } diff --git a/src/renderer/apis/imgur.ts b/src/renderer/apis/imgur.ts index 11e7e41..9c9c946 100644 --- a/src/renderer/apis/imgur.ts +++ b/src/renderer/apis/imgur.ts @@ -1,3 +1,4 @@ +import { deleteFailedLog, deleteLog } from '@/utils/common' import axios, { AxiosResponse } from 'axios' interface IConfigMap { @@ -22,6 +23,7 @@ export default class ImgurApi { Authorization = `Client-ID ${clientId}` apiUrl = `${ImgurApi.#baseUrl}/image/${hash}` } else { + deleteLog(hash, 'Imgur', false, 'No credentials found') return false } try { @@ -29,9 +31,14 @@ export default class ImgurApi { headers: { Authorization }, timeout: 30000 }) - return response.status === 200 - } catch (error) { - console.error(error) + if (response.status === 200) { + deleteLog(hash, 'Imgur') + return true + } + deleteLog(hash, 'Imgur', false) + return false + } catch (error: any) { + deleteFailedLog(hash, 'Imgur', error) return false } } diff --git a/src/renderer/apis/local.ts b/src/renderer/apis/local.ts index 6f96849..054a630 100644 --- a/src/renderer/apis/local.ts +++ b/src/renderer/apis/local.ts @@ -1,3 +1,4 @@ +import { deleteFailedLog, deleteLog } from '@/utils/common' import fs from 'fs-extra' interface IConfigMap { @@ -8,15 +9,16 @@ export default class LocalApi { static async delete (configMap: IConfigMap): Promise { const { hash } = configMap if (!hash) { - console.error('Local.delete: invalid params') + deleteLog(hash, 'Local', false, 'Local.delete: invalid params') return false } try { await fs.remove(hash) + deleteLog(hash, 'Local') return true - } catch (error) { - console.error(error) + } catch (error: any) { + deleteFailedLog(hash, 'Local', error) return false } } diff --git a/src/renderer/apis/lskyplist.ts b/src/renderer/apis/lskyplist.ts index 2db3842..2751051 100644 --- a/src/renderer/apis/lskyplist.ts +++ b/src/renderer/apis/lskyplist.ts @@ -1,3 +1,4 @@ +import { deleteFailedLog, deleteLog } from '@/utils/common' import axios, { AxiosResponse } from 'axios' import https from 'https' @@ -5,13 +6,13 @@ export default class LskyplistApi { static async delete (configMap: IStringKeyMap): Promise { const { hash, config } = configMap if (!hash || !config || !config.token) { - console.error('LskyplistApi.delete: invalid params') + deleteLog(hash, 'Lskyplist', false, 'LskyplistApi.delete: invalid params') return false } const { host, token, version } = config if (version !== 'V2') { - console.error('LskyplistApi.delete: invalid version') + deleteLog(hash, 'Lskyplist', false, 'LskyplistApi.delete: invalid version') return false } @@ -30,9 +31,14 @@ export default class LskyplistApi { timeout: 30000, httpsAgent: requestAgent }) - return response.status === 200 && response.data.status === true - } catch (error) { - console.error(error) + if (response.status === 200 && response.data.status === true) { + deleteLog(hash, 'Lskyplist') + return true + } + deleteLog(hash, 'Lskyplist', false) + return false + } catch (error: any) { + deleteFailedLog(hash, 'Lskyplist', error) return false } } diff --git a/src/renderer/apis/piclist.ts b/src/renderer/apis/piclist.ts index 4e8f5b8..3c80ef2 100644 --- a/src/renderer/apis/piclist.ts +++ b/src/renderer/apis/piclist.ts @@ -1,3 +1,4 @@ +import { deleteFailedLog, deleteLog } from '@/utils/common' import axios, { AxiosResponse } from 'axios' export default class PiclistApi { @@ -5,7 +6,7 @@ export default class PiclistApi { const { config, fullResult } = configMap const { host, port } = config if (!host) { - console.error('PiclistApi.delete: invalid params') + deleteLog(fullResult, 'Piclist', false, 'PiclistApi.delete: invalid params') return false } @@ -18,9 +19,14 @@ export default class PiclistApi { list: [fullResult] } ) - return response.status === 200 && response.data?.success - } catch (error) { - console.error(error) + if (response.status === 200 && response.data?.success) { + deleteLog(fullResult, 'Piclist') + return true + } + deleteLog(fullResult, 'Piclist', false) + return false + } catch (error: any) { + deleteFailedLog(fullResult, 'Piclist', error) return false } } diff --git a/src/renderer/apis/qiniu.ts b/src/renderer/apis/qiniu.ts index ad64f74..d3ddac7 100644 --- a/src/renderer/apis/qiniu.ts +++ b/src/renderer/apis/qiniu.ts @@ -1,3 +1,4 @@ +import { deleteFailedLog, deleteLog } from '@/utils/common' import Qiniu from 'qiniu' interface IConfigMap { @@ -26,9 +27,14 @@ export default class QiniuApi { } }) }) as any - return res?.respInfo?.statusCode === 200 - } catch (error) { - console.error(error) + if (res?.respInfo?.statusCode === 200) { + deleteLog(fileName, 'Qiniu') + return true + } + deleteLog(fileName, 'Qiniu', false) + return false + } catch (error: any) { + deleteFailedLog(fileName, 'Qiniu', error) return false } } diff --git a/src/renderer/apis/sftpplist.ts b/src/renderer/apis/sftpplist.ts index 5bde37c..c0848fa 100644 --- a/src/renderer/apis/sftpplist.ts +++ b/src/renderer/apis/sftpplist.ts @@ -1,5 +1,5 @@ import { ipcRenderer } from 'electron' -import { getRawData } from '~/renderer/utils/common' +import { deleteFailedLog, getRawData } from '~/renderer/utils/common' export default class SftpPlistApi { static async delete (configMap: IStringKeyMap): Promise { @@ -10,8 +10,8 @@ export default class SftpPlistApi { fileName ) return deleteResult - } catch (error) { - console.error(error) + } catch (error: any) { + deleteFailedLog(fileName, 'SFTP', error) return false } } diff --git a/src/renderer/apis/smms.ts b/src/renderer/apis/smms.ts index ae2c364..2c00183 100644 --- a/src/renderer/apis/smms.ts +++ b/src/renderer/apis/smms.ts @@ -1,3 +1,4 @@ +import { deleteFailedLog, deleteLog } from '@/utils/common' import axios, { AxiosResponse } from 'axios' interface IConfigMap { @@ -11,7 +12,7 @@ export default class SmmsApi { static async delete (configMap: IConfigMap): Promise { const { hash, config } = configMap if (!hash || !config || !config.token) { - console.error('SmmsApi.delete: invalid params') + deleteLog(hash, 'Smms', false, 'SmmsApi.delete: invalid params') return false } @@ -29,9 +30,14 @@ export default class SmmsApi { }, timeout: 30000 }) - return response.status === 200 - } catch (error) { - console.error(error) + if (response.status === 200) { + deleteLog(hash, 'Smms') + return true + } + deleteLog(hash, 'Smms', false) + return false + } catch (error: any) { + deleteFailedLog(hash, 'Smms', error) return false } } diff --git a/src/renderer/apis/tcyun.ts b/src/renderer/apis/tcyun.ts index e4ff9d2..4344535 100644 --- a/src/renderer/apis/tcyun.ts +++ b/src/renderer/apis/tcyun.ts @@ -1,3 +1,4 @@ +import { deleteFailedLog, deleteLog } from '@/utils/common' import COS from 'cos-nodejs-sdk-v5' interface IConfigMap { @@ -28,9 +29,14 @@ export default class TcyunApi { Region: area, Key: key }) - return result.statusCode === 204 - } catch (error) { - console.error(error) + if (result.statusCode === 204) { + deleteLog(fileName, 'Tcyun') + return true + } + deleteLog(fileName, 'Tcyun', false) + return false + } catch (error: any) { + deleteFailedLog(fileName, 'Tcyun', error) return false } } diff --git a/src/renderer/apis/upyun.ts b/src/renderer/apis/upyun.ts index 41d9bf7..9495851 100644 --- a/src/renderer/apis/upyun.ts +++ b/src/renderer/apis/upyun.ts @@ -1,3 +1,4 @@ +import { deleteFailedLog, deleteLog } from '@/utils/common' import Upyun from 'upyun' interface IConfigMap { @@ -17,9 +18,15 @@ export default class UpyunApi { } else { key = `${path.replace(/^\/+|\/+$/, '')}/${fileName}` } - return await client.deleteFile(key) - } catch (error) { - console.log(error) + const result = await client.deleteFile(key) + if (result) { + deleteLog(fileName, 'Upyun') + return true + } + deleteLog(fileName, 'Upyun', false) + return false + } catch (error: any) { + deleteFailedLog(fileName, 'Upyun', error) return false } } diff --git a/src/renderer/apis/webdav.ts b/src/renderer/apis/webdav.ts index 7553b2d..679fd06 100644 --- a/src/renderer/apis/webdav.ts +++ b/src/renderer/apis/webdav.ts @@ -1,3 +1,4 @@ +import { deleteFailedLog, deleteLog } from '@/utils/common' import { AuthType, WebDAVClientOptions, createClient } from 'webdav' import { formatEndpoint } from '~/main/manage/utils/common' @@ -29,9 +30,10 @@ export default class WebdavApi { } try { await ctx.deleteFile(key) + deleteLog(fileName, 'WebDAV') return true - } catch (error) { - console.log(error) + } catch (error: any) { + deleteFailedLog(fileName, 'WebDAV', error) return false } } diff --git a/src/renderer/utils/common.ts b/src/renderer/utils/common.ts index a846f28..a3baff1 100644 --- a/src/renderer/utils/common.ts +++ b/src/renderer/utils/common.ts @@ -1,6 +1,7 @@ import { isReactive, isRef, toRaw, unref } from 'vue' import { ipcRenderer } from 'electron' import { OPEN_URL } from '~/universal/events/constants' +import { ILogType } from '~/universal/types/enum' const isDevelopment = process.env.NODE_ENV !== 'production' export const handleTalkingDataEvent = (data: ITalkingDataOptions) => { @@ -37,3 +38,12 @@ function sendToMain (channel: string, ...args: any[]) { export const openURL = (url: string) => { 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) +}