🐛 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
+4 -3
View File
@@ -53,9 +53,10 @@ class AliyunApi {
this.logger = logger this.logger = logger
} }
formatFolder (item: string, slicedPrefix: string) { formatFolder (item: string, slicedPrefix: string, urlPrefix: string): any {
return { return {
key: item, key: item,
url: `${urlPrefix}/${item}`,
fileSize: 0, fileSize: 0,
formatedTime: '', formatedTime: '',
fileName: item.replace(slicedPrefix, '').replace('/', ''), fileName: item.replace(slicedPrefix, '').replace('/', ''),
@@ -288,7 +289,7 @@ class AliyunApi {
}) })
if (res?.res?.statusCode === 200) { if (res?.res?.statusCode === 200) {
res?.prefixes?.forEach((item: string) => { 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) => { res?.objects?.forEach((item: OSS.ObjectMeta) => {
item.size !== 0 && result.fullList.push(this.formatFile(item, slicedPrefix, urlPrefix)) item.size !== 0 && result.fullList.push(this.formatFile(item, slicedPrefix, urlPrefix))
@@ -348,7 +349,7 @@ class AliyunApi {
} }
} }
const fullList = [ 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)) || []) ...(res.objects?.filter((item: OSS.ObjectMeta) => item.size !== 0).map((item: OSS.ObjectMeta) => this.formatFile(item, slicedPrefix, urlPrefix)) || [])
] ]
return { return {
+14 -2
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}/` 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 { return {
...item, ...item,
Key: key, Key: key,
url: rawUrl,
key, key,
fileSize: 0, fileSize: 0,
formatedTime: '', formatedTime: '',
@@ -224,7 +236,7 @@ class GithubApi {
if (res && res.statusCode === 200) { if (res && res.statusCode === 200) {
res.body.tree.forEach((item: any) => { res.body.tree.forEach((item: any) => {
if (item.type === 'tree') { if (item.type === 'tree') {
result.fullList.push(this.formatFolder(item, slicedPrefix)) result.fullList.push(this.formatFolder(item, slicedPrefix, branch, repo, cdnUrl))
} else { } else {
result.fullList.push(this.formatFile(item, slicedPrefix, branch, repo, cdnUrl)) result.fullList.push(this.formatFile(item, slicedPrefix, branch, repo, cdnUrl))
} }
+4 -3
View File
@@ -52,10 +52,11 @@ class QiniuApi {
this.logger = logger this.logger = logger
} }
formatFolder (item: string, slicedPrefix: string) { formatFolder (item: string, slicedPrefix: string, urlPrefix: string) {
return { return {
Key: item, Key: item,
key: item, key: item,
url: `${urlPrefix}/${item}`,
fileSize: 0, fileSize: 0,
fileName: item.replace(slicedPrefix, '').replace('/', ''), fileName: item.replace(slicedPrefix, '').replace('/', ''),
isDir: true, isDir: true,
@@ -342,7 +343,7 @@ class QiniuApi {
}) })
if (res && res.respInfo.statusCode === 200) { if (res && res.respInfo.statusCode === 200) {
res.respBody && res.respBody.commonPrefixes && res.respBody.commonPrefixes.forEach((item: any) => { 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) => { res.respBody && res.respBody.items && res.respBody.items.forEach((item: any) => {
item.fsize !== 0 && result.fullList.push(this.formatFile(item, slicedPrefix, urlPrefix)) item.fsize !== 0 && result.fullList.push(this.formatFile(item, slicedPrefix, urlPrefix))
@@ -409,7 +410,7 @@ class QiniuApi {
if (res?.respInfo?.statusCode === 200) { if (res?.respInfo?.statusCode === 200) {
if (res.respBody?.commonPrefixes) { if (res.respBody?.commonPrefixes) {
res.respBody.commonPrefixes.forEach((item: string) => { 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) { if (res.respBody?.items) {
+4 -3
View File
@@ -144,9 +144,10 @@ class S3plistApi {
logParam = (error:any, method: string) => logParam = (error:any, method: string) =>
this.logger.error(formatError(error, { class: 'S3plistApi', method })) this.logger.error(formatError(error, { class: 'S3plistApi', method }))
formatFolder (item: CommonPrefix, slicedPrefix: string): any { formatFolder (item: CommonPrefix, slicedPrefix: string, urlPrefix: string): any {
return { return {
Key: item.Prefix, Key: item.Prefix,
url: `${urlPrefix}/${item.Prefix}`,
fileSize: 0, fileSize: 0,
formatedTime: '', formatedTime: '',
fileName: item.Prefix?.replace(slicedPrefix, '').replace('/', ''), fileName: item.Prefix?.replace(slicedPrefix, '').replace('/', ''),
@@ -419,7 +420,7 @@ class S3plistApi {
res = await client.send(command) res = await client.send(command)
if (res.$metadata.httpStatusCode === 200) { if (res.$metadata.httpStatusCode === 200) {
res.CommonPrefixes && res.CommonPrefixes.forEach((item: CommonPrefix) => { 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) => { res.Contents && res.Contents.forEach((item: _Object) => {
result.fullList.push(this.formatFile(item, slicedPrefix, urlPrefix)) result.fullList.push(this.formatFile(item, slicedPrefix, urlPrefix))
@@ -471,7 +472,7 @@ class S3plistApi {
const data = await client.send(command) const data = await client.send(command)
if (data.$metadata.httpStatusCode === 200) { if (data.$metadata.httpStatusCode === 200) {
result.fullList = [ 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)) || []) ...(data.Contents?.map(item => this.formatFile(item, slicedPrefix, urlPrefix)) || [])
] ]
result.isTruncated = data.IsTruncated || false result.isTruncated = data.IsTruncated || false
+4 -3
View File
@@ -46,11 +46,12 @@ class TcyunApi {
this.logger = logger this.logger = logger
} }
formatFolder (item: {Prefix: string}, slicedPrefix: string): any { formatFolder (item: {Prefix: string}, slicedPrefix: string, urlPrefix: string) {
return { return {
...item, ...item,
key: item.Prefix, key: item.Prefix,
fileSize: 0, fileSize: 0,
url: `${urlPrefix}/${item.Prefix}`,
formatedTime: '', formatedTime: '',
fileName: item.Prefix.replace(slicedPrefix, '').replace('/', ''), fileName: item.Prefix.replace(slicedPrefix, '').replace('/', ''),
isDir: true, isDir: true,
@@ -191,7 +192,7 @@ class TcyunApi {
}) })
if (res?.statusCode === 200) { if (res?.statusCode === 200) {
result.fullList.push( 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) ...res.Contents.filter(item => parseInt(item.Size) !== 0)
.map(item => this.formatFile(item, slicedPrefix, urlPrefix)) .map(item => this.formatFile(item, slicedPrefix, urlPrefix))
) )
@@ -247,7 +248,7 @@ class TcyunApi {
} }
const result = { const result = {
fullList: [ 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) ...res.Contents.filter(item => parseInt(item.Size) !== 0)
.map(item => this.formatFile(item, slicedPrefix, urlPrefix)) .map(item => this.formatFile(item, slicedPrefix, urlPrefix))
], ],
+8 -3
View File
@@ -67,11 +67,16 @@ class UpyunApi {
return `_upt=${upt}` return `_upt=${upt}`
} }
formatFolder (item: any, slicedPrefix: string) { formatFolder (item: any, slicedPrefix: string, urlPrefix: string) {
const key = `${slicedPrefix}${item.name}/` const key = `${slicedPrefix}${item.name}/`
let url = `${urlPrefix}/${key}`
if (this.antiLeechToken) {
url = `${url}?${this.getAntiLeechParam(key)}`
}
return { return {
...item, ...item,
key, key,
url,
fileSize: 0, fileSize: 0,
formatedTime: '', formatedTime: '',
fileName: item.name, fileName: item.name,
@@ -202,7 +207,7 @@ class UpyunApi {
if (res) { if (res) {
res.files?.forEach((item: any) => { res.files?.forEach((item: any) => {
item.type === 'N' && result.fullList.push(this.formatFile(item, slicedPrefix, urlPrefix)) 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) window.webContents.send('refreshFileTransferList', result)
} else { } else {
@@ -252,7 +257,7 @@ class UpyunApi {
if (res) { if (res) {
res.files?.forEach((item: any) => { res.files?.forEach((item: any) => {
item.type === 'N' && result.fullList.push(this.formatFile(item, slicedPrefix, urlPrefix)) 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.isTruncated = res.next !== this.stopMarker
result.nextMarker = res.next result.nextMarker = res.next