import * as Bluebird from 'bluebird'
import { maxBy, minBy } from 'lodash'
import * as magnetUtil from 'magnet-uri'
-import { basename, join } from 'path'
+import { basename } from 'path'
import { Transaction } from 'sequelize/types'
import { TrackerModel } from '@server/models/server/tracker'
import { VideoLiveModel } from '@server/models/video/video-live'
ActivityUrlObject,
ActivityVideoUrlObject
} from '../../../shared/index'
-import { ActivityIconObject, ActivityTrackerUrlObject, VideoObject } from '../../../shared/models/activitypub/objects'
+import { ActivityTrackerUrlObject, VideoObject } from '../../../shared/models/activitypub/objects'
import { VideoPrivacy } from '../../../shared/models/videos'
import { ThumbnailType } from '../../../shared/models/videos/thumbnail.type'
import { VideoStreamingPlaylistType } from '../../../shared/models/videos/video-streaming-playlist.type'
import { isVideoFileInfoHashValid } from '../../helpers/custom-validators/videos'
import { deleteNonExistingModels, resetSequelizeInstance, retryTransactionWrapper } from '../../helpers/database-utils'
import { logger } from '../../helpers/logger'
-import { doJSONRequest } from '../../helpers/requests'
+import { doJSONRequest, PeerTubeRequestError } from '../../helpers/requests'
import { fetchVideoByUrl, getExtFromMimetype, VideoFetchByUrlType } from '../../helpers/video'
import {
ACTIVITY_PUB,
- LAZY_STATIC_PATHS,
MIMETYPES,
P2P_MEDIA_LOADER_PEER_VERSION,
PREVIEWS_SIZE,
if (thumbnailModel) await videoUpdated.addAndSaveThumbnail(thumbnailModel, t)
- if (videoUpdated.getPreview()) {
- const previewUrl = getPreviewUrl(getPreviewFromIcons(videoObject), video)
+ const previewIcon = getPreviewFromIcons(videoObject)
+ if (videoUpdated.getPreview() && previewIcon) {
const previewModel = createPlaceholderThumbnail({
- fileUrl: previewUrl,
+ fileUrl: previewIcon.url,
video,
type: ThumbnailType.PREVIEW,
- size: PREVIEWS_SIZE
+ size: previewIcon
})
await videoUpdated.addAndSaveThumbnail(previewModel, t)
}
: await VideoModel.loadByUrlAndPopulateAccount(options.video.url)
try {
- const { statusCode, videoObject } = await fetchRemoteVideo(video.url)
- if (statusCode === HttpStatusCode.NOT_FOUND_404) {
- logger.info('Cannot refresh remote video %s: video does not exist anymore. Deleting it.', video.url)
-
- // Video does not exist anymore
- await video.destroy()
- return undefined
- }
+ const { videoObject } = await fetchRemoteVideo(video.url)
if (videoObject === undefined) {
logger.warn('Cannot refresh remote video %s: invalid body.', video.url)
account: channelActor.VideoChannel.Account,
channel: channelActor.VideoChannel
}
- await retryTransactionWrapper(updateVideoFromAP, updateOptions)
+ await updateVideoFromAP(updateOptions)
await syncVideoExternalAttributes(video, videoObject, options.syncParam)
ActorFollowScoreCache.Instance.addGoodServerId(video.VideoChannel.Actor.serverId)
return video
} catch (err) {
+ if ((err as PeerTubeRequestError).statusCode === HttpStatusCode.NOT_FOUND_404) {
+ logger.info('Cannot refresh remote video %s: video does not exist anymore. Deleting it.', video.url)
+
+ // Video does not exist anymore
+ await video.destroy()
+ return undefined
+ }
+
logger.warn('Cannot refresh video %s.', options.video.url, { err })
ActorFollowScoreCache.Instance.addBadServerId(video.VideoChannel.Actor.serverId)
if (thumbnailModel) await videoCreated.addAndSaveThumbnail(thumbnailModel, t)
- const previewUrl = getPreviewUrl(getPreviewFromIcons(videoObject), videoCreated)
- const previewModel = createPlaceholderThumbnail({
- fileUrl: previewUrl,
- video: videoCreated,
- type: ThumbnailType.PREVIEW,
- size: PREVIEWS_SIZE
- })
+ const previewIcon = getPreviewFromIcons(videoObject)
+ if (previewIcon) {
+ const previewModel = createPlaceholderThumbnail({
+ fileUrl: previewIcon.url,
+ video: videoCreated,
+ type: ThumbnailType.PREVIEW,
+ size: previewIcon
+ })
- if (thumbnailModel) await videoCreated.addAndSaveThumbnail(previewModel, t)
+ await videoCreated.addAndSaveThumbnail(previewModel, t)
+ }
// Process files
const videoFileAttributes = videoFileActivityUrlToDBAttributes(videoCreated, videoObject.url)
return maxBy(validIcons, 'width')
}
-function getPreviewUrl (previewIcon: ActivityIconObject, video: MVideoWithHost) {
- return previewIcon
- ? previewIcon.url
- : buildRemoteVideoBaseUrl(video, join(LAZY_STATIC_PATHS.PREVIEWS, video.generatePreviewName()))
-}
-
function getTrackerUrls (object: VideoObject, video: MVideoWithHost) {
let wsFound = false