import { join } from 'path'
+import { logger } from '@server/helpers/logger'
import { doRequestAndSaveToFile } from '@server/helpers/requests'
import { VideoFileModel } from '@server/models/video/video-file'
+import { MVideo, MVideoFile } from '@server/types/models'
import { CONFIG } from '../../initializers/config'
import { FILES_CACHE } from '../../initializers/constants'
import { VideoModel } from '../../models/video/video'
const file = await VideoFileModel.loadWithVideoOrPlaylistByTorrentFilename(filename)
if (!file) return undefined
- if (file.getVideo().isOwned()) return { isOwned: true, path: join(CONFIG.STORAGE.TORRENTS_DIR, file.torrentFilename) }
+ if (file.getVideo().isOwned()) {
+ const downloadName = this.buildDownloadName(file.getVideo(), file)
+
+ return { isOwned: true, path: join(CONFIG.STORAGE.TORRENTS_DIR, file.torrentFilename), downloadName }
+ }
return this.loadRemoteFile(filename)
}
if (file.getVideo().isOwned()) throw new Error('Cannot load remote file of owned video.')
// Used to fetch the path
- const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(file.getVideo().id)
+ const video = await VideoModel.loadFull(file.getVideo().id)
if (!video) return undefined
const remoteUrl = file.getRemoteTorrentUrl(video)
const destPath = join(FILES_CACHE.TORRENTS.DIRECTORY, file.torrentFilename)
- await doRequestAndSaveToFile(remoteUrl, destPath)
+ try {
+ await doRequestAndSaveToFile(remoteUrl, destPath)
+
+ const downloadName = this.buildDownloadName(video, file)
- const downloadName = `${video.name}-${file.resolution}p.torrent`
+ return { isOwned: false, path: destPath, downloadName }
+ } catch (err) {
+ logger.info('Cannot fetch remote torrent file %s.', remoteUrl, { err })
+
+ return undefined
+ }
+ }
- return { isOwned: false, path: destPath, downloadName }
+ private buildDownloadName (video: MVideo, file: MVideoFile) {
+ return `${video.name}-${file.resolution}p.torrent`
}
}