X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fvideo-channel.ts;h=8928dda1289a540aa8d332974a9253859defb4e5;hb=38c2fde13e90973731d56b97e92edd89c4c62dbb;hp=569b8f29d79667203ccdb3b37ad55347c2b06603;hpb=50d6de9c286abcb34ff4234d56d9cbb803db7665;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/video-channel.ts b/server/lib/video-channel.ts index 569b8f29d..8928dda12 100644 --- a/server/lib/video-channel.ts +++ b/server/lib/video-channel.ts @@ -1,29 +1,38 @@ import * as Sequelize from 'sequelize' -import * as uuidv4 from 'uuid/v4' +import { v4 as uuidv4 } from 'uuid' import { VideoChannelCreate } from '../../shared/models' -import { AccountModel } from '../models/account/account' import { VideoChannelModel } from '../models/video/video-channel' -import { buildActorInstance, getVideoChannelActivityPubUrl } from './activitypub' - -async function createVideoChannel (videoChannelInfo: VideoChannelCreate, account: AccountModel, t: Sequelize.Transaction) { +import { buildActorInstance } from './activitypub/actor' +import { VideoModel } from '../models/video/video' +import { MAccountId, MChannelDefault, MChannelId } from '../types/models' +import { getVideoChannelActivityPubUrl } from './activitypub/url' +import { federateVideoIfNeeded } from './activitypub/videos' + +type CustomVideoChannelModelAccount = MChannelDefault & { Account?: T } + +async function createLocalVideoChannel ( + videoChannelInfo: VideoChannelCreate, + account: T, + t: Sequelize.Transaction +): Promise> { const uuid = uuidv4() - const url = getVideoChannelActivityPubUrl(uuid) - // We use the name as uuid - const actorInstance = buildActorInstance('Group', url, uuid, uuid) + const url = getVideoChannelActivityPubUrl(videoChannelInfo.name) + const actorInstance = buildActorInstance('Group', url, videoChannelInfo.name, uuid) const actorInstanceCreated = await actorInstance.save({ transaction: t }) const videoChannelData = { - name: videoChannelInfo.name, + name: videoChannelInfo.displayName, description: videoChannelInfo.description, + support: videoChannelInfo.support, accountId: account.id, actorId: actorInstanceCreated.id } - const videoChannel = VideoChannelModel.build(videoChannelData) + const videoChannel = new VideoChannelModel(videoChannelData) const options = { transaction: t } - const videoChannelCreated = await videoChannel.save(options) + const videoChannelCreated: CustomVideoChannelModelAccount = await videoChannel.save(options) as MChannelDefault // Do not forget to add Account/Actor information to the created video channel videoChannelCreated.Account = account @@ -33,8 +42,19 @@ async function createVideoChannel (videoChannelInfo: VideoChannelCreate, account return videoChannelCreated } +async function federateAllVideosOfChannel (videoChannel: MChannelId) { + const videoIds = await VideoModel.getAllIdsFromChannel(videoChannel) + + for (const videoId of videoIds) { + const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoId) + + await federateVideoIfNeeded(video, false) + } +} + // --------------------------------------------------------------------------- export { - createVideoChannel + createLocalVideoChannel, + federateAllVideosOfChannel }