X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-channel.ts;h=54f12dce3216273d17925ea1e2eaca21e1f9ebc2;hb=c893d4514e6ecbf282c7985fe5f82b8acd8a1137;hp=6d70f2aa2e77f23b4570bc474491fa3945a2ed29;hpb=e34c85e527100c0b5c44567bd951e95be41b8d7e;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-channel.ts b/server/models/video/video-channel.ts index 6d70f2aa2..54f12dce3 100644 --- a/server/models/video/video-channel.ts +++ b/server/models/video/video-channel.ts @@ -1,24 +1,19 @@ import * as Sequelize from 'sequelize' - -import { isVideoChannelNameValid, isVideoChannelDescriptionValid } from '../../helpers' +import { isVideoChannelDescriptionValid, isVideoChannelNameValid } from '../../helpers' +import { CONSTRAINTS_FIELDS } from '../../initializers/constants' +import { sendDeleteVideoChannel } from '../../lib/activitypub/send/send-delete' import { addMethodsToModel, getSort } from '../utils' -import { - VideoChannelInstance, - VideoChannelAttributes, - - VideoChannelMethods -} from './video-channel-interface' -import { sendDeleteVideoChannel } from '../../lib/activitypub/send-request' -import { isVideoChannelUrlValid } from '../../helpers/custom-validators/video-channels' -import { CONSTRAINTS_FIELDS } from '../../initializers/constants' +import { VideoChannelAttributes, VideoChannelInstance, VideoChannelMethods } from './video-channel-interface' +import { getAnnounceActivityPubUrl } from '../../lib/activitypub/url' +import { activityPubCollection } from '../../helpers/activitypub' +import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc' let VideoChannel: Sequelize.Model let toFormattedJSON: VideoChannelMethods.ToFormattedJSON let toActivityPubObject: VideoChannelMethods.ToActivityPubObject let isOwned: VideoChannelMethods.IsOwned let countByAccount: VideoChannelMethods.CountByAccount -let listOwned: VideoChannelMethods.ListOwned let listForApi: VideoChannelMethods.ListForApi let listByAccount: VideoChannelMethods.ListByAccount let loadByIdAndAccount: VideoChannelMethods.LoadByIdAndAccount @@ -71,7 +66,7 @@ export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.Da allowNull: false, validate: { urlValid: value => { - const res = isVideoChannelUrlValid(value) + const res = isActivityPubUrlValid(value) if (res === false) throw new Error('Video channel URL is not valid.') } } @@ -94,7 +89,6 @@ export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.Da listForApi, listByAccount, - listOwned, loadByIdAndAccount, loadAndPopulateAccount, loadByUUIDAndPopulateAccount, @@ -147,14 +141,27 @@ toFormattedJSON = function (this: VideoChannelInstance) { } toActivityPubObject = function (this: VideoChannelInstance) { + let sharesObject + if (Array.isArray(this.VideoChannelShares)) { + const shares: string[] = [] + + for (const videoChannelShare of this.VideoChannelShares) { + const shareUrl = getAnnounceActivityPubUrl(this.url, videoChannelShare.Account) + shares.push(shareUrl) + } + + sharesObject = activityPubCollection(shares) + } + const json = { type: 'VideoChannel' as 'VideoChannel', id: this.url, uuid: this.uuid, content: this.description, name: this.name, - published: this.createdAt, - updated: this.updatedAt + published: this.createdAt.toISOString(), + updated: this.updatedAt.toISOString(), + shares: sharesObject } return json @@ -198,17 +205,6 @@ countByAccount = function (accountId: number) { return VideoChannel.count(query) } -listOwned = function () { - const query = { - where: { - remote: false - }, - include: [ VideoChannel['sequelize'].models.Account ] - } - - return VideoChannel.findAll(query) -} - listForApi = function (start: number, count: number, sort: string) { const query = { offset: start, @@ -218,7 +214,7 @@ listForApi = function (start: number, count: number, sort: string) { { model: VideoChannel['sequelize'].models.Account, required: true, - include: [ { model: VideoChannel['sequelize'].models.Pod, required: false } ] + include: [ { model: VideoChannel['sequelize'].models.Server, required: false } ] } ] } @@ -238,7 +234,7 @@ listByAccount = function (accountId: number) { id: accountId }, required: true, - include: [ { model: VideoChannel['sequelize'].models.Pod, required: false } ] + include: [ { model: VideoChannel['sequelize'].models.Server, required: false } ] } ] } @@ -264,7 +260,8 @@ loadByUrl = function (url: string, t?: Sequelize.Transaction) { const query: Sequelize.FindOptions = { where: { url - } + }, + include: [ VideoChannel['sequelize'].models.Account ] } if (t !== undefined) query.transaction = t @@ -297,7 +294,7 @@ loadByHostAndUUID = function (fromHost: string, uuid: string, t?: Sequelize.Tran model: VideoChannel['sequelize'].models.Account, include: [ { - model: VideoChannel['sequelize'].models.Pod, + model: VideoChannel['sequelize'].models.Server, required: true, where: { host: fromHost @@ -322,7 +319,7 @@ loadByIdAndAccount = function (id: number, accountId: number) { include: [ { model: VideoChannel['sequelize'].models.Account, - include: [ { model: VideoChannel['sequelize'].models.Pod, required: false } ] + include: [ { model: VideoChannel['sequelize'].models.Server, required: false } ] } ] } @@ -335,7 +332,7 @@ loadAndPopulateAccount = function (id: number) { include: [ { model: VideoChannel['sequelize'].models.Account, - include: [ { model: VideoChannel['sequelize'].models.Pod, required: false } ] + include: [ { model: VideoChannel['sequelize'].models.Server, required: false } ] } ] } @@ -351,7 +348,7 @@ loadByUUIDAndPopulateAccount = function (uuid: string) { include: [ { model: VideoChannel['sequelize'].models.Account, - include: [ { model: VideoChannel['sequelize'].models.Pod, required: false } ] + include: [ { model: VideoChannel['sequelize'].models.Server, required: false } ] } ] } @@ -364,7 +361,7 @@ loadAndPopulateAccountAndVideos = function (id: number) { include: [ { model: VideoChannel['sequelize'].models.Account, - include: [ { model: VideoChannel['sequelize'].models.Pod, required: false } ] + include: [ { model: VideoChannel['sequelize'].models.Server, required: false } ] }, VideoChannel['sequelize'].models.Video ]