X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-playlist.ts;h=581179640f74054751223eb2c596e6d95d8ad9c2;hb=bd54ad1953ee0484ba90cf5f588f4c282048f368;hp=ba1fc23eac3e952e9cda963b541db6e22e4df0fa;hpb=0374b6b5cd685316f924874b2a3068bb345eb0dd;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-playlist.ts b/server/models/video/video-playlist.ts index ba1fc23ea..581179640 100644 --- a/server/models/video/video-playlist.ts +++ b/server/models/video/video-playlist.ts @@ -51,8 +51,9 @@ import { MVideoPlaylistFull, MVideoPlaylistFullSummary, MVideoPlaylistIdWithElements -} from '../../typings/models/video/video-playlist' -import { MThumbnail } from '../../typings/models/video/thumbnail' +} from '../../types/models/video/video-playlist' +import { MThumbnail } from '../../types/models/video/thumbnail' +import { MAccountId, MChannelId } from '@server/types/models' enum ScopeNames { AVAILABLE_FOR_LIST = 'AVAILABLE_FOR_LIST', @@ -68,12 +69,12 @@ type AvailableForListOptions = { type?: VideoPlaylistType accountId?: number videoChannelId?: number - listMyPlaylists?: boolean, + listMyPlaylists?: boolean search?: string } @Scopes(() => ({ - [ ScopeNames.WITH_THUMBNAIL ]: { + [ScopeNames.WITH_THUMBNAIL]: { include: [ { model: ThumbnailModel, @@ -81,7 +82,7 @@ type AvailableForListOptions = { } ] }, - [ ScopeNames.WITH_VIDEOS_LENGTH ]: { + [ScopeNames.WITH_VIDEOS_LENGTH]: { attributes: { include: [ [ @@ -91,7 +92,7 @@ type AvailableForListOptions = { ] } } as FindOptions, - [ ScopeNames.WITH_ACCOUNT ]: { + [ScopeNames.WITH_ACCOUNT]: { include: [ { model: AccountModel, @@ -99,7 +100,7 @@ type AvailableForListOptions = { } ] }, - [ ScopeNames.WITH_ACCOUNT_AND_CHANNEL_SUMMARY ]: { + [ScopeNames.WITH_ACCOUNT_AND_CHANNEL_SUMMARY]: { include: [ { model: AccountModel.scope(AccountScopeNames.SUMMARY), @@ -111,7 +112,7 @@ type AvailableForListOptions = { } ] }, - [ ScopeNames.WITH_ACCOUNT_AND_CHANNEL ]: { + [ScopeNames.WITH_ACCOUNT_AND_CHANNEL]: { include: [ { model: AccountModel, @@ -123,7 +124,7 @@ type AvailableForListOptions = { } ] }, - [ ScopeNames.AVAILABLE_FOR_LIST ]: (options: AvailableForListOptions) => { + [ScopeNames.AVAILABLE_FOR_LIST]: (options: AvailableForListOptions) => { let whereActor: WhereOptions = {} @@ -138,13 +139,13 @@ type AvailableForListOptions = { const inQueryInstanceFollow = buildServerIdsFollowedBy(options.followerActorId) whereActor = { - [ Op.or ]: [ + [Op.or]: [ { serverId: null }, { serverId: { - [ Op.in ]: literal(inQueryInstanceFollow) + [Op.in]: literal(inQueryInstanceFollow) } } ] @@ -172,7 +173,7 @@ type AvailableForListOptions = { if (options.search) { whereAnd.push({ name: { - [ Op.iLike ]: '%' + options.search + '%' + [Op.iLike]: '%' + options.search + '%' } }) } @@ -230,7 +231,7 @@ export class VideoPlaylistModel extends Model { @AllowNull(true) @Is('VideoPlaylistDescription', value => throwIfNotValid(value, isVideoPlaylistDescriptionValid, 'description', true)) - @Column + @Column(DataType.STRING(CONSTRAINTS_FIELDS.VIDEO_PLAYLISTS.DESCRIPTION.max)) description: string @AllowNull(false) @@ -299,13 +300,13 @@ export class VideoPlaylistModel extends Model { static listForApi (options: { followerActorId: number - start: number, - count: number, - sort: string, - type?: VideoPlaylistType, - accountId?: number, - videoChannelId?: number, - listMyPlaylists?: boolean, + start: number + count: number + sort: string + type?: VideoPlaylistType + accountId?: number + videoChannelId?: number + listMyPlaylists?: boolean search?: string }) { const query = { @@ -340,15 +341,24 @@ export class VideoPlaylistModel extends Model { }) } - static listPublicUrlsOfForAP (accountId: number, start: number, count: number) { + static listPublicUrlsOfForAP (options: { account?: MAccountId, channel?: MChannelId }, start: number, count: number) { + const where = { + privacy: VideoPlaylistPrivacy.PUBLIC + } + + if (options.account) { + Object.assign(where, { ownerAccountId: options.account.id }) + } + + if (options.channel) { + Object.assign(where, { videoChannelId: options.channel.id }) + } + const query = { attributes: [ 'url' ], offset: start, limit: count, - where: { - ownerAccountId: accountId, - privacy: VideoPlaylistPrivacy.PUBLIC - } + where } return VideoPlaylistModel.findAndCountAll(query) @@ -480,6 +490,14 @@ export class VideoPlaylistModel extends Model { return join(STATIC_PATHS.THUMBNAILS, this.Thumbnail.filename) } + getWatchUrl () { + return WEBSERVER.URL + '/videos/watch/playlist/' + this.uuid + } + + getEmbedStaticPath () { + return '/video-playlists/embed/' + this.uuid + } + setAsRefreshed () { this.changed('updatedAt', true) @@ -510,6 +528,7 @@ export class VideoPlaylistModel extends Model { }, thumbnailPath: this.getThumbnailStaticPath(), + embedPath: this.getEmbedStaticPath(), type: { id: this.type, @@ -522,7 +541,9 @@ export class VideoPlaylistModel extends Model { updatedAt: this.updatedAt, ownerAccount: this.OwnerAccount.toFormattedSummaryJSON(), - videoChannel: this.VideoChannel ? this.VideoChannel.toFormattedSummaryJSON() : null + videoChannel: this.VideoChannel + ? this.VideoChannel.toFormattedSummaryJSON() + : null } }