mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-02-20 11:48:31 -06:00
Error if importing a torrent with multiple files
This commit is contained in:
parent
a3c997b34c
commit
32985a0a77
@ -5,7 +5,7 @@ import { scrollToTop } from '@app/helpers'
|
|||||||
import { FormValidatorService } from '@app/shared/shared-forms'
|
import { FormValidatorService } from '@app/shared/shared-forms'
|
||||||
import { VideoCaptionService, VideoEdit, VideoImportService, VideoService } from '@app/shared/shared-main'
|
import { VideoCaptionService, VideoEdit, VideoImportService, VideoService } from '@app/shared/shared-main'
|
||||||
import { LoadingBarService } from '@ngx-loading-bar/core'
|
import { LoadingBarService } from '@ngx-loading-bar/core'
|
||||||
import { VideoPrivacy, VideoUpdate } from '@shared/models'
|
import { ServerErrorCode, VideoPrivacy, VideoUpdate } from '@shared/models'
|
||||||
import { hydrateFormFromVideo } from '../shared/video-edit-utils'
|
import { hydrateFormFromVideo } from '../shared/video-edit-utils'
|
||||||
import { VideoSend } from './video-send'
|
import { VideoSend } from './video-send'
|
||||||
|
|
||||||
@ -113,7 +113,13 @@ export class VideoImportTorrentComponent extends VideoSend implements OnInit, Af
|
|||||||
this.loadingBar.useRef().complete()
|
this.loadingBar.useRef().complete()
|
||||||
this.isImportingVideo = false
|
this.isImportingVideo = false
|
||||||
this.firstStepError.emit()
|
this.firstStepError.emit()
|
||||||
this.notifier.error(err.message)
|
|
||||||
|
let message = err.message
|
||||||
|
if (err.body?.code === ServerErrorCode.INCORRECT_FILES_IN_TORRENT) {
|
||||||
|
message = $localize`Torrents with only 1 file are supported.`
|
||||||
|
}
|
||||||
|
|
||||||
|
this.notifier.error(message)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -16,13 +16,13 @@ import {
|
|||||||
MVideoWithBlacklistLight
|
MVideoWithBlacklistLight
|
||||||
} from '@server/types/models'
|
} from '@server/types/models'
|
||||||
import { MVideoImport, MVideoImportFormattable } from '@server/types/models/video/video-import'
|
import { MVideoImport, MVideoImportFormattable } from '@server/types/models/video/video-import'
|
||||||
import { VideoImportCreate, VideoImportState, VideoPrivacy, VideoState } from '../../../../shared'
|
import { ServerErrorCode, VideoImportCreate, VideoImportState, VideoPrivacy, VideoState } from '../../../../shared'
|
||||||
import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
|
import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
|
||||||
import { ThumbnailType } from '../../../../shared/models/videos/thumbnail.type'
|
import { ThumbnailType } from '../../../../shared/models/videos/thumbnail.type'
|
||||||
import { auditLoggerFactory, getAuditIdFromRes, VideoImportAuditView } from '../../../helpers/audit-logger'
|
import { auditLoggerFactory, getAuditIdFromRes, VideoImportAuditView } from '../../../helpers/audit-logger'
|
||||||
import { moveAndProcessCaptionFile } from '../../../helpers/captions-utils'
|
import { moveAndProcessCaptionFile } from '../../../helpers/captions-utils'
|
||||||
import { isArray } from '../../../helpers/custom-validators/misc'
|
import { isArray } from '../../../helpers/custom-validators/misc'
|
||||||
import { createReqFiles } from '../../../helpers/express-utils'
|
import { cleanUpReqFiles, createReqFiles } from '../../../helpers/express-utils'
|
||||||
import { logger } from '../../../helpers/logger'
|
import { logger } from '../../../helpers/logger'
|
||||||
import { getSecureTorrentName } from '../../../helpers/utils'
|
import { getSecureTorrentName } from '../../../helpers/utils'
|
||||||
import { YoutubeDL, YoutubeDLInfo } from '../../../helpers/youtube-dl'
|
import { YoutubeDL, YoutubeDLInfo } from '../../../helpers/youtube-dl'
|
||||||
@ -86,13 +86,23 @@ async function addTorrentImport (req: express.Request, res: express.Response, to
|
|||||||
|
|
||||||
// Rename the torrent to a secured name
|
// Rename the torrent to a secured name
|
||||||
const newTorrentPath = join(CONFIG.STORAGE.TORRENTS_DIR, getSecureTorrentName(torrentName))
|
const newTorrentPath = join(CONFIG.STORAGE.TORRENTS_DIR, getSecureTorrentName(torrentName))
|
||||||
await move(torrentfile.path, newTorrentPath)
|
await move(torrentfile.path, newTorrentPath, { overwrite: true })
|
||||||
torrentfile.path = newTorrentPath
|
torrentfile.path = newTorrentPath
|
||||||
|
|
||||||
const buf = await readFile(torrentfile.path)
|
const buf = await readFile(torrentfile.path)
|
||||||
const parsedTorrent = parseTorrent(buf)
|
const parsedTorrent = parseTorrent(buf) as parseTorrent.Instance
|
||||||
|
|
||||||
videoName = isArray(parsedTorrent.name) ? parsedTorrent.name[0] : parsedTorrent.name as string
|
if (parsedTorrent.files.length !== 1) {
|
||||||
|
cleanUpReqFiles(req)
|
||||||
|
|
||||||
|
return res.status(HttpStatusCode.BAD_REQUEST_400)
|
||||||
|
.json({
|
||||||
|
code: ServerErrorCode.INCORRECT_FILES_IN_TORRENT,
|
||||||
|
error: 'Torrents with only 1 file are supported.'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
videoName = isArray(parsedTorrent.name) ? parsedTorrent.name[0] : parsedTorrent.name
|
||||||
} else {
|
} else {
|
||||||
magnetUri = body.magnetUri
|
magnetUri = body.magnetUri
|
||||||
|
|
||||||
|
@ -47,14 +47,12 @@ const videoImportAddValidator = getCommonVideoEditAttributes().concat([
|
|||||||
cleanUpReqFiles(req)
|
cleanUpReqFiles(req)
|
||||||
return res.status(HttpStatusCode.CONFLICT_409)
|
return res.status(HttpStatusCode.CONFLICT_409)
|
||||||
.json({ error: 'HTTP import is not enabled on this instance.' })
|
.json({ error: 'HTTP import is not enabled on this instance.' })
|
||||||
.end()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CONFIG.IMPORT.VIDEOS.TORRENT.ENABLED !== true && (req.body.magnetUri || torrentFile)) {
|
if (CONFIG.IMPORT.VIDEOS.TORRENT.ENABLED !== true && (req.body.magnetUri || torrentFile)) {
|
||||||
cleanUpReqFiles(req)
|
cleanUpReqFiles(req)
|
||||||
return res.status(HttpStatusCode.CONFLICT_409)
|
return res.status(HttpStatusCode.CONFLICT_409)
|
||||||
.json({ error: 'Torrent/magnet URI import is not enabled on this instance.' })
|
.json({ error: 'Torrent/magnet URI import is not enabled on this instance.' })
|
||||||
.end()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!await doesVideoChannelOfAccountExist(req.body.channelId, user, res)) return cleanUpReqFiles(req)
|
if (!await doesVideoChannelOfAccountExist(req.body.channelId, user, res)) return cleanUpReqFiles(req)
|
||||||
@ -65,7 +63,6 @@ const videoImportAddValidator = getCommonVideoEditAttributes().concat([
|
|||||||
|
|
||||||
return res.status(HttpStatusCode.BAD_REQUEST_400)
|
return res.status(HttpStatusCode.BAD_REQUEST_400)
|
||||||
.json({ error: 'Should have a magnetUri or a targetUrl or a torrent file.' })
|
.json({ error: 'Should have a magnetUri or a targetUrl or a torrent file.' })
|
||||||
.end()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!await isImportAccepted(req, res)) return cleanUpReqFiles(req)
|
if (!await isImportAccepted(req, res)) return cleanUpReqFiles(req)
|
||||||
|
@ -2,4 +2,5 @@ export const enum ServerErrorCode {
|
|||||||
DOES_NOT_RESPECT_FOLLOW_CONSTRAINTS = 1,
|
DOES_NOT_RESPECT_FOLLOW_CONSTRAINTS = 1,
|
||||||
MAX_INSTANCE_LIVES_LIMIT_REACHED = 2,
|
MAX_INSTANCE_LIVES_LIMIT_REACHED = 2,
|
||||||
MAX_USER_LIVES_LIMIT_REACHED = 3,
|
MAX_USER_LIVES_LIMIT_REACHED = 3,
|
||||||
|
INCORRECT_FILES_IN_TORRENT = 4
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user