🐛 Fix(custom): fix url copy error for dirs

This commit is contained in:
Kuingsmile
2024-06-02 21:09:50 +08:00
parent 226f1704c3
commit f1a7a13eda
6 changed files with 38 additions and 17 deletions

View File

@@ -53,9 +53,10 @@ class AliyunApi {
this.logger = logger
}
formatFolder (item: string, slicedPrefix: string) {
formatFolder (item: string, slicedPrefix: string, urlPrefix: string): any {
return {
key: item,
url: `${urlPrefix}/${item}`,
fileSize: 0,
formatedTime: '',
fileName: item.replace(slicedPrefix, '').replace('/', ''),
@@ -288,7 +289,7 @@ class AliyunApi {
})
if (res?.res?.statusCode === 200) {
res?.prefixes?.forEach((item: string) => {
result.fullList.push(this.formatFolder(item, slicedPrefix))
result.fullList.push(this.formatFolder(item, slicedPrefix, urlPrefix))
})
res?.objects?.forEach((item: OSS.ObjectMeta) => {
item.size !== 0 && result.fullList.push(this.formatFile(item, slicedPrefix, urlPrefix))
@@ -348,7 +349,7 @@ class AliyunApi {
}
}
const fullList = [
...(res.prefixes?.map((item: string) => this.formatFolder(item, slicedPrefix)) || []),
...(res.prefixes?.map((item: string) => this.formatFolder(item, slicedPrefix, urlPrefix)) || []),
...(res.objects?.filter((item: OSS.ObjectMeta) => item.size !== 0).map((item: OSS.ObjectMeta) => this.formatFile(item, slicedPrefix, urlPrefix)) || [])
]
return {

View File

@@ -52,11 +52,23 @@ class GithubApi {
}
}
formatFolder (item: any, slicedPrefix: string) {
formatFolder (item: any, slicedPrefix: string, branch: string, repo: string, cdnUrl: string | undefined) {
const key = `${slicedPrefix ? `${slicedPrefix}/` : ''}${item.path}/`
let rawUrl = ''
const placeholders = ['{username}', '{repo}', '{branch}', '{path}']
rawUrl = cdnUrl
? placeholders.some(item => cdnUrl.includes(item))
? placeholders.reduce((url, ph) => {
const value = ph === '{username}' ? this.username : ph === '{repo}' ? repo : ph === '{branch}' ? branch : ph === '{path}' ? key : ''
return url.replaceAll(ph, value)
}, cdnUrl)
: `${cdnUrl}/${key}`
: `https://raw.githubusercontent.com/${this.username}/${repo}/${branch}/${key}`
rawUrl = rawUrl.replace(/(?<!https?:)\/{2,}/g, '/')
return {
...item,
Key: key,
url: rawUrl,
key,
fileSize: 0,
formatedTime: '',
@@ -224,7 +236,7 @@ class GithubApi {
if (res && res.statusCode === 200) {
res.body.tree.forEach((item: any) => {
if (item.type === 'tree') {
result.fullList.push(this.formatFolder(item, slicedPrefix))
result.fullList.push(this.formatFolder(item, slicedPrefix, branch, repo, cdnUrl))
} else {
result.fullList.push(this.formatFile(item, slicedPrefix, branch, repo, cdnUrl))
}

View File

@@ -52,10 +52,11 @@ class QiniuApi {
this.logger = logger
}
formatFolder (item: string, slicedPrefix: string) {
formatFolder (item: string, slicedPrefix: string, urlPrefix: string) {
return {
Key: item,
key: item,
url: `${urlPrefix}/${item}`,
fileSize: 0,
fileName: item.replace(slicedPrefix, '').replace('/', ''),
isDir: true,
@@ -342,7 +343,7 @@ class QiniuApi {
})
if (res && res.respInfo.statusCode === 200) {
res.respBody && res.respBody.commonPrefixes && res.respBody.commonPrefixes.forEach((item: any) => {
result.fullList.push(this.formatFolder(item, slicedPrefix))
result.fullList.push(this.formatFolder(item, slicedPrefix, urlPrefix))
})
res.respBody && res.respBody.items && res.respBody.items.forEach((item: any) => {
item.fsize !== 0 && result.fullList.push(this.formatFile(item, slicedPrefix, urlPrefix))
@@ -409,7 +410,7 @@ class QiniuApi {
if (res?.respInfo?.statusCode === 200) {
if (res.respBody?.commonPrefixes) {
res.respBody.commonPrefixes.forEach((item: string) => {
result.fullList.push(this.formatFolder(item, slicedPrefix))
result.fullList.push(this.formatFolder(item, slicedPrefix, urlPrefix))
})
}
if (res.respBody?.items) {

View File

@@ -144,9 +144,10 @@ class S3plistApi {
logParam = (error:any, method: string) =>
this.logger.error(formatError(error, { class: 'S3plistApi', method }))
formatFolder (item: CommonPrefix, slicedPrefix: string): any {
formatFolder (item: CommonPrefix, slicedPrefix: string, urlPrefix: string): any {
return {
Key: item.Prefix,
url: `${urlPrefix}/${item.Prefix}`,
fileSize: 0,
formatedTime: '',
fileName: item.Prefix?.replace(slicedPrefix, '').replace('/', ''),
@@ -419,7 +420,7 @@ class S3plistApi {
res = await client.send(command)
if (res.$metadata.httpStatusCode === 200) {
res.CommonPrefixes && res.CommonPrefixes.forEach((item: CommonPrefix) => {
result.fullList.push(this.formatFolder(item, slicedPrefix))
result.fullList.push(this.formatFolder(item, slicedPrefix, urlPrefix))
})
res.Contents && res.Contents.forEach((item: _Object) => {
result.fullList.push(this.formatFile(item, slicedPrefix, urlPrefix))
@@ -471,7 +472,7 @@ class S3plistApi {
const data = await client.send(command)
if (data.$metadata.httpStatusCode === 200) {
result.fullList = [
...(data.CommonPrefixes?.map(item => this.formatFolder(item, slicedPrefix)) || []),
...(data.CommonPrefixes?.map(item => this.formatFolder(item, slicedPrefix, urlPrefix)) || []),
...(data.Contents?.map(item => this.formatFile(item, slicedPrefix, urlPrefix)) || [])
]
result.isTruncated = data.IsTruncated || false

View File

@@ -46,11 +46,12 @@ class TcyunApi {
this.logger = logger
}
formatFolder (item: {Prefix: string}, slicedPrefix: string): any {
formatFolder (item: {Prefix: string}, slicedPrefix: string, urlPrefix: string) {
return {
...item,
key: item.Prefix,
fileSize: 0,
url: `${urlPrefix}/${item.Prefix}`,
formatedTime: '',
fileName: item.Prefix.replace(slicedPrefix, '').replace('/', ''),
isDir: true,
@@ -191,7 +192,7 @@ class TcyunApi {
})
if (res?.statusCode === 200) {
result.fullList.push(
...res.CommonPrefixes.map(item => this.formatFolder(item, slicedPrefix)),
...res.CommonPrefixes.map(item => this.formatFolder(item, slicedPrefix, urlPrefix)),
...res.Contents.filter(item => parseInt(item.Size) !== 0)
.map(item => this.formatFile(item, slicedPrefix, urlPrefix))
)
@@ -247,7 +248,7 @@ class TcyunApi {
}
const result = {
fullList: [
...res.CommonPrefixes.map(item => this.formatFolder(item, slicedPrefix)),
...res.CommonPrefixes.map(item => this.formatFolder(item, slicedPrefix, urlPrefix)),
...res.Contents.filter(item => parseInt(item.Size) !== 0)
.map(item => this.formatFile(item, slicedPrefix, urlPrefix))
],

View File

@@ -67,11 +67,16 @@ class UpyunApi {
return `_upt=${upt}`
}
formatFolder (item: any, slicedPrefix: string) {
formatFolder (item: any, slicedPrefix: string, urlPrefix: string) {
const key = `${slicedPrefix}${item.name}/`
let url = `${urlPrefix}/${key}`
if (this.antiLeechToken) {
url = `${url}?${this.getAntiLeechParam(key)}`
}
return {
...item,
key,
url,
fileSize: 0,
formatedTime: '',
fileName: item.name,
@@ -202,7 +207,7 @@ class UpyunApi {
if (res) {
res.files?.forEach((item: any) => {
item.type === 'N' && result.fullList.push(this.formatFile(item, slicedPrefix, urlPrefix))
item.type === 'F' && result.fullList.push(this.formatFolder(item, slicedPrefix))
item.type === 'F' && result.fullList.push(this.formatFolder(item, slicedPrefix, urlPrefix))
})
window.webContents.send('refreshFileTransferList', result)
} else {
@@ -252,7 +257,7 @@ class UpyunApi {
if (res) {
res.files?.forEach((item: any) => {
item.type === 'N' && result.fullList.push(this.formatFile(item, slicedPrefix, urlPrefix))
item.type === 'F' && result.fullList.push(this.formatFolder(item, slicedPrefix))
item.type === 'F' && result.fullList.push(this.formatFolder(item, slicedPrefix, urlPrefix))
})
result.isTruncated = res.next !== this.stopMarker
result.nextMarker = res.next