X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Factivitypub%2Fprocess%2Fprocess-create.ts;h=b9f584aa572572f36b81606aa21789ef5cc7f705;hb=6691c52280363fc42f7865230ebb3741f02fff23;hp=5f4d793a5746db35d9ae3312616bc76afb15b20f;hpb=b718fd22374d64534bcfe69932cf562894abed6a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/activitypub/process/process-create.ts b/server/lib/activitypub/process/process-create.ts index 5f4d793a5..b9f584aa5 100644 --- a/server/lib/activitypub/process/process-create.ts +++ b/server/lib/activitypub/process/process-create.ts @@ -9,26 +9,14 @@ import { getOrCreateVideoAndAccountAndChannel } from '../videos' import { forwardVideoRelatedActivity } from '../send/utils' import { createOrUpdateCacheFile } from '../cache-file' import { Notifier } from '../../notifier' -import { processViewActivity } from './process-view' -import { processDislikeActivity } from './process-dislike' -import { processFlagActivity } from './process-flag' +import { PlaylistObject } from '../../../../shared/models/activitypub/objects/playlist-object' +import { createOrUpdateVideoPlaylist } from '../playlist' +import { VideoModel } from '../../../models/video/video' async function processCreateActivity (activity: ActivityCreate, byActor: ActorModel) { const activityObject = activity.object const activityType = activityObject.type - if (activityType === 'View') { - return processViewActivity(activity, byActor) - } - - if (activityType === 'Dislike') { - return retryTransactionWrapper(processDislikeActivity, activity, byActor) - } - - if (activityType === 'Flag') { - return retryTransactionWrapper(processFlagActivity, activity, byActor) - } - if (activityType === 'Video') { return processCreateVideo(activity) } @@ -38,7 +26,11 @@ async function processCreateActivity (activity: ActivityCreate, byActor: ActorMo } if (activityType === 'CacheFile') { - return retryTransactionWrapper(processCacheFile, activity, byActor) + return retryTransactionWrapper(processCreateCacheFile, activity, byActor) + } + + if (activityType === 'Playlist') { + return retryTransactionWrapper(processCreatePlaylist, activity, byActor) } logger.warn('Unknown activity object type %s when creating activity.', activityType, { activity: activity.id }) @@ -56,14 +48,14 @@ export { async function processCreateVideo (activity: ActivityCreate) { const videoToCreateData = activity.object as VideoTorrentObject - const { video, created } = await getOrCreateVideoAndAccountAndChannel({ videoObject: videoToCreateData }) + const { video, created, autoBlacklisted } = await getOrCreateVideoAndAccountAndChannel({ videoObject: videoToCreateData }) - if (created) Notifier.Instance.notifyOnNewVideo(video) + if (created && !autoBlacklisted) Notifier.Instance.notifyOnNewVideo(video) return video } -async function processCacheFile (activity: ActivityCreate, byActor: ActorModel) { +async function processCreateCacheFile (activity: ActivityCreate, byActor: ActorModel) { const cacheFile = activity.object as CacheFileObject const { video } = await getOrCreateVideoAndAccountAndChannel({ videoObject: cacheFile.object }) @@ -85,7 +77,18 @@ async function processCreateVideoComment (activity: ActivityCreate, byActor: Act if (!byAccount) throw new Error('Cannot create video comment with the non account actor ' + byActor.url) - const { video } = await resolveThread(commentObject.inReplyTo) + let video: VideoModel + try { + const resolveThreadResult = await resolveThread(commentObject.inReplyTo) + video = resolveThreadResult.video + } catch (err) { + logger.debug( + 'Cannot process video comment because we could not resolve thread %s. Maybe it was not a video thread, so skip it.', + commentObject.inReplyTo, + { err } + ) + return + } const { comment, created } = await addVideoComment(video, commentObject.id) @@ -98,3 +101,12 @@ async function processCreateVideoComment (activity: ActivityCreate, byActor: Act if (created === true) Notifier.Instance.notifyOnNewComment(comment) } + +async function processCreatePlaylist (activity: ActivityCreate, byActor: ActorModel) { + const playlistObject = activity.object as PlaylistObject + const byAccount = byActor.Account + + if (!byAccount) throw new Error('Cannot create video playlist with the non account actor ' + byActor.url) + + await createOrUpdateVideoPlaylist(playlistObject, byAccount, activity.to) +}