mirror of
https://github.com/Kuingsmile/PicList.git
synced 2025-02-02 19:18:13 -05:00
✨ Feature: add config sync module
This commit is contained in:
parent
6f19cb0cfa
commit
ab4e31f62a
@ -198,6 +198,32 @@ SETTINGS_ENCODE_OUTPUT_URL: Encode Output(or Copyed) URL
|
|||||||
SETTINGS_WATCH_CLIPBOARD: Watch clipboard when software start
|
SETTINGS_WATCH_CLIPBOARD: Watch clipboard when software start
|
||||||
SETTINGS_SHORT_URL: Use short url
|
SETTINGS_SHORT_URL: Use short url
|
||||||
SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: Delete local file after upload
|
SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: Delete local file after upload
|
||||||
|
SETTINGS_SYNC_CONFIG: Settings Sync Configuration
|
||||||
|
SETTINGS_SYNC_CONFIG_TITLE: Sync Settings
|
||||||
|
SETTINGS_SYNC_CONFIG_NOTE: The files to be synchronized include both configuration files and gallery files.
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_TYPE: Select sync method
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_FILE: Select files to sync
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_CONFIG: Configuration files only
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_GALLERY: Gallery files only
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_BOTH: Both configuration and gallery files
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: username
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_USERNAME: username
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_REPO: repository (private)
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_REPO: repository (private)
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: branch
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_BRANCH: branch
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: Token
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_TOKEN: Token
|
||||||
|
SETTINGS_SYNC_CONFIG_PROXY: Proxy
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER: Please enter GitHub username
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER: Please enter Gitee username
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER: Please enter GitHub repository name
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER: Please enter Gitee repository name
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER: Please enter GitHub branch name
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER: Please enter Gitee branch name
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: Please enter GitHub Token
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: Please enter Gitee Token
|
||||||
|
SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: Please enter proxy
|
||||||
# shortcut-page
|
# shortcut-page
|
||||||
|
|
||||||
BUILTIN_CLIPBOARD_TIPS: Use builtin clipboard function to upload instead of using scripts
|
BUILTIN_CLIPBOARD_TIPS: Use builtin clipboard function to upload instead of using scripts
|
||||||
|
@ -200,6 +200,32 @@ SETTINGS_ENCODE_OUTPUT_URL: 输出(复制) URL 时进行转义
|
|||||||
SETTINGS_WATCH_CLIPBOARD: 软件启动时自动监听剪贴板上传
|
SETTINGS_WATCH_CLIPBOARD: 软件启动时自动监听剪贴板上传
|
||||||
SETTINGS_SHORT_URL: 使用短链接
|
SETTINGS_SHORT_URL: 使用短链接
|
||||||
SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: 上传后删除本地文件
|
SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: 上传后删除本地文件
|
||||||
|
SETTINGS_SYNC_CONFIG: 设置配置同步
|
||||||
|
SETTINGS_SYNC_CONFIG_TITLE: 同步设置
|
||||||
|
SETTINGS_SYNC_CONFIG_NOTE: 同步的文件包括配置文件和相册文件
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_TYPE: 选择同步方式
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_FILE: 选择同步文件
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_CONFIG: 仅配置文件
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_GALLERY: 仅相册文件
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_BOTH: 配置文件和相册文件
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: GitHub用户名
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_USERNAME: Gitee用户名
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_REPO: 仓库(私有)
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_REPO: 仓库(私有)
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: GitHub分支
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_BRANCH: Gitee分支
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: GitHub Token
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_TOKEN: Gitee Token
|
||||||
|
SETTINGS_SYNC_CONFIG_PROXY: 代理
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER: 请输入GitHub用户名
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER: 请输入Gitee用户名
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER: 请输入GitHub仓库名
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER: 请输入Gitee仓库名
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER: 请输入GitHub分支名
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER: 请输入Gitee分支名
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: 请输入GitHub Token
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: 请输入Gitee Token
|
||||||
|
SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: 请输入代理地址
|
||||||
# shortcut-page
|
# shortcut-page
|
||||||
|
|
||||||
SHORTCUT_NAME: 快捷键名称
|
SHORTCUT_NAME: 快捷键名称
|
||||||
|
@ -198,6 +198,33 @@ SETTINGS_ENCODE_OUTPUT_URL: 輸出(複製) URL 時進行轉義
|
|||||||
SETTINGS_WATCH_CLIPBOARD: 軟體啟動時自動監聽剪貼簿上傳
|
SETTINGS_WATCH_CLIPBOARD: 軟體啟動時自動監聽剪貼簿上傳
|
||||||
SETTINGS_SHORT_URL: 使用短網址
|
SETTINGS_SHORT_URL: 使用短網址
|
||||||
SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: 上傳後刪除本地檔案
|
SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: 上傳後刪除本地檔案
|
||||||
|
SETTINGS_SYNC_CONFIG: 設置同步配置
|
||||||
|
SETTINGS_SYNC_CONFIG_TITLE: 同步設置
|
||||||
|
SETTINGS_SYNC_CONFIG_NOTE: 同步的檔案包括配置檔案和相簿檔案
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_TYPE: 選擇同步方式
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_FILE: 選擇同步檔案
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_CONFIG: 僅配置檔案
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_GALLERY: 僅相簿檔案
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_BOTH: 配置檔案和相簿檔案
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: 用戶名
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_USERNAME: 用戶名
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_REPO: 儲存庫(私有)
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_REPO: 儲存庫(私有)
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: GitHub 分支
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_BRANCH: Gitee 分支
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: GitHub Token
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_TOKEN: Gitee Token
|
||||||
|
SETTINGS_SYNC_CONFIG_PROXY: 代理
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER: 請輸入 GitHub 用戶名
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER: 請輸入 Gitee 用戶名
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER: 請輸入 GitHub 儲存庫名稱
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER: 請輸入 Gitee 儲存庫名稱
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER: 請輸入 GitHub 分支名稱
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER: 請輸入 Gitee 分支名稱
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: 請輸入 GitHub Token
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: 請輸入 Gitee Token
|
||||||
|
SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: 請輸入代理地址
|
||||||
|
|
||||||
# shortcut-page
|
# shortcut-page
|
||||||
|
|
||||||
SHORTCUT_NAME: 快捷鍵名稱
|
SHORTCUT_NAME: 快捷鍵名稱
|
||||||
|
@ -25,9 +25,6 @@ import 'video.js/dist/video-js.css'
|
|||||||
|
|
||||||
webFrame.setVisualZoomLevelLimits(1, 1)
|
webFrame.setVisualZoomLevelLimits(1, 1)
|
||||||
|
|
||||||
// do here before vue init
|
|
||||||
// handleURLParams()
|
|
||||||
|
|
||||||
const app = createApp(App)
|
const app = createApp(App)
|
||||||
|
|
||||||
app.config.globalProperties.$builtInPicBed = [
|
app.config.globalProperties.$builtInPicBed = [
|
||||||
|
@ -48,6 +48,7 @@ import clipboardPoll from '../utils/clipboardPoll'
|
|||||||
import path from 'path'
|
import path from 'path'
|
||||||
import { CLIPBOARD_IMAGE_FOLDER } from '~/universal/utils/static'
|
import { CLIPBOARD_IMAGE_FOLDER } from '~/universal/utils/static'
|
||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
|
import { syncInterval } from '../utils/syncSettings'
|
||||||
const isDevelopment = process.env.NODE_ENV !== 'production'
|
const isDevelopment = process.env.NODE_ENV !== 'production'
|
||||||
|
|
||||||
const handleStartUpFiles = (argv: string[], cwd: string) => {
|
const handleStartUpFiles = (argv: string[], cwd: string) => {
|
||||||
@ -201,6 +202,7 @@ class LifeCycle {
|
|||||||
}
|
}
|
||||||
const clipboardDir = path.join(picgo.baseDir, CLIPBOARD_IMAGE_FOLDER)
|
const clipboardDir = path.join(picgo.baseDir, CLIPBOARD_IMAGE_FOLDER)
|
||||||
fs.ensureDir(clipboardDir)
|
fs.ensureDir(clipboardDir)
|
||||||
|
syncInterval()
|
||||||
}
|
}
|
||||||
app.whenReady().then(readyFunction)
|
app.whenReady().then(readyFunction)
|
||||||
}
|
}
|
||||||
|
306
src/main/utils/syncSettings.ts
Normal file
306
src/main/utils/syncSettings.ts
Normal file
@ -0,0 +1,306 @@
|
|||||||
|
import { app } from 'electron'
|
||||||
|
import fs from 'fs-extra'
|
||||||
|
import path from 'path'
|
||||||
|
import axios from 'axios'
|
||||||
|
import db from '~/main/apis/core/datastore'
|
||||||
|
import { HttpsProxyAgent } from 'hpagent'
|
||||||
|
import { Octokit } from '@octokit/rest'
|
||||||
|
import logger from 'apis/core/picgo/logger'
|
||||||
|
|
||||||
|
const STORE_PATH = app.getPath('userData')
|
||||||
|
|
||||||
|
const configFileNames = [
|
||||||
|
'data.json',
|
||||||
|
'data.bak.json',
|
||||||
|
'manage.json',
|
||||||
|
'manage.bak.json',
|
||||||
|
'piclist-remote-notice.json',
|
||||||
|
'UpDownTaskQueue.json'
|
||||||
|
]
|
||||||
|
|
||||||
|
function getOctokit (syncConfig: any) {
|
||||||
|
const { token, proxy } = syncConfig
|
||||||
|
return new Octokit({
|
||||||
|
auth: token,
|
||||||
|
request: {
|
||||||
|
agent: proxy
|
||||||
|
? new HttpsProxyAgent({
|
||||||
|
keepAlive: true,
|
||||||
|
keepAliveMsecs: 1000,
|
||||||
|
rejectUnauthorized: false,
|
||||||
|
proxy: proxy.replace('127.0.0.1', 'localhost'),
|
||||||
|
scheduling: 'lifo'
|
||||||
|
})
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSyncConfig () {
|
||||||
|
const syncConfig = db.get('settings.sync') || {
|
||||||
|
type: 'github',
|
||||||
|
username: '',
|
||||||
|
repo: '',
|
||||||
|
branch: '',
|
||||||
|
token: '',
|
||||||
|
proxy: ''
|
||||||
|
}
|
||||||
|
return syncConfig
|
||||||
|
}
|
||||||
|
|
||||||
|
function syncConfigValidator (syncConfig: any) {
|
||||||
|
const { type, file, username, repo, branch, token } = syncConfig
|
||||||
|
return type && file && username && repo && branch && token
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getModifiedTime (syncConfig: IStringKeyMap, filePath: string) {
|
||||||
|
const { username, repo, branch, token, type } = syncConfig
|
||||||
|
if (type === 'gitee') {
|
||||||
|
const url = `https://gitee.com/api/v5/repos/${username}/${repo}/commits`
|
||||||
|
const res = await axios.get(url, {
|
||||||
|
params: {
|
||||||
|
access_token: token,
|
||||||
|
ref: branch,
|
||||||
|
path: filePath
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const data = res.data
|
||||||
|
if (data.length > 0) {
|
||||||
|
return data[0].commit.committer.date
|
||||||
|
} else {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const octokit = getOctokit(syncConfig)
|
||||||
|
try {
|
||||||
|
const res = await octokit.rest.repos.listCommits({
|
||||||
|
owner: username,
|
||||||
|
repo,
|
||||||
|
ref: branch,
|
||||||
|
path: filePath,
|
||||||
|
per_page: 1
|
||||||
|
})
|
||||||
|
if (res.status === 200) {
|
||||||
|
return res.data.length > 0 ? res.data[0].commit.committer?.date : null
|
||||||
|
} else {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
} catch (error: any) {
|
||||||
|
logger.error(error)
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getModifiedTimeOfLocal (filePath: string) {
|
||||||
|
if (!fs.existsSync(filePath)) {
|
||||||
|
return new Date(0)
|
||||||
|
}
|
||||||
|
const stat = await fs.stat(filePath)
|
||||||
|
return stat.mtime
|
||||||
|
}
|
||||||
|
|
||||||
|
async function compareNewerFile (syncConfig: IStringKeyMap, fileName: string): Promise<'upload' | 'download' | 'update' | undefined> {
|
||||||
|
const localFilePath = path.join(STORE_PATH, fileName)
|
||||||
|
const remoteModifiedTime = await getModifiedTime(syncConfig, fileName)
|
||||||
|
if (remoteModifiedTime === null) {
|
||||||
|
return 'upload'
|
||||||
|
}
|
||||||
|
const localModifiedTime = await getModifiedTimeOfLocal(localFilePath)
|
||||||
|
if (remoteModifiedTime && localModifiedTime) {
|
||||||
|
return Date.parse(remoteModifiedTime) > localModifiedTime.getTime() ? 'download' : 'update'
|
||||||
|
} else {
|
||||||
|
throw new Error('get modified time failed')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function uploadLocalToRemote (syncConfig: IStringKeyMap, fileName: string) {
|
||||||
|
const localFilePath = path.join(STORE_PATH, fileName)
|
||||||
|
const { username, repo, branch, token, type } = syncConfig
|
||||||
|
if (type === 'gitee') {
|
||||||
|
const url = `https://gitee.com/api/v5/repos/${username}/${repo}/contents/${fileName}`
|
||||||
|
const res = await axios.post(url, {
|
||||||
|
access_token: token,
|
||||||
|
branch,
|
||||||
|
content: fs.readFileSync(localFilePath, { encoding: 'base64' }),
|
||||||
|
message: `upload ${fileName} from PicList`
|
||||||
|
})
|
||||||
|
return res.status >= 200 && res.status < 300
|
||||||
|
} else {
|
||||||
|
const octokit = getOctokit(syncConfig)
|
||||||
|
try {
|
||||||
|
const res = await octokit.rest.repos.createOrUpdateFileContents({
|
||||||
|
owner: username,
|
||||||
|
repo,
|
||||||
|
path: fileName,
|
||||||
|
message: `upload ${fileName} from PicList`,
|
||||||
|
content: fs.readFileSync(localFilePath, { encoding: 'base64' }),
|
||||||
|
branch
|
||||||
|
})
|
||||||
|
return res.status === 200
|
||||||
|
} catch (error: any) {
|
||||||
|
logger.error(error)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function updateLocalToRemote (syncConfig: IStringKeyMap, fileName: string) {
|
||||||
|
const localFilePath = path.join(STORE_PATH, fileName)
|
||||||
|
const { username, repo, branch, token, type } = syncConfig
|
||||||
|
if (type === 'gitee') {
|
||||||
|
const url = `https://gitee.com/api/v5/repos/${username}/${repo}/contents/${fileName}`
|
||||||
|
const shaRes = await axios.get(url, {
|
||||||
|
params: {
|
||||||
|
access_token: token,
|
||||||
|
ref: branch
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (shaRes.status < 200 || shaRes.status > 300) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
const sha = shaRes.data.sha
|
||||||
|
const res = await axios.put(url, {
|
||||||
|
owner: username,
|
||||||
|
repo,
|
||||||
|
path: fileName,
|
||||||
|
message: `update ${fileName} from PicList`,
|
||||||
|
content: fs.readFileSync(localFilePath, { encoding: 'base64' }),
|
||||||
|
branch,
|
||||||
|
sha,
|
||||||
|
access_token: token
|
||||||
|
})
|
||||||
|
if (res.status >= 200 && res.status < 300) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
const octokit = getOctokit(syncConfig)
|
||||||
|
try {
|
||||||
|
const shaRes = await octokit.rest.repos.getContent({
|
||||||
|
owner: username,
|
||||||
|
repo,
|
||||||
|
path: fileName,
|
||||||
|
ref: branch
|
||||||
|
})
|
||||||
|
if (shaRes.status !== 200) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
const data = shaRes.data as any
|
||||||
|
const sha = data.sha
|
||||||
|
const res = await octokit.rest.repos.createOrUpdateFileContents({
|
||||||
|
owner: username,
|
||||||
|
repo,
|
||||||
|
path: fileName,
|
||||||
|
message: `update ${fileName} from PicList`,
|
||||||
|
content: fs.readFileSync(localFilePath, { encoding: 'base64' }),
|
||||||
|
branch,
|
||||||
|
sha
|
||||||
|
})
|
||||||
|
return res.status === 200
|
||||||
|
} catch (error: any) {
|
||||||
|
logger.error(error)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function downloadRemoteToLocal (syncConfig: IStringKeyMap, fileName: string) {
|
||||||
|
const localFilePath = path.join(STORE_PATH, fileName)
|
||||||
|
const { username, repo, branch, token, proxy, type } = syncConfig
|
||||||
|
if (type === 'gitee') {
|
||||||
|
const url = `https://gitee.com/api/v5/repos/${username}/${repo}/contents/${fileName}`
|
||||||
|
const res = await axios.get(url, {
|
||||||
|
params: {
|
||||||
|
access_token: token,
|
||||||
|
ref: branch
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (res.status >= 200 && res.status < 300) {
|
||||||
|
const content = res.data.content
|
||||||
|
await fs.writeFile(localFilePath, Buffer.from(content, 'base64'))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
const octokit = getOctokit(syncConfig)
|
||||||
|
try {
|
||||||
|
const res = await octokit.rest.repos.getContent({
|
||||||
|
owner: username,
|
||||||
|
repo,
|
||||||
|
path: fileName,
|
||||||
|
ref: branch
|
||||||
|
})
|
||||||
|
if (res.status === 200) {
|
||||||
|
const data = res.data as any
|
||||||
|
const downloadUrl = data.download_url
|
||||||
|
const downloadRes = await axios.get(downloadUrl, {
|
||||||
|
httpsAgent: proxy
|
||||||
|
? new HttpsProxyAgent({
|
||||||
|
keepAlive: true,
|
||||||
|
keepAliveMsecs: 1000,
|
||||||
|
rejectUnauthorized: false,
|
||||||
|
proxy: proxy.replace('127.0.0.1', 'localhost'),
|
||||||
|
scheduling: 'lifo'
|
||||||
|
})
|
||||||
|
: undefined
|
||||||
|
})
|
||||||
|
if (downloadRes.status >= 200 && downloadRes.status < 300) {
|
||||||
|
await fs.writeFile(localFilePath, JSON.stringify(downloadRes.data, null, 2))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
} catch (error: any) {
|
||||||
|
logger.error(error)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function syncFile (syncConfig: IStringKeyMap, fileName: string) {
|
||||||
|
const compareResult = await compareNewerFile(syncConfig, fileName)
|
||||||
|
logger.info(`file ${fileName} compare result: ${compareResult}`)
|
||||||
|
let result = false
|
||||||
|
if (compareResult === 'upload') {
|
||||||
|
result = await uploadLocalToRemote(syncConfig, fileName)
|
||||||
|
} else if (compareResult === 'update') {
|
||||||
|
result = await updateLocalToRemote(syncConfig, fileName)
|
||||||
|
} else if (compareResult === 'download') {
|
||||||
|
result = await downloadRemoteToLocal(syncConfig, fileName)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
async function syncAllFiles (syncConfig: IStringKeyMap) {
|
||||||
|
for (const file of configFileNames) {
|
||||||
|
try {
|
||||||
|
const result = await syncFile(syncConfig, file)
|
||||||
|
if (result) {
|
||||||
|
logger.info(`sync file ${file} success`)
|
||||||
|
}
|
||||||
|
} catch (error: any) {
|
||||||
|
logger.error(`sync file ${file} failed`)
|
||||||
|
logger.error(error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function syncInterval () {
|
||||||
|
const syncConfig = await getSyncConfig()
|
||||||
|
if (!syncConfigValidator(syncConfig)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const syncFunc = async () => {
|
||||||
|
await syncAllFiles(syncConfig)
|
||||||
|
logger.info(`sync all files at ${new Date().toLocaleString()}`)
|
||||||
|
}
|
||||||
|
await syncFunc()
|
||||||
|
setInterval(async () => {
|
||||||
|
syncFunc()
|
||||||
|
}, 1000 * 60 * 10)
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
syncInterval
|
||||||
|
}
|
@ -19,7 +19,7 @@ ea/*
|
|||||||
v-model="currentCustomUrl"
|
v-model="currentCustomUrl"
|
||||||
:placeholder="$T('MANAGE_BUCKET_PAGE_CUSTOM_URL_SELECT_PLACEHOLDER')"
|
:placeholder="$T('MANAGE_BUCKET_PAGE_CUSTOM_URL_SELECT_PLACEHOLDER')"
|
||||||
style="width: 200px;"
|
style="width: 200px;"
|
||||||
@change="handelChangeCustomUrl"
|
@change="handleChangeCustomUrl"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in customUrlList"
|
v-for="item in customUrlList"
|
||||||
@ -33,7 +33,7 @@ ea/*
|
|||||||
v-model="currentCustomUrl"
|
v-model="currentCustomUrl"
|
||||||
:placeholder="$T('MANAGE_BUCKET_PAGE_CUSTOM_URL_INPUT_PLACEHOLDER')"
|
:placeholder="$T('MANAGE_BUCKET_PAGE_CUSTOM_URL_INPUT_PLACEHOLDER')"
|
||||||
style="width: 200px;"
|
style="width: 200px;"
|
||||||
@blur="handelChangeCustomUrl"
|
@blur="handleChangeCustomUrl"
|
||||||
/>
|
/>
|
||||||
<el-link
|
<el-link
|
||||||
v-else
|
v-else
|
||||||
@ -90,7 +90,7 @@ ea/*
|
|||||||
>
|
>
|
||||||
<el-button
|
<el-button
|
||||||
type="text"
|
type="text"
|
||||||
@click="handelCreateFolder"
|
@click="handleCreateFolder"
|
||||||
>
|
>
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
class="item"
|
class="item"
|
||||||
@ -129,7 +129,7 @@ ea/*
|
|||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@click="handelBatchRenameFile"
|
@click="handleBatchRenameFile"
|
||||||
>
|
>
|
||||||
<el-button type="text">
|
<el-button type="text">
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
@ -162,7 +162,7 @@ ea/*
|
|||||||
size="25px"
|
size="25px"
|
||||||
:color="selectedItems.length > 0 ? 'red' : 'gray'"
|
:color="selectedItems.length > 0 ? 'red' : 'gray'"
|
||||||
style="margin-left: 10px;"
|
style="margin-left: 10px;"
|
||||||
@click="handelBatchCopyLink(manageStore.config.settings.customPasteFormat)"
|
@click="handleBatchCopyLink(manageStore.config.settings.customPasteFormat)"
|
||||||
>
|
>
|
||||||
<Link />
|
<Link />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
@ -171,7 +171,7 @@ ea/*
|
|||||||
<el-dropdown-item
|
<el-dropdown-item
|
||||||
v-for="i in [...linkArray, { key: 'preSignURL', value: 'preSignedUrl' }]"
|
v-for="i in [...linkArray, { key: 'preSignURL', value: 'preSignedUrl' }]"
|
||||||
:key="i.key"
|
:key="i.key"
|
||||||
@click="handelBatchCopyLink(i.value)"
|
@click="handleBatchCopyLink(i.value)"
|
||||||
>
|
>
|
||||||
{{ i.key }}
|
{{ i.key }}
|
||||||
</el-dropdown-item>
|
</el-dropdown-item>
|
||||||
@ -180,7 +180,7 @@ ea/*
|
|||||||
v-for="i in linkArray"
|
v-for="i in linkArray"
|
||||||
v-else
|
v-else
|
||||||
:key="i.value+i.key"
|
:key="i.value+i.key"
|
||||||
@click="handelBatchCopyLink(i.value)"
|
@click="handleBatchCopyLink(i.value)"
|
||||||
>
|
>
|
||||||
{{ i.key }}
|
{{ i.key }}
|
||||||
</el-dropdown-item>
|
</el-dropdown-item>
|
||||||
@ -202,7 +202,7 @@ ea/*
|
|||||||
size="25px"
|
size="25px"
|
||||||
:color="selectedItems.length > 0 ? 'red' : 'gray'"
|
:color="selectedItems.length > 0 ? 'red' : 'gray'"
|
||||||
style="margin-left: 10px;"
|
style="margin-left: 10px;"
|
||||||
@click="handelBatchCopyInfo"
|
@click="handleBatchCopyInfo"
|
||||||
>
|
>
|
||||||
<Document />
|
<Document />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
@ -323,7 +323,7 @@ ea/*
|
|||||||
type="warning"
|
type="warning"
|
||||||
plain
|
plain
|
||||||
style="margin-right: 2px;"
|
style="margin-right: 2px;"
|
||||||
@click="handelCancelCheck"
|
@click="handleCancelCheck"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_PAGE_SELECT_NONE') }}
|
{{ $T('MANAGE_BUCKET_PAGE_SELECT_NONE') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -354,7 +354,7 @@ ea/*
|
|||||||
plain
|
plain
|
||||||
:icon="Download"
|
:icon="Download"
|
||||||
style="margin-right: 2px;"
|
style="margin-right: 2px;"
|
||||||
@click="handelBatchDownload"
|
@click="handleBatchDownload"
|
||||||
>
|
>
|
||||||
{{ `${$T('MANAGE_BUCKET_DOWNLOAD_BTN')}(${selectedItems.filter(item => item.isDir === false).length})` }}
|
{{ `${$T('MANAGE_BUCKET_DOWNLOAD_BTN')}(${selectedItems.filter(item => item.isDir === false).length})` }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -363,7 +363,7 @@ ea/*
|
|||||||
size="small"
|
size="small"
|
||||||
type="danger"
|
type="danger"
|
||||||
:icon="DeleteFilled"
|
:icon="DeleteFilled"
|
||||||
@click="handelBatchDeleteInfo"
|
@click="handleBatchDeleteInfo"
|
||||||
>
|
>
|
||||||
{{ `${$T('MANAGE_BUCKET_DELETE_BTN')}${selectedItems.length}` }}
|
{{ `${$T('MANAGE_BUCKET_DELETE_BTN')}${selectedItems.length}` }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -444,7 +444,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
style="font-size: 12px;font-weight: 500;"
|
style="font-size: 12px;font-weight: 500;"
|
||||||
@click="handelUploadFromUrl"
|
@click="handleUploadFromUrl"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM') }}
|
{{ $T('MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -571,7 +571,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
size="20"
|
size="20"
|
||||||
style="cursor: pointer;"
|
style="cursor: pointer;"
|
||||||
color="crimson"
|
color="crimson"
|
||||||
@click="handelFolderBatchDownload(item)"
|
@click="handleFolderBatchDownload(item)"
|
||||||
>
|
>
|
||||||
<Download />
|
<Download />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
@ -833,7 +833,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="Document"
|
:icon="Document"
|
||||||
@click="handelCopyUploadingTaskInfo"
|
@click="handleCopyUploadingTaskInfo"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK') }}
|
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -841,7 +841,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="DeleteFilled"
|
:icon="DeleteFilled"
|
||||||
@click="handelDeleteUploadedTask"
|
@click="handleDeleteUploadedTask"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK') }}
|
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -849,7 +849,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="DeleteFilled"
|
:icon="DeleteFilled"
|
||||||
@click="handelDeleteAllUploadedTask"
|
@click="handleDeleteAllUploadedTask"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK') }}
|
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -886,7 +886,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="Document"
|
:icon="Document"
|
||||||
@click="handelCopyUploadingTaskInfo"
|
@click="handleCopyUploadingTaskInfo"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK') }}
|
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -894,7 +894,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="DeleteFilled"
|
:icon="DeleteFilled"
|
||||||
@click="handelDeleteUploadedTask"
|
@click="handleDeleteUploadedTask"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK') }}
|
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -902,7 +902,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="DeleteFilled"
|
:icon="DeleteFilled"
|
||||||
@click="handelDeleteAllUploadedTask"
|
@click="handleDeleteAllUploadedTask"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK') }}
|
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -939,7 +939,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="Document"
|
:icon="Document"
|
||||||
@click="handelCopyUploadingTaskInfo"
|
@click="handleCopyUploadingTaskInfo"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK') }}
|
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -947,7 +947,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="DeleteFilled"
|
:icon="DeleteFilled"
|
||||||
@click="handelDeleteUploadedTask"
|
@click="handleDeleteUploadedTask"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK') }}
|
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -955,7 +955,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="DeleteFilled"
|
:icon="DeleteFilled"
|
||||||
@click="handelDeleteAllUploadedTask"
|
@click="handleDeleteAllUploadedTask"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK') }}
|
{{ $T('MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -1005,7 +1005,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="Document"
|
:icon="Document"
|
||||||
@click="handelCopyDownloadingTaskInfo"
|
@click="handleCopyDownloadingTaskInfo"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_DOWNLOAD_COPY_TASK') }}
|
{{ $T('MANAGE_BUCKET_DOWNLOAD_COPY_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -1013,7 +1013,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="DeleteFilled"
|
:icon="DeleteFilled"
|
||||||
@click="handelDeleteDownloadedTask"
|
@click="handleDeleteDownloadedTask"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK') }}
|
{{ $T('MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -1021,7 +1021,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="DeleteFilled"
|
:icon="DeleteFilled"
|
||||||
@click="handelDeleteAllDownloadedTask"
|
@click="handleDeleteAllDownloadedTask"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK') }}
|
{{ $T('MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -1029,7 +1029,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="Folder"
|
:icon="Folder"
|
||||||
@click="handelOpenDownloadedFolder"
|
@click="handleOpenDownloadedFolder"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER') }}
|
{{ $T('MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -1066,7 +1066,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="Document"
|
:icon="Document"
|
||||||
@click="handelCopyDownloadingTaskInfo"
|
@click="handleCopyDownloadingTaskInfo"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_DOWNLOAD_COPY_TASK') }}
|
{{ $T('MANAGE_BUCKET_DOWNLOAD_COPY_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -1074,7 +1074,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="DeleteFilled"
|
:icon="DeleteFilled"
|
||||||
@click="handelDeleteDownloadedTask"
|
@click="handleDeleteDownloadedTask"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK') }}
|
{{ $T('MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -1082,7 +1082,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="DeleteFilled"
|
:icon="DeleteFilled"
|
||||||
@click="handelDeleteAllDownloadedTask"
|
@click="handleDeleteAllDownloadedTask"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK') }}
|
{{ $T('MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -1090,7 +1090,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="Folder"
|
:icon="Folder"
|
||||||
@click="handelOpenDownloadedFolder"
|
@click="handleOpenDownloadedFolder"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER') }}
|
{{ $T('MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -1127,7 +1127,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="Document"
|
:icon="Document"
|
||||||
@click="handelCopyDownloadingTaskInfo"
|
@click="handleCopyDownloadingTaskInfo"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_DOWNLOAD_COPY_TASK') }}
|
{{ $T('MANAGE_BUCKET_DOWNLOAD_COPY_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -1135,7 +1135,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="DeleteFilled"
|
:icon="DeleteFilled"
|
||||||
@click="handelDeleteDownloadedTask"
|
@click="handleDeleteDownloadedTask"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK') }}
|
{{ $T('MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -1143,7 +1143,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="DeleteFilled"
|
:icon="DeleteFilled"
|
||||||
@click="handelDeleteAllDownloadedTask"
|
@click="handleDeleteAllDownloadedTask"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK') }}
|
{{ $T('MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -1151,7 +1151,7 @@ https://www.baidu.com/img/bd_logo1.png"
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="Folder"
|
:icon="Folder"
|
||||||
@click="handelOpenDownloadedFolder"
|
@click="handleOpenDownloadedFolder"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER') }}
|
{{ $T('MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -1632,7 +1632,7 @@ function webkitReadDataTransfer (dataTransfer: DataTransfer) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
handelUploadFiles(files)
|
handleUploadFiles(files)
|
||||||
isLoadingUploadPanelFiles.value = false
|
isLoadingUploadPanelFiles.value = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1682,7 +1682,7 @@ function webkitReadDataTransfer (dataTransfer: DataTransfer) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelUploadFiles (files: any[]) {
|
function handleUploadFiles (files: any[]) {
|
||||||
const dirObj = {} as any
|
const dirObj = {} as any
|
||||||
files.forEach((item) => {
|
files.forEach((item) => {
|
||||||
if (item.relativePath === item.name) {
|
if (item.relativePath === item.name) {
|
||||||
@ -1784,37 +1784,37 @@ function uploadFiles () {
|
|||||||
ipcRenderer.send('uploadBucketFile', configMap.alias, param)
|
ipcRenderer.send('uploadBucketFile', configMap.alias, param)
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelCopyUploadingTaskInfo () {
|
function handleCopyUploadingTaskInfo () {
|
||||||
clipboard.writeText(JSON.stringify(uploadTaskList.value, null, 2))
|
clipboard.writeText(JSON.stringify(uploadTaskList.value, null, 2))
|
||||||
ElMessage.success($T('MANAGE_BUCKET_COPY_SUCCESS'))
|
ElMessage.success($T('MANAGE_BUCKET_COPY_SUCCESS'))
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelCopyDownloadingTaskInfo () {
|
function handleCopyDownloadingTaskInfo () {
|
||||||
clipboard.writeText(JSON.stringify(downloadTaskList.value, null, 2))
|
clipboard.writeText(JSON.stringify(downloadTaskList.value, null, 2))
|
||||||
ElMessage.success($T('MANAGE_BUCKET_COPY_SUCCESS'))
|
ElMessage.success($T('MANAGE_BUCKET_COPY_SUCCESS'))
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelDeleteUploadedTask () {
|
function handleDeleteUploadedTask () {
|
||||||
ipcRenderer.send('deleteUploadedTask')
|
ipcRenderer.send('deleteUploadedTask')
|
||||||
ElMessage.success($T('MANAGE_BUCKET_DELETE_SUCCESS'))
|
ElMessage.success($T('MANAGE_BUCKET_DELETE_SUCCESS'))
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelDeleteAllUploadedTask () {
|
function handleDeleteAllUploadedTask () {
|
||||||
ipcRenderer.send('deleteAllUploadedTask')
|
ipcRenderer.send('deleteAllUploadedTask')
|
||||||
ElMessage.success($T('MANAGE_BUCKET_DELETE_SUCCESS'))
|
ElMessage.success($T('MANAGE_BUCKET_DELETE_SUCCESS'))
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelDeleteDownloadedTask () {
|
function handleDeleteDownloadedTask () {
|
||||||
ipcRenderer.send('deleteDownloadedTask')
|
ipcRenderer.send('deleteDownloadedTask')
|
||||||
ElMessage.success($T('MANAGE_BUCKET_DELETE_SUCCESS'))
|
ElMessage.success($T('MANAGE_BUCKET_DELETE_SUCCESS'))
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelDeleteAllDownloadedTask () {
|
function handleDeleteAllDownloadedTask () {
|
||||||
ipcRenderer.send('deleteAllDownloadedTask')
|
ipcRenderer.send('deleteAllDownloadedTask')
|
||||||
ElMessage.success($T('MANAGE_BUCKET_DELETE_SUCCESS'))
|
ElMessage.success($T('MANAGE_BUCKET_DELETE_SUCCESS'))
|
||||||
}
|
}
|
||||||
|
|
||||||
const handelOpenDownloadedFolder = () => ipcRenderer.send('OpenDownloadedFolder', manageStore.config.settings.downloadDir)
|
const handleOpenDownloadedFolder = () => ipcRenderer.send('OpenDownloadedFolder', manageStore.config.settings.downloadDir)
|
||||||
|
|
||||||
function handleShowFileInfo (item: any) {
|
function handleShowFileInfo (item: any) {
|
||||||
isShowFileInfo.value = true
|
isShowFileInfo.value = true
|
||||||
@ -1902,7 +1902,7 @@ const isShowThumbnail = computed(() => manageStore.config.settings.isShowThumbna
|
|||||||
const isAutoRefresh = computed(() => manageStore.config.settings.isAutoRefresh ?? false)
|
const isAutoRefresh = computed(() => manageStore.config.settings.isAutoRefresh ?? false)
|
||||||
const isIgnoreCase = computed(() => manageStore.config.settings.isIgnoreCase ?? false)
|
const isIgnoreCase = computed(() => manageStore.config.settings.isIgnoreCase ?? false)
|
||||||
|
|
||||||
async function handelChangeCustomUrl () {
|
async function handleChangeCustomUrl () {
|
||||||
if (currentPicBedName.value === 'github') {
|
if (currentPicBedName.value === 'github') {
|
||||||
showLoadingPage.value = true
|
showLoadingPage.value = true
|
||||||
if (isLoadingData.value) {
|
if (isLoadingData.value) {
|
||||||
@ -2006,7 +2006,7 @@ async function initCustomUrlList () {
|
|||||||
currentCustomUrl.value = `https://${configMap.bucketName}.s3.amazonaws.com`
|
currentCustomUrl.value = `https://${configMap.bucketName}.s3.amazonaws.com`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
handelChangeCustomUrl()
|
handleChangeCustomUrl()
|
||||||
} else if (currentPicBedName.value === 'webdavplist') {
|
} else if (currentPicBedName.value === 'webdavplist') {
|
||||||
const currentConfigs = await getConfig<any>('picBed')
|
const currentConfigs = await getConfig<any>('picBed')
|
||||||
const currentConfig = currentConfigs[configMap.alias]
|
const currentConfig = currentConfigs[configMap.alias]
|
||||||
@ -2020,7 +2020,7 @@ async function initCustomUrlList () {
|
|||||||
}
|
}
|
||||||
currentCustomUrl.value = endpoint
|
currentCustomUrl.value = endpoint
|
||||||
}
|
}
|
||||||
handelChangeCustomUrl()
|
handleChangeCustomUrl()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2309,7 +2309,7 @@ function sortFile (type: 'name' | 'size' | 'time' | 'ext' | 'check' | 'init') {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelCancelCheck () {
|
function handleCancelCheck () {
|
||||||
currentPageFilesInfo.forEach((item: any) => {
|
currentPageFilesInfo.forEach((item: any) => {
|
||||||
item.checked = false
|
item.checked = false
|
||||||
})
|
})
|
||||||
@ -2352,7 +2352,7 @@ function handleCheckChange (item: any) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handelFolderBatchDownload (item: any) {
|
async function handleFolderBatchDownload (item: any) {
|
||||||
ElMessageBox.confirm($T('MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TITLE'), $T('MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TIP'), {
|
ElMessageBox.confirm($T('MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TITLE'), $T('MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TIP'), {
|
||||||
confirmButtonText: $T('MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CONFIRM'),
|
confirmButtonText: $T('MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CONFIRM'),
|
||||||
cancelButtonText: $T('MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CANCEL'),
|
cancelButtonText: $T('MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CANCEL'),
|
||||||
@ -2436,7 +2436,7 @@ async function handelFolderBatchDownload (item: any) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handelBatchDownload () {
|
async function handleBatchDownload () {
|
||||||
const defaultDownloadPath = await ipcRenderer.invoke('getDefaultDownloadFolder')
|
const defaultDownloadPath = await ipcRenderer.invoke('getDefaultDownloadFolder')
|
||||||
const param = {
|
const param = {
|
||||||
downloadPath: manageStore.config.settings.downloadDir ?? defaultDownloadPath,
|
downloadPath: manageStore.config.settings.downloadDir ?? defaultDownloadPath,
|
||||||
@ -2459,7 +2459,7 @@ async function handelBatchDownload () {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
ipcRenderer.send('downloadBucketFile', configMap.alias, param)
|
ipcRenderer.send('downloadBucketFile', configMap.alias, param)
|
||||||
handelCancelCheck()
|
handleCancelCheck()
|
||||||
isShowDownloadPanel.value = true
|
isShowDownloadPanel.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2495,7 +2495,7 @@ function handleCheckAllChange () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelCreateFolder () {
|
function handleCreateFolder () {
|
||||||
ElMessageBox.prompt($T('MANAGE_BUCKET_CREATE_FOLDER_BOX_TITLE'), $T('MANAGE_BUCKET_CREATE_FOLDER_BOX_TIP'), {
|
ElMessageBox.prompt($T('MANAGE_BUCKET_CREATE_FOLDER_BOX_TITLE'), $T('MANAGE_BUCKET_CREATE_FOLDER_BOX_TIP'), {
|
||||||
confirmButtonText: $T('MANAGE_BUCKET_CREATE_FOLDER_BOX_CONFIRM'),
|
confirmButtonText: $T('MANAGE_BUCKET_CREATE_FOLDER_BOX_CONFIRM'),
|
||||||
cancelButtonText: $T('MANAGE_BUCKET_CREATE_FOLDER_BOX_CANCEL'),
|
cancelButtonText: $T('MANAGE_BUCKET_CREATE_FOLDER_BOX_CANCEL'),
|
||||||
@ -2524,7 +2524,7 @@ const showUrlDialog = () => {
|
|||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handelUploadFromUrl () {
|
async function handleUploadFromUrl () {
|
||||||
dialogVisible.value = false
|
dialogVisible.value = false
|
||||||
const urlList = [] as string[]
|
const urlList = [] as string[]
|
||||||
urlToUpload.value.split('\n').forEach((item: string) => {
|
urlToUpload.value.split('\n').forEach((item: string) => {
|
||||||
@ -2555,7 +2555,7 @@ async function handelUploadFromUrl () {
|
|||||||
isShowUploadPanel.value = true
|
isShowUploadPanel.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelBatchRenameFile () {
|
function handleBatchRenameFile () {
|
||||||
batchRenameMatch.value = ''
|
batchRenameMatch.value = ''
|
||||||
isSingleRename.value = false
|
isSingleRename.value = false
|
||||||
isShowBatchRenameDialog.value = true
|
isShowBatchRenameDialog.value = true
|
||||||
@ -2686,7 +2686,7 @@ async function BatchRename () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelBatchCopyInfo () {
|
function handleBatchCopyInfo () {
|
||||||
if (selectedItems.length === 0) {
|
if (selectedItems.length === 0) {
|
||||||
ElMessage.warning($T('MANAGE_BUCKET_BATCH_COPY_INFO_ERROR_MSG'))
|
ElMessage.warning($T('MANAGE_BUCKET_BATCH_COPY_INFO_ERROR_MSG'))
|
||||||
return
|
return
|
||||||
@ -2699,7 +2699,7 @@ function handelBatchCopyInfo () {
|
|||||||
ElMessage.success(`${$T('MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A')} ${selectedItems.length} ${$T('MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B')}`)
|
ElMessage.success(`${$T('MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A')} ${selectedItems.length} ${$T('MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B')}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelBatchCopyLink (type: string) {
|
function handleBatchCopyLink (type: string) {
|
||||||
if (selectedItems.length === 0) {
|
if (selectedItems.length === 0) {
|
||||||
ElMessage.warning($T('MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG'))
|
ElMessage.warning($T('MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG'))
|
||||||
return
|
return
|
||||||
@ -2834,7 +2834,7 @@ async function getBucketFileList () {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelBatchDeleteInfo () {
|
function handleBatchDeleteInfo () {
|
||||||
ElMessageBox.confirm(`${$T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_A')} ${selectedItems.length} ${$T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_B')}`, $T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_MSG'), {
|
ElMessageBox.confirm(`${$T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_A')} ${selectedItems.length} ${$T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_B')}`, $T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_MSG'), {
|
||||||
confirmButtonText: $T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CONFIRM'),
|
confirmButtonText: $T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CONFIRM'),
|
||||||
cancelButtonText: $T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CANCEL'),
|
cancelButtonText: $T('MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CANCEL'),
|
||||||
@ -3454,7 +3454,7 @@ const columns: Column<any>[] = [
|
|||||||
size="20"
|
size="20"
|
||||||
style="cursor: pointer;"
|
style="cursor: pointer;"
|
||||||
color="#409EFF"
|
color="#409EFF"
|
||||||
onClick={() => handelFolderBatchDownload(item)}
|
onClick={() => handleFolderBatchDownload(item)}
|
||||||
>
|
>
|
||||||
<Download />
|
<Download />
|
||||||
</ElIcon>
|
</ElIcon>
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
style="position:absolute;right: 0;"
|
style="position:absolute;right: 0;"
|
||||||
active-color="#13ce66"
|
active-color="#13ce66"
|
||||||
inactive-color="#ff4949"
|
inactive-color="#ff4949"
|
||||||
@change="handelIsAutoRefreshChange"
|
@change="handleIsAutoRefreshChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
@ -104,7 +104,7 @@
|
|||||||
style="position:absolute;right: 0;"
|
style="position:absolute;right: 0;"
|
||||||
active-color="#13ce66"
|
active-color="#13ce66"
|
||||||
inactive-color="#ff4949"
|
inactive-color="#ff4949"
|
||||||
@change="handelIsShowThumbnailChange"
|
@change="handleIsShowThumbnailChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
@ -122,7 +122,7 @@
|
|||||||
:inactive-text="$T('MANAGE_SETTING_SHOW_FILE_LIST_TYPE_CARD')"
|
:inactive-text="$T('MANAGE_SETTING_SHOW_FILE_LIST_TYPE_CARD')"
|
||||||
active-color="#13ce66"
|
active-color="#13ce66"
|
||||||
inactive-color="orange"
|
inactive-color="orange"
|
||||||
@change="handelIsShowListChange"
|
@change="handleIsShowListChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
@ -147,7 +147,7 @@
|
|||||||
style="position:absolute;right: 0;"
|
style="position:absolute;right: 0;"
|
||||||
active-color="#13ce66"
|
active-color="#13ce66"
|
||||||
inactive-color="#ff4949"
|
inactive-color="#ff4949"
|
||||||
@change="handelIsForceCustomUrlHttpsChange"
|
@change="handleIsForceCustomUrlHttpsChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
@ -172,7 +172,7 @@
|
|||||||
style="position:absolute;right: 0;"
|
style="position:absolute;right: 0;"
|
||||||
active-color="#13ce66"
|
active-color="#13ce66"
|
||||||
inactive-color="#ff4949"
|
inactive-color="#ff4949"
|
||||||
@change="handelIsUploadKeepDirStructureChange"
|
@change="handleIsUploadKeepDirStructureChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
@ -199,7 +199,7 @@
|
|||||||
style="position:absolute;right: 0;"
|
style="position:absolute;right: 0;"
|
||||||
active-color="#13ce66"
|
active-color="#13ce66"
|
||||||
inactive-color="#ff4949"
|
inactive-color="#ff4949"
|
||||||
@change="handelIsDownloadFileKeepDirStructureChange"
|
@change="handleIsDownloadFileKeepDirStructureChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
@ -226,7 +226,7 @@
|
|||||||
style="position:absolute;right: 0;"
|
style="position:absolute;right: 0;"
|
||||||
active-color="#13ce66"
|
active-color="#13ce66"
|
||||||
inactive-color="#ff4949"
|
inactive-color="#ff4949"
|
||||||
@change="handelIsDownloadFolderKeepDirStructureChange"
|
@change="handleIsDownloadFolderKeepDirStructureChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
@ -277,7 +277,7 @@
|
|||||||
style="position:absolute;right: 0;"
|
style="position:absolute;right: 0;"
|
||||||
active-color="#13ce66"
|
active-color="#13ce66"
|
||||||
inactive-color="#ff4949"
|
inactive-color="#ff4949"
|
||||||
@change="handelisIgnoreCaseChange"
|
@change="handleisIgnoreCaseChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
@ -302,7 +302,7 @@
|
|||||||
style="position:absolute;right: 0;"
|
style="position:absolute;right: 0;"
|
||||||
active-color="#13ce66"
|
active-color="#13ce66"
|
||||||
inactive-color="#ff4949"
|
inactive-color="#ff4949"
|
||||||
@change="handelTimestampRenameChange"
|
@change="handleTimestampRenameChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
@ -327,7 +327,7 @@
|
|||||||
style="position:absolute;right: 0;"
|
style="position:absolute;right: 0;"
|
||||||
active-color="#13ce66"
|
active-color="#13ce66"
|
||||||
inactive-color="#ff4949"
|
inactive-color="#ff4949"
|
||||||
@change="handelRandomStringRenameChange"
|
@change="handleRandomStringRenameChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
@ -352,7 +352,7 @@
|
|||||||
style="position:absolute;right: 0;"
|
style="position:absolute;right: 0;"
|
||||||
active-color="#13ce66"
|
active-color="#13ce66"
|
||||||
inactive-color="#ff4949"
|
inactive-color="#ff4949"
|
||||||
@change="handelCustomRenameChange"
|
@change="handleCustomRenameChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-link
|
<el-link
|
||||||
@ -407,7 +407,7 @@
|
|||||||
v-model="PreSignedExpire"
|
v-model="PreSignedExpire"
|
||||||
:placeholder="$T('MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS')"
|
:placeholder="$T('MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS')"
|
||||||
clearable
|
clearable
|
||||||
@blur="handelPreSignedExpireChange"
|
@blur="handlePreSignedExpireChange"
|
||||||
/>
|
/>
|
||||||
<el-link
|
<el-link
|
||||||
style="margin-top: 10px;margin-bottom: 10px;color: #409eff;"
|
style="margin-top: 10px;margin-bottom: 10px;color: #409eff;"
|
||||||
@ -557,7 +557,7 @@ watch(downloadDir, (val) => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
function handelPreSignedExpireChange () {
|
function handlePreSignedExpireChange () {
|
||||||
if (Number.isNaN(Number(PreSignedExpire.value)) || Number(PreSignedExpire.value) <= 0) {
|
if (Number.isNaN(Number(PreSignedExpire.value)) || Number(PreSignedExpire.value) <= 0) {
|
||||||
PreSignedExpire.value = 14400
|
PreSignedExpire.value = 14400
|
||||||
}
|
}
|
||||||
@ -593,67 +593,67 @@ async function handleDownloadDirClick () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelIsShowThumbnailChange (val:ICheckBoxValueType) {
|
function handleIsShowThumbnailChange (val:ICheckBoxValueType) {
|
||||||
saveConfig({
|
saveConfig({
|
||||||
'settings.isShowThumbnail': val
|
'settings.isShowThumbnail': val
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelIsShowListChange (val:ICheckBoxValueType) {
|
function handleIsShowListChange (val:ICheckBoxValueType) {
|
||||||
saveConfig({
|
saveConfig({
|
||||||
'settings.isShowList': val
|
'settings.isShowList': val
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelisIgnoreCaseChange (val:ICheckBoxValueType) {
|
function handleisIgnoreCaseChange (val:ICheckBoxValueType) {
|
||||||
saveConfig({
|
saveConfig({
|
||||||
'settings.isIgnoreCase': val
|
'settings.isIgnoreCase': val
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelIsAutoRefreshChange (val:ICheckBoxValueType) {
|
function handleIsAutoRefreshChange (val:ICheckBoxValueType) {
|
||||||
saveConfig({
|
saveConfig({
|
||||||
'settings.isAutoRefresh': val
|
'settings.isAutoRefresh': val
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelIsUploadKeepDirStructureChange (val:ICheckBoxValueType) {
|
function handleIsUploadKeepDirStructureChange (val:ICheckBoxValueType) {
|
||||||
saveConfig({
|
saveConfig({
|
||||||
'settings.isUploadKeepDirStructure': val
|
'settings.isUploadKeepDirStructure': val
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelIsDownloadFileKeepDirStructureChange (val:ICheckBoxValueType) {
|
function handleIsDownloadFileKeepDirStructureChange (val:ICheckBoxValueType) {
|
||||||
saveConfig({
|
saveConfig({
|
||||||
'settings.isDownloadFileKeepDirStructure': val
|
'settings.isDownloadFileKeepDirStructure': val
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelIsDownloadFolderKeepDirStructureChange (val:ICheckBoxValueType) {
|
function handleIsDownloadFolderKeepDirStructureChange (val:ICheckBoxValueType) {
|
||||||
saveConfig({
|
saveConfig({
|
||||||
'settings.isDownloadFolderKeepDirStructure': val
|
'settings.isDownloadFolderKeepDirStructure': val
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelIsForceCustomUrlHttpsChange (val:ICheckBoxValueType) {
|
function handleIsForceCustomUrlHttpsChange (val:ICheckBoxValueType) {
|
||||||
saveConfig({
|
saveConfig({
|
||||||
'settings.isForceCustomUrlHttps': val
|
'settings.isForceCustomUrlHttps': val
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelTimestampRenameChange (val:ICheckBoxValueType) {
|
function handleTimestampRenameChange (val:ICheckBoxValueType) {
|
||||||
saveConfig({
|
saveConfig({
|
||||||
'settings.timestampRename': val
|
'settings.timestampRename': val
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelRandomStringRenameChange (val:ICheckBoxValueType) {
|
function handleRandomStringRenameChange (val:ICheckBoxValueType) {
|
||||||
saveConfig({
|
saveConfig({
|
||||||
'settings.randomStringRename': val
|
'settings.randomStringRename': val
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelCustomRenameChange (val:ICheckBoxValueType) {
|
function handleCustomRenameChange (val:ICheckBoxValueType) {
|
||||||
saveConfig({
|
saveConfig({
|
||||||
'settings.customRename': val
|
'settings.customRename': val
|
||||||
})
|
})
|
||||||
|
@ -279,7 +279,7 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
v-model="choosedList[item.id ? item.id : '']"
|
v-model="choosedList[item.id ? item.id : '']"
|
||||||
@change="(val) => handleChooseImage(val, index)"
|
@change="(val: string | number | boolean) => handleChooseImage(val, index)"
|
||||||
/>
|
/>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -410,7 +410,7 @@
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
:icon="Edit"
|
:icon="Edit"
|
||||||
@click="handelBatchRename()"
|
@click="handleBatchRename()"
|
||||||
>
|
>
|
||||||
{{ $T('MANAGE_BUCKET_RENAME_FILE_CONFIRM') }}
|
{{ $T('MANAGE_BUCKET_RENAME_FILE_CONFIRM') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -914,7 +914,7 @@ function sortFile (type: 'name' | 'time' | 'ext' | 'check') {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelBatchRename () {
|
function handleBatchRename () {
|
||||||
isShowBatchRenameDialog.value = false
|
isShowBatchRenameDialog.value = false
|
||||||
if (batchRenameMatch.value === '') {
|
if (batchRenameMatch.value === '') {
|
||||||
ElMessage.warning($T('MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG'))
|
ElMessage.warning($T('MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG'))
|
||||||
|
@ -87,6 +87,18 @@
|
|||||||
@change="handleHideDockChange"
|
@change="handleHideDockChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
:label="$T('SETTINGS_SYNC_CONFIG')"
|
||||||
|
>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
round
|
||||||
|
size="small"
|
||||||
|
@click="syncVisible = true"
|
||||||
|
>
|
||||||
|
{{ $T('SETTINGS_CLICK_TO_SET') }}
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
:label="$T('SETTINGS_MIGRATE_FROM_PICGO')"
|
:label="$T('SETTINGS_MIGRATE_FROM_PICGO')"
|
||||||
>
|
>
|
||||||
@ -94,7 +106,7 @@
|
|||||||
type="primary"
|
type="primary"
|
||||||
round
|
round
|
||||||
size="small"
|
size="small"
|
||||||
@click="handelMigrateFromPicGo"
|
@click="handleMigrateFromPicGo"
|
||||||
>
|
>
|
||||||
{{ $T('SETTINGS_CLICK_TO_SET') }}
|
{{ $T('SETTINGS_CLICK_TO_SET') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -720,7 +732,100 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
<el-dialog
|
||||||
|
v-model="syncVisible"
|
||||||
|
class="server-dialog"
|
||||||
|
width="60%"
|
||||||
|
:title="$T('SETTINGS_SYNC_CONFIG_TITLE')"
|
||||||
|
:modal-append-to-body="false"
|
||||||
|
center
|
||||||
|
>
|
||||||
|
<div class="notice-text">
|
||||||
|
{{ $T('SETTINGS_SYNC_CONFIG_NOTE') }}
|
||||||
|
</div>
|
||||||
|
<el-form
|
||||||
|
label-position="right"
|
||||||
|
label-width="120px"
|
||||||
|
>
|
||||||
|
<el-form-item
|
||||||
|
:label="$T('SETTINGS_SYNC_CONFIG_SELECT_TYPE')"
|
||||||
|
>
|
||||||
|
<el-select
|
||||||
|
v-model="sync.type"
|
||||||
|
style="width: 100%;"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="typeitem of syncType"
|
||||||
|
:key="typeitem.value"
|
||||||
|
:label="typeitem.label"
|
||||||
|
:value="typeitem.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
:label="sync.type === 'github' ? $T('SETTINGS_SYNC_CONFIG_GITHUB_USERNAME') : $T('SETTINGS_SYNC_CONFIG_GITEE_USERNAME')"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model.trim="sync.username"
|
||||||
|
type="input"
|
||||||
|
:placeholder="sync.type === 'github' ? $T('SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER') : $T('SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER')"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
:label="sync.type === 'github' ? $T('SETTINGS_SYNC_CONFIG_GITHUB_REPO') : $T('SETTINGS_SYNC_CONFIG_GITEE_REPO')"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model.trim="sync.repo"
|
||||||
|
type="input"
|
||||||
|
:placeholder="sync.type === 'github' ? $T('SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER') : $T('SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER')"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
:label="sync.type === 'github' ? $T('SETTINGS_SYNC_CONFIG_GITHUB_BRANCH') : $T('SETTINGS_SYNC_CONFIG_GITEE_BRANCH')"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model.trim="sync.branch"
|
||||||
|
type="input"
|
||||||
|
:placeholder="sync.type === 'github' ? $T('SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER') : $T('SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER')"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
:label="sync.type === 'github' ? $T('SETTINGS_SYNC_CONFIG_GITHUB_TOKEN') : $T('SETTINGS_SYNC_CONFIG_GITEE_TOKEN')"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model.trim="sync.token"
|
||||||
|
type="input"
|
||||||
|
:placeholder="sync.type === 'github' ? $T('SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER') : $T('SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER')"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
v-if="sync.type === 'github'"
|
||||||
|
:label="$T('SETTINGS_SYNC_CONFIG_PROXY')"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model.trim="sync.proxy"
|
||||||
|
type="input"
|
||||||
|
:placeholder="$T('SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER')"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<el-button
|
||||||
|
round
|
||||||
|
@click="cancelSyncSetting"
|
||||||
|
>
|
||||||
|
{{ $T('CANCEL') }}
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
round
|
||||||
|
:disabled="!allSynFilled"
|
||||||
|
@click="confirmSyncSetting"
|
||||||
|
>
|
||||||
|
{{ $T('CONFIRM') }}
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
v-model="imageProcessDialogVisible"
|
v-model="imageProcessDialogVisible"
|
||||||
:title="$T('UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE')"
|
:title="$T('UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE')"
|
||||||
@ -938,7 +1043,7 @@
|
|||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="handelSaveConfig"
|
@click="handleSaveConfig"
|
||||||
>
|
>
|
||||||
{{ $T('UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM') }}
|
{{ $T('UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -954,7 +1059,7 @@
|
|||||||
import { ElForm, ElMessage as $message, ElMessage, ElMessageBox, FormRules } from 'element-plus'
|
import { ElForm, ElMessage as $message, ElMessage, ElMessageBox, FormRules } from 'element-plus'
|
||||||
import { Reading, QuestionFilled } from '@element-plus/icons-vue'
|
import { Reading, QuestionFilled } from '@element-plus/icons-vue'
|
||||||
import pkg from 'root/package.json'
|
import pkg from 'root/package.json'
|
||||||
import { PICGO_OPEN_FILE, OPEN_URL, GET_PICBEDS, HIDE_DOCK } from '#/events/constants'
|
import { PICGO_OPEN_FILE, OPEN_URL, GET_PICBEDS, HIDE_DOCK, RELOAD_APP } from '#/events/constants'
|
||||||
import {
|
import {
|
||||||
ipcRenderer
|
ipcRenderer
|
||||||
} from 'electron'
|
} from 'electron'
|
||||||
@ -1017,7 +1122,7 @@ function closeDialog () {
|
|||||||
imageProcessDialogVisible.value = false
|
imageProcessDialogVisible.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelSaveConfig () {
|
function handleSaveConfig () {
|
||||||
saveConfig('buildIn.compress', toRaw(compressForm))
|
saveConfig('buildIn.compress', toRaw(compressForm))
|
||||||
saveConfig('buildIn.watermark', toRaw(waterMarkForm))
|
saveConfig('buildIn.watermark', toRaw(waterMarkForm))
|
||||||
closeDialog()
|
closeDialog()
|
||||||
@ -1101,6 +1206,7 @@ const logFileVisible = ref(false)
|
|||||||
const customLinkVisible = ref(false)
|
const customLinkVisible = ref(false)
|
||||||
const checkUpdateVisible = ref(false)
|
const checkUpdateVisible = ref(false)
|
||||||
const serverVisible = ref(false)
|
const serverVisible = ref(false)
|
||||||
|
const syncVisible = ref(false)
|
||||||
const proxyVisible = ref(false)
|
const proxyVisible = ref(false)
|
||||||
const mainWindowSizeVisible = ref(false)
|
const mainWindowSizeVisible = ref(false)
|
||||||
|
|
||||||
@ -1140,6 +1246,50 @@ const server = ref({
|
|||||||
enable: true
|
enable: true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const sync = ref({
|
||||||
|
type: 'github',
|
||||||
|
username: '',
|
||||||
|
repo: '',
|
||||||
|
branch: '',
|
||||||
|
token: '',
|
||||||
|
proxy: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
const syncType = [
|
||||||
|
{
|
||||||
|
label: 'GitHub',
|
||||||
|
value: 'github'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Gitee',
|
||||||
|
value: 'gitee'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
const allSynFilled = computed(() => {
|
||||||
|
return sync.value.username && sync.value.repo && sync.value.branch && sync.value.token
|
||||||
|
})
|
||||||
|
|
||||||
|
async function cancelSyncSetting () {
|
||||||
|
syncVisible.value = false
|
||||||
|
sync.value = await getConfig('settings.sync') || {
|
||||||
|
type: 'github',
|
||||||
|
username: '',
|
||||||
|
repo: '',
|
||||||
|
branch: '',
|
||||||
|
token: '',
|
||||||
|
proxy: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function confirmSyncSetting () {
|
||||||
|
saveConfig({
|
||||||
|
'settings.sync': sync.value
|
||||||
|
})
|
||||||
|
syncVisible.value = false
|
||||||
|
sendToMain(RELOAD_APP)
|
||||||
|
}
|
||||||
|
|
||||||
const version = pkg.version
|
const version = pkg.version
|
||||||
const latestVersion = ref('')
|
const latestVersion = ref('')
|
||||||
const os = ref('')
|
const os = ref('')
|
||||||
@ -1198,6 +1348,14 @@ async function initData () {
|
|||||||
host: '127.0.0.1',
|
host: '127.0.0.1',
|
||||||
enable: true
|
enable: true
|
||||||
}
|
}
|
||||||
|
sync.value = settings.sync || {
|
||||||
|
type: 'github',
|
||||||
|
username: '',
|
||||||
|
repo: '',
|
||||||
|
branch: '',
|
||||||
|
token: '',
|
||||||
|
proxy: ''
|
||||||
|
}
|
||||||
form.logFileSizeLimit = enforceNumber(settings.logFileSizeLimit) || 10
|
form.logFileSizeLimit = enforceNumber(settings.logFileSizeLimit) || 10
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1278,7 +1436,7 @@ function confirmProxy () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelMigrateFromPicGo () {
|
function handleMigrateFromPicGo () {
|
||||||
ElMessageBox.confirm($T('SETTINGS_MIGRATE_FROM_PICGO_CONTENT'), $T('SETTINGS_MIGRATE_FROM_PICGO_TITLE'), {
|
ElMessageBox.confirm($T('SETTINGS_MIGRATE_FROM_PICGO_CONTENT'), $T('SETTINGS_MIGRATE_FROM_PICGO_TITLE'), {
|
||||||
confirmButtonText: $T('CONFIRM'),
|
confirmButtonText: $T('CONFIRM'),
|
||||||
cancelButtonText: $T('CANCEL'),
|
cancelButtonText: $T('CANCEL'),
|
||||||
|
@ -366,7 +366,7 @@
|
|||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="handelSaveConfig"
|
@click="handleSaveConfig"
|
||||||
>
|
>
|
||||||
{{ $T('UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM') }}
|
{{ $T('UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -451,7 +451,7 @@ function closeDialog () {
|
|||||||
imageProcessDialogVisible.value = false
|
imageProcessDialogVisible.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
function handelSaveConfig () {
|
function handleSaveConfig () {
|
||||||
saveConfig('buildIn.compress', toRaw(compressForm))
|
saveConfig('buildIn.compress', toRaw(compressForm))
|
||||||
saveConfig('buildIn.watermark', toRaw(waterMarkForm))
|
saveConfig('buildIn.watermark', toRaw(waterMarkForm))
|
||||||
closeDialog()
|
closeDialog()
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="view-title"
|
class="view-title"
|
||||||
@click="handelNameClick"
|
@click="handleNameClick"
|
||||||
>
|
>
|
||||||
{{ picBedName }} {{ $T('SETTINGS') }}
|
{{ picBedName }} {{ $T('SETTINGS') }}
|
||||||
<el-icon
|
<el-icon
|
||||||
@ -169,7 +169,7 @@ const handleReset = async () => {
|
|||||||
|
|
||||||
const linkToLogInList = ['github', 'tcyun', 'aliyun', 'smms', 'qiniu', 'imgur', 'upyun', 'githubPlus']
|
const linkToLogInList = ['github', 'tcyun', 'aliyun', 'smms', 'qiniu', 'imgur', 'upyun', 'githubPlus']
|
||||||
|
|
||||||
function handelNameClick () {
|
function handleNameClick () {
|
||||||
switch ($route.params.type) {
|
switch ($route.params.type) {
|
||||||
case 'github':
|
case 'github':
|
||||||
case 'githubPlus':
|
case 'githubPlus':
|
||||||
|
26
src/universal/types/i18n.d.ts
vendored
26
src/universal/types/i18n.d.ts
vendored
@ -194,6 +194,32 @@ interface ILocales {
|
|||||||
SETTINGS_WATCH_CLIPBOARD: string
|
SETTINGS_WATCH_CLIPBOARD: string
|
||||||
SETTINGS_SHORT_URL: string
|
SETTINGS_SHORT_URL: string
|
||||||
SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: string
|
SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: string
|
||||||
|
SETTINGS_SYNC_CONFIG: string
|
||||||
|
SETTINGS_SYNC_CONFIG_TITLE: string
|
||||||
|
SETTINGS_SYNC_CONFIG_NOTE: string
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_TYPE: string
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_FILE: string
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_CONFIG: string
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_GALLERY: string
|
||||||
|
SETTINGS_SYNC_CONFIG_SELECT_BOTH: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_USERNAME: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_REPO: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_REPO: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_BRANCH: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_TOKEN: string
|
||||||
|
SETTINGS_SYNC_CONFIG_PROXY: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: string
|
||||||
|
SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: string
|
||||||
|
SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: string
|
||||||
SHORTCUT_NAME: string
|
SHORTCUT_NAME: string
|
||||||
SHORTCUT_BIND: string
|
SHORTCUT_BIND: string
|
||||||
SHORTCUT_STATUS: string
|
SHORTCUT_STATUS: string
|
||||||
|
@ -42,9 +42,6 @@ export const handleStreamlinePluginName = (name: string) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* for just simple clone an object
|
|
||||||
*/
|
|
||||||
export const simpleClone = (obj: any) => {
|
export const simpleClone = (obj: any) => {
|
||||||
return JSON.parse(JSON.stringify(obj))
|
return JSON.parse(JSON.stringify(obj))
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user