X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fvideo-channel.ts;h=d57e832fe95b6a150c7f4ab6fd733a77a22b8889;hb=8ee37c5f38b0f9b7e97239197d5590109c163250;hp=a6dd4d061ba3c1a571e571b9a288e32a9de36a03;hpb=e4f97babf701481b55cc10fb3448feab5f97c867;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/video-channel.ts b/server/lib/video-channel.ts index a6dd4d061..d57e832fe 100644 --- a/server/lib/video-channel.ts +++ b/server/lib/video-channel.ts @@ -1,50 +1,50 @@ import * as Sequelize from 'sequelize' - -import { addVideoChannelToFriends } from './friends' -import { database as db } from '../initializers' -import { logger } from '../helpers' -import { AccountInstance } from '../models' import { VideoChannelCreate } from '../../shared/models' +import { VideoModel } from '../models/video/video' +import { VideoChannelModel } from '../models/video/video-channel' +import { MAccountId, MChannelId } from '../types/models' +import { buildActorInstance } from './activitypub/actor' +import { getLocalVideoChannelActivityPubUrl } from './activitypub/url' +import { federateVideoIfNeeded } from './activitypub/videos' + +async function createLocalVideoChannel (videoChannelInfo: VideoChannelCreate, account: MAccountId, t: Sequelize.Transaction) { + const url = getLocalVideoChannelActivityPubUrl(videoChannelInfo.name) + const actorInstance = buildActorInstance('Group', url, videoChannelInfo.name) + + const actorInstanceCreated = await actorInstance.save({ transaction: t }) -async function createVideoChannel (videoChannelInfo: VideoChannelCreate, account: AccountInstance, t: Sequelize.Transaction) { const videoChannelData = { - name: videoChannelInfo.name, + name: videoChannelInfo.displayName, description: videoChannelInfo.description, - remote: false, - authorId: account.id + support: videoChannelInfo.support, + accountId: account.id, + actorId: actorInstanceCreated.id } - const videoChannel = db.VideoChannel.build(videoChannelData) - const options = { transaction: t } + const videoChannel = new VideoChannelModel(videoChannelData) + const options = { transaction: t } const videoChannelCreated = await videoChannel.save(options) - // Do not forget to add Account information to the created video channel - videoChannelCreated.Account = account - - const remoteVideoChannel = videoChannelCreated.toAddRemoteJSON() - - // Now we'll add the video channel's meta data to our friends - await addVideoChannelToFriends(remoteVideoChannel, t) + videoChannelCreated.Actor = actorInstanceCreated + // No need to send this empty video channel to followers return videoChannelCreated } -async function fetchVideoChannelByHostAndUUID (podHost: string, uuid: string, t: Sequelize.Transaction) { - try { - const videoChannel = await db.VideoChannel.loadByHostAndUUID(podHost, uuid, t) - if (!videoChannel) throw new Error('Video channel not found') +async function federateAllVideosOfChannel (videoChannel: MChannelId) { + const videoIds = await VideoModel.getAllIdsFromChannel(videoChannel) + + for (const videoId of videoIds) { + const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoId) - return videoChannel - } catch (err) { - logger.error('Cannot load video channel from host and uuid.', { error: err.stack, podHost, uuid }) - throw err + await federateVideoIfNeeded(video, false) } } // --------------------------------------------------------------------------- export { - createVideoChannel, - fetchVideoChannelByHostAndUUID + createLocalVideoChannel, + federateAllVideosOfChannel }