✨ Feature: add remote file delete , picBed management
First version of PicList. In album, you can delete remote file now. Add picBed management function.
@@ -8,7 +8,7 @@
|
||||
import { useStore } from '@/hooks/useStore'
|
||||
import { onBeforeMount, onMounted, onUnmounted } from 'vue'
|
||||
import { getConfig } from './utils/dataSender'
|
||||
import type { IConfig } from 'picgo'
|
||||
import type { IConfig } from 'piclist'
|
||||
import bus from './utils/bus'
|
||||
import { FORCE_UPDATE } from '~/universal/events/constants'
|
||||
|
||||
|
||||
25
src/renderer/apis/aliyun.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import OSS from 'ali-oss'
|
||||
|
||||
export default class AliyunApi {
|
||||
static async delete (configMap: IStringKeyMap): Promise<boolean> {
|
||||
const { fileName, config: { accessKeyId, accessKeySecret, bucket, area, path } } = configMap
|
||||
try {
|
||||
const client = new OSS({
|
||||
accessKeyId,
|
||||
accessKeySecret,
|
||||
bucket,
|
||||
region: area
|
||||
})
|
||||
let key
|
||||
if (path === '/' || !path) {
|
||||
key = fileName
|
||||
} else {
|
||||
key = `${path.replace(/^\//, '').replace(/\/$/, '')}/${fileName}`
|
||||
}
|
||||
const result = await client.delete(key) as any
|
||||
return result.res.status === 204
|
||||
} catch (error) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
27
src/renderer/apis/allApi.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import SmmsApi from './smms'
|
||||
import TcyunApi from './tcyun'
|
||||
import AliyunApi from './aliyun'
|
||||
import QiniuApi from './qiniu'
|
||||
import ImgurApi from './imgur'
|
||||
import GithubApi from './github'
|
||||
import UpyunApi from './upyun'
|
||||
|
||||
const apiMap: IStringKeyMap = {
|
||||
smms: SmmsApi,
|
||||
tcyun: TcyunApi,
|
||||
aliyun: AliyunApi,
|
||||
qiniu: QiniuApi,
|
||||
imgur: ImgurApi,
|
||||
github: GithubApi,
|
||||
upyun: UpyunApi
|
||||
}
|
||||
|
||||
export default class ALLApi {
|
||||
static async delete (configMap: IStringKeyMap): Promise<boolean> {
|
||||
if (apiMap[configMap.type] !== undefined) {
|
||||
return await apiMap[configMap.type].delete(configMap)
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
31
src/renderer/apis/github.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { Octokit } from '@octokit/rest'
|
||||
|
||||
export default class GithubApi {
|
||||
static async delete (configMap: IStringKeyMap): Promise<boolean> {
|
||||
const { fileName, hash, config: { repo, token, branch, path } } = configMap
|
||||
const owner = repo.split('/')[0]
|
||||
const repoName = repo.split('/')[1]
|
||||
const octokit = new Octokit({
|
||||
auth: token
|
||||
})
|
||||
let key
|
||||
if (path === '/' || !path) {
|
||||
key = fileName
|
||||
} else {
|
||||
key = `${path.replace(/^\//, '').replace(/\/$/, '')}/${fileName}`
|
||||
}
|
||||
try {
|
||||
const result = await octokit.rest.repos.deleteFile({
|
||||
owner,
|
||||
repo: repoName,
|
||||
path: key,
|
||||
message: `delete ${fileName} by PicList`,
|
||||
sha: hash,
|
||||
branch
|
||||
})
|
||||
return result.status === 200
|
||||
} catch (error) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
21
src/renderer/apis/imgur.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import axios from 'axios'
|
||||
|
||||
export default class ImgurApi {
|
||||
static async delete (configMap: IStringKeyMap): Promise<boolean> {
|
||||
const clientId = configMap.config.clientId
|
||||
const { hash } = configMap
|
||||
const fullUrl = `https://api.imgur.com/3/image/${hash}`
|
||||
const headers = {
|
||||
Authorization: `Client-ID ${clientId}`
|
||||
}
|
||||
try {
|
||||
const res = await axios.delete(fullUrl, {
|
||||
headers,
|
||||
timeout: 10000
|
||||
})
|
||||
return res.status === 200
|
||||
} catch (error) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
33
src/renderer/apis/qiniu.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import Qiniu from 'qiniu'
|
||||
|
||||
export default class QiniuApi {
|
||||
static async delete (configMap: IStringKeyMap): Promise<boolean> {
|
||||
const { fileName, config: { accessKey, secretKey, bucket, path } } = configMap
|
||||
const mac = new Qiniu.auth.digest.Mac(accessKey, secretKey)
|
||||
const qiniuConfig = new Qiniu.conf.Config()
|
||||
try {
|
||||
const bucketManager = new Qiniu.rs.BucketManager(mac, qiniuConfig)
|
||||
let key = ''
|
||||
if (path === '/' || !path) {
|
||||
key = fileName
|
||||
} else {
|
||||
key = `${path.replace(/^\//, '').replace(/\/$/, '')}/${fileName}`
|
||||
}
|
||||
const res = await new Promise((resolve, reject) => {
|
||||
bucketManager.delete(bucket, key, (err, respBody, respInfo) => {
|
||||
if (err) {
|
||||
reject(err)
|
||||
} else {
|
||||
resolve({
|
||||
respBody,
|
||||
respInfo
|
||||
})
|
||||
}
|
||||
})
|
||||
}) as any
|
||||
return res && res.respInfo.statusCode === 200
|
||||
} catch (error) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
23
src/renderer/apis/smms.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import axios from 'axios'
|
||||
|
||||
export default class SmmsApi {
|
||||
static async delete (configMap: IStringKeyMap): Promise<boolean> {
|
||||
const { hash, config: { token } } = configMap
|
||||
if (!hash || !token) {
|
||||
return false
|
||||
} else {
|
||||
const res = await axios.get(
|
||||
`https://smms.app/api/v2/delete/${hash}`, {
|
||||
headers: {
|
||||
Authorization: token
|
||||
},
|
||||
params: {
|
||||
hash,
|
||||
format: 'json'
|
||||
},
|
||||
timeout: 10000
|
||||
})
|
||||
return res.status === 200
|
||||
}
|
||||
}
|
||||
}
|
||||
27
src/renderer/apis/tcyun.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import COS from 'cos-nodejs-sdk-v5'
|
||||
|
||||
export default class TcyunApi {
|
||||
static async delete (configMap: IStringKeyMap): Promise<boolean> {
|
||||
const { fileName, config: { secretId, secretKey, bucket, area, path } } = configMap
|
||||
try {
|
||||
const cos = new COS({
|
||||
SecretId: secretId,
|
||||
SecretKey: secretKey
|
||||
})
|
||||
let key
|
||||
if (path === '/' || !path) {
|
||||
key = `/${fileName}`
|
||||
} else {
|
||||
key = `/${path.replace(/^\//, '').replace(/\/$/, '')}${fileName}`
|
||||
}
|
||||
const result = await cos.deleteObject({
|
||||
Bucket: bucket,
|
||||
Region: area,
|
||||
Key: key
|
||||
})
|
||||
return result.statusCode === 204
|
||||
} catch (error) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
22
src/renderer/apis/upyun.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
// @ts-ignore
|
||||
import Upyun from 'upyun'
|
||||
|
||||
export default class UpyunApi {
|
||||
static async delete (configMap: IStringKeyMap): Promise<boolean> {
|
||||
const { fileName, config: { bucket, operator, password, path } } = configMap
|
||||
try {
|
||||
const service = new Upyun.Service(bucket, operator, password)
|
||||
const client = new Upyun.Client(service)
|
||||
let key
|
||||
if (path === '/' || !path) {
|
||||
key = fileName
|
||||
} else {
|
||||
key = `${path.replace(/^\//, '').replace(/\/$/, '')}/${fileName}`
|
||||
}
|
||||
const result = await client.deleteFile(key)
|
||||
return result
|
||||
} catch (error) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,11 +51,11 @@
|
||||
</el-icon>
|
||||
<span>{{ $T('UPLOAD_AREA') }}</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item :index="routerConfig.MANAGE_MAIN_PAGE">
|
||||
<el-menu-item :index="routerConfig.MANAGE_LOGIN_PAGE">
|
||||
<el-icon>
|
||||
<PictureFilled />
|
||||
<PieChart />
|
||||
</el-icon>
|
||||
<span>{{ $T('PICBEDS_MANAGE') }}</span>
|
||||
<span>管理页面</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item :index="routerConfig.GALLERY_PAGE">
|
||||
<el-icon>
|
||||
@@ -105,8 +105,8 @@
|
||||
</el-icon>
|
||||
</el-col>
|
||||
<el-col
|
||||
:span="19"
|
||||
:offset="5"
|
||||
:span="21"
|
||||
:offset="3"
|
||||
style="height: 100%"
|
||||
class="main-wrapper"
|
||||
:class="{ 'darwin': os === 'darwin' }"
|
||||
@@ -133,7 +133,7 @@
|
||||
width="70%"
|
||||
top="10vh"
|
||||
>
|
||||
{{ $T('PICGO_SPONSOR_TEXT') }}
|
||||
{{ $T('PICLIST_SPONSOR_TEXT') }}
|
||||
<el-row class="support">
|
||||
<el-col :span="12">
|
||||
<img
|
||||
@@ -219,10 +219,11 @@ import {
|
||||
InfoFilled,
|
||||
Minus,
|
||||
CirclePlus,
|
||||
Close
|
||||
Close,
|
||||
PieChart
|
||||
} from '@element-plus/icons-vue'
|
||||
import { ElMessage as $message } from 'element-plus'
|
||||
import { T } from '@/i18n/index'
|
||||
import { T as $T } from '@/i18n/index'
|
||||
import { ref, onBeforeUnmount, Ref, onBeforeMount, watch, nextTick, reactive } from 'vue'
|
||||
import { onBeforeRouteUpdate, useRouter } from 'vue-router'
|
||||
import QrcodeVue from 'qrcode.vue'
|
||||
@@ -299,18 +300,6 @@ const handleSelect = (index: string) => {
|
||||
type
|
||||
}
|
||||
})
|
||||
// if (this.$builtInPicBed.includes(picBed)) {
|
||||
// this.$router.push({
|
||||
// name: picBed
|
||||
// })
|
||||
// } else {
|
||||
// this.$router.push({
|
||||
// name: 'others',
|
||||
// params: {
|
||||
// type: picBed
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -332,7 +321,7 @@ function openMiniWindow () {
|
||||
|
||||
function handleCopyPicBedConfig () {
|
||||
clipboard.writeText(picBedConfigString.value)
|
||||
$message.success(T('COPY_PICBED_CONFIG_SUCCEED'))
|
||||
$message.success($T('COPY_PICBED_CONFIG_SUCCEED'))
|
||||
}
|
||||
|
||||
function getPicBeds (event: IpcRendererEvent, picBeds: IPicBedType[]) {
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
<template>
|
||||
<div id="appm">
|
||||
{{ test }}
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
const test = 'test'
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="stylus">
|
||||
</style>
|
||||
BIN
src/renderer/manage/pages/assets/aliyun.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
src/renderer/manage/pages/assets/github.png
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
src/renderer/manage/pages/assets/icons/3g2.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/renderer/manage/pages/assets/icons/3gp.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
src/renderer/manage/pages/assets/icons/7z.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
src/renderer/manage/pages/assets/icons/_blank.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
src/renderer/manage/pages/assets/icons/_page.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
src/renderer/manage/pages/assets/icons/aac.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
src/renderer/manage/pages/assets/icons/accdb.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
src/renderer/manage/pages/assets/icons/adt.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
src/renderer/manage/pages/assets/icons/ai.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
src/renderer/manage/pages/assets/icons/aiff.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
src/renderer/manage/pages/assets/icons/aly.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/manage/pages/assets/icons/amiga.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/renderer/manage/pages/assets/icons/amr.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
src/renderer/manage/pages/assets/icons/ape.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
src/renderer/manage/pages/assets/icons/apk.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
src/renderer/manage/pages/assets/icons/arj.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/manage/pages/assets/icons/asf.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/manage/pages/assets/icons/asm.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/renderer/manage/pages/assets/icons/asx.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/renderer/manage/pages/assets/icons/au.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
src/renderer/manage/pages/assets/icons/avc.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/renderer/manage/pages/assets/icons/avi.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
src/renderer/manage/pages/assets/icons/avs.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/renderer/manage/pages/assets/icons/bak.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
src/renderer/manage/pages/assets/icons/bas.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/renderer/manage/pages/assets/icons/bat.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
src/renderer/manage/pages/assets/icons/bmp.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
src/renderer/manage/pages/assets/icons/bom.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/renderer/manage/pages/assets/icons/c.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
src/renderer/manage/pages/assets/icons/cda.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/renderer/manage/pages/assets/icons/cdr.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
src/renderer/manage/pages/assets/icons/chm.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/manage/pages/assets/icons/class.png
Normal file
|
After Width: | Height: | Size: 271 KiB |
BIN
src/renderer/manage/pages/assets/icons/cmd.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
src/renderer/manage/pages/assets/icons/com.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/renderer/manage/pages/assets/icons/cpp.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
src/renderer/manage/pages/assets/icons/css.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
src/renderer/manage/pages/assets/icons/csv.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
src/renderer/manage/pages/assets/icons/dart.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
src/renderer/manage/pages/assets/icons/dat.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
src/renderer/manage/pages/assets/icons/ddb.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
src/renderer/manage/pages/assets/icons/dif.png
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
BIN
src/renderer/manage/pages/assets/icons/divx.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/renderer/manage/pages/assets/icons/dll.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
src/renderer/manage/pages/assets/icons/dmg.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/renderer/manage/pages/assets/icons/doc.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
src/renderer/manage/pages/assets/icons/docm.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
src/renderer/manage/pages/assets/icons/docx.png
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
src/renderer/manage/pages/assets/icons/dot.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/manage/pages/assets/icons/dotm.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
src/renderer/manage/pages/assets/icons/dotx.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
src/renderer/manage/pages/assets/icons/dsl.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/manage/pages/assets/icons/dv.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
src/renderer/manage/pages/assets/icons/dvd.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/manage/pages/assets/icons/dvdaudio.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
src/renderer/manage/pages/assets/icons/dwg.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
src/renderer/manage/pages/assets/icons/dxf.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
src/renderer/manage/pages/assets/icons/emf.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
src/renderer/manage/pages/assets/icons/env.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/manage/pages/assets/icons/eot.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
src/renderer/manage/pages/assets/icons/eps.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
src/renderer/manage/pages/assets/icons/exe.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
src/renderer/manage/pages/assets/icons/exif.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
src/renderer/manage/pages/assets/icons/fakesmms.png
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
src/renderer/manage/pages/assets/icons/flc.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
src/renderer/manage/pages/assets/icons/fli.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
src/renderer/manage/pages/assets/icons/flv.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
src/renderer/manage/pages/assets/icons/folder.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
src/renderer/manage/pages/assets/icons/fon.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/manage/pages/assets/icons/font.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/manage/pages/assets/icons/for.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/manage/pages/assets/icons/fpx.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/manage/pages/assets/icons/fv.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
src/renderer/manage/pages/assets/icons/gif.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
src/renderer/manage/pages/assets/icons/gitingore.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
src/renderer/manage/pages/assets/icons/gitkeep.png
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
src/renderer/manage/pages/assets/icons/gz.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/manage/pages/assets/icons/h.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
src/renderer/manage/pages/assets/icons/hdri.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/manage/pages/assets/icons/hlp.png
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/renderer/manage/pages/assets/icons/hpp.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
src/renderer/manage/pages/assets/icons/htm.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
src/renderer/manage/pages/assets/icons/html.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
src/renderer/manage/pages/assets/icons/ico.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
src/renderer/manage/pages/assets/icons/ics.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
src/renderer/manage/pages/assets/icons/int.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
src/renderer/manage/pages/assets/icons/ipynb.png
Normal file
|
After Width: | Height: | Size: 34 KiB |