From 418d092afa81e2c8fe8ac6838fc4b5eb0af6a782 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 26 Feb 2019 10:55:40 +0100 Subject: Playlist server API --- shared/models/activitypub/activity.ts | 5 ++-- shared/models/activitypub/activitypub-actor.ts | 1 + .../activitypub/objects/playlist-element-object.ts | 10 +++++++ .../models/activitypub/objects/playlist-object.ts | 23 ++++++++++++++++ shared/models/actors/account.model.ts | 11 ++++++++ shared/models/overviews/videos-overview.ts | 4 +-- shared/models/users/user-right.enum.ts | 4 +++ shared/models/users/user-role.ts | 1 + .../models/videos/channel/video-channel.model.ts | 12 +++++++- .../videos/playlist/video-playlist-create.model.ts | 11 ++++++++ .../video-playlist-element-create.model.ts | 4 +++ .../video-playlist-element-update.model.ts | 4 +++ .../playlist/video-playlist-privacy.model.ts | 5 ++++ .../videos/playlist/video-playlist-update.model.ts | 10 +++++++ .../models/videos/playlist/video-playlist.model.ts | 23 ++++++++++++++++ shared/models/videos/video.model.ts | 32 ++++++---------------- 16 files changed, 132 insertions(+), 28 deletions(-) create mode 100644 shared/models/activitypub/objects/playlist-element-object.ts create mode 100644 shared/models/activitypub/objects/playlist-object.ts create mode 100644 shared/models/videos/playlist/video-playlist-create.model.ts create mode 100644 shared/models/videos/playlist/video-playlist-element-create.model.ts create mode 100644 shared/models/videos/playlist/video-playlist-element-update.model.ts create mode 100644 shared/models/videos/playlist/video-playlist-privacy.model.ts create mode 100644 shared/models/videos/playlist/video-playlist-update.model.ts create mode 100644 shared/models/videos/playlist/video-playlist.model.ts (limited to 'shared/models') diff --git a/shared/models/activitypub/activity.ts b/shared/models/activitypub/activity.ts index 89994f665..95801190d 100644 --- a/shared/models/activitypub/activity.ts +++ b/shared/models/activitypub/activity.ts @@ -6,6 +6,7 @@ import { VideoAbuseObject } from './objects/video-abuse-object' import { VideoCommentObject } from './objects/video-comment-object' import { ViewObject } from './objects/view-object' import { APObject } from './objects/object.model' +import { PlaylistObject } from './objects/playlist-object' export type Activity = ActivityCreate | ActivityUpdate | ActivityDelete | ActivityFollow | ActivityAccept | ActivityAnnounce | @@ -31,12 +32,12 @@ export interface BaseActivity { export interface ActivityCreate extends BaseActivity { type: 'Create' - object: VideoTorrentObject | VideoAbuseObject | ViewObject | DislikeObject | VideoCommentObject | CacheFileObject + object: VideoTorrentObject | VideoAbuseObject | ViewObject | DislikeObject | VideoCommentObject | CacheFileObject | PlaylistObject } export interface ActivityUpdate extends BaseActivity { type: 'Update' - object: VideoTorrentObject | ActivityPubActor | CacheFileObject + object: VideoTorrentObject | ActivityPubActor | CacheFileObject | PlaylistObject } export interface ActivityDelete extends BaseActivity { diff --git a/shared/models/activitypub/activitypub-actor.ts b/shared/models/activitypub/activitypub-actor.ts index 119bc22d4..5e30bf783 100644 --- a/shared/models/activitypub/activitypub-actor.ts +++ b/shared/models/activitypub/activitypub-actor.ts @@ -8,6 +8,7 @@ export interface ActivityPubActor { id: string following: string followers: string + playlists?: string inbox: string outbox: string preferredUsername: string diff --git a/shared/models/activitypub/objects/playlist-element-object.ts b/shared/models/activitypub/objects/playlist-element-object.ts new file mode 100644 index 000000000..b85e4fe19 --- /dev/null +++ b/shared/models/activitypub/objects/playlist-element-object.ts @@ -0,0 +1,10 @@ +export interface PlaylistElementObject { + id: string + type: 'PlaylistElement' + + url: string + position: number + + startTimestamp?: number + stopTimestamp?: number +} diff --git a/shared/models/activitypub/objects/playlist-object.ts b/shared/models/activitypub/objects/playlist-object.ts new file mode 100644 index 000000000..5f6733f92 --- /dev/null +++ b/shared/models/activitypub/objects/playlist-object.ts @@ -0,0 +1,23 @@ +import { ActivityIconObject } from './common-objects' + +export interface PlaylistObject { + id: string + type: 'Playlist' + + name: string + content: string + uuid: string + + totalItems: number + attributedTo: string[] + + icon: ActivityIconObject + + orderedItems?: string[] + + partOf?: string + next?: string + first?: string + + to?: string[] +} diff --git a/shared/models/actors/account.model.ts b/shared/models/actors/account.model.ts index 7f1dbbc37..043a2507e 100644 --- a/shared/models/actors/account.model.ts +++ b/shared/models/actors/account.model.ts @@ -1,4 +1,5 @@ import { Actor } from './actor.model' +import { Avatar } from '../avatars' export interface Account extends Actor { displayName: string @@ -6,3 +7,13 @@ export interface Account extends Actor { userId?: number } + +export interface AccountSummary { + id: number + uuid: string + name: string + displayName: string + url: string + host: string + avatar?: Avatar +} diff --git a/shared/models/overviews/videos-overview.ts b/shared/models/overviews/videos-overview.ts index ee009d94c..e725f166b 100644 --- a/shared/models/overviews/videos-overview.ts +++ b/shared/models/overviews/videos-overview.ts @@ -1,8 +1,8 @@ -import { Video, VideoChannelAttribute, VideoConstant } from '../videos' +import { Video, VideoChannelSummary, VideoConstant } from '../videos' export interface VideosOverview { channels: { - channel: VideoChannelAttribute + channel: VideoChannelSummary videos: Video[] }[] diff --git a/shared/models/users/user-right.enum.ts b/shared/models/users/user-right.enum.ts index 090256bca..eaa064bd9 100644 --- a/shared/models/users/user-right.enum.ts +++ b/shared/models/users/user-right.enum.ts @@ -20,8 +20,12 @@ export enum UserRight { REMOVE_ANY_VIDEO, REMOVE_ANY_VIDEO_CHANNEL, + REMOVE_ANY_VIDEO_PLAYLIST, REMOVE_ANY_VIDEO_COMMENT, + UPDATE_ANY_VIDEO, + UPDATE_ANY_VIDEO_PLAYLIST, + SEE_ALL_VIDEOS, CHANGE_VIDEO_OWNERSHIP } diff --git a/shared/models/users/user-role.ts b/shared/models/users/user-role.ts index 59c2ba106..0b6554e51 100644 --- a/shared/models/users/user-role.ts +++ b/shared/models/users/user-role.ts @@ -25,6 +25,7 @@ const userRoleRights: { [ id: number ]: UserRight[] } = { UserRight.MANAGE_VIDEO_ABUSES, UserRight.REMOVE_ANY_VIDEO, UserRight.REMOVE_ANY_VIDEO_CHANNEL, + UserRight.REMOVE_ANY_VIDEO_PLAYLIST, UserRight.REMOVE_ANY_VIDEO_COMMENT, UserRight.UPDATE_ANY_VIDEO, UserRight.SEE_ALL_VIDEOS, diff --git a/shared/models/videos/channel/video-channel.model.ts b/shared/models/videos/channel/video-channel.model.ts index 92918f66c..14a813f8f 100644 --- a/shared/models/videos/channel/video-channel.model.ts +++ b/shared/models/videos/channel/video-channel.model.ts @@ -1,6 +1,6 @@ import { Actor } from '../../actors/actor.model' -import { Video } from '../video.model' import { Account } from '../../actors/index' +import { Avatar } from '../../avatars' export interface VideoChannel extends Actor { displayName: string @@ -9,3 +9,13 @@ export interface VideoChannel extends Actor { isLocal: boolean ownerAccount?: Account } + +export interface VideoChannelSummary { + id: number + uuid: string + name: string + displayName: string + url: string + host: string + avatar?: Avatar +} diff --git a/shared/models/videos/playlist/video-playlist-create.model.ts b/shared/models/videos/playlist/video-playlist-create.model.ts new file mode 100644 index 000000000..386acbb96 --- /dev/null +++ b/shared/models/videos/playlist/video-playlist-create.model.ts @@ -0,0 +1,11 @@ +import { VideoPlaylistPrivacy } from './video-playlist-privacy.model' + +export interface VideoPlaylistCreate { + displayName: string + description: string + privacy: VideoPlaylistPrivacy + + videoChannelId?: number + + thumbnailfile?: Blob +} diff --git a/shared/models/videos/playlist/video-playlist-element-create.model.ts b/shared/models/videos/playlist/video-playlist-element-create.model.ts new file mode 100644 index 000000000..9bd56a8ca --- /dev/null +++ b/shared/models/videos/playlist/video-playlist-element-create.model.ts @@ -0,0 +1,4 @@ +export interface VideoPlaylistElementCreate { + startTimestamp?: number + stopTimestamp?: number +} diff --git a/shared/models/videos/playlist/video-playlist-element-update.model.ts b/shared/models/videos/playlist/video-playlist-element-update.model.ts new file mode 100644 index 000000000..15a30fbdc --- /dev/null +++ b/shared/models/videos/playlist/video-playlist-element-update.model.ts @@ -0,0 +1,4 @@ +export interface VideoPlaylistElementUpdate { + startTimestamp?: number + stopTimestamp?: number +} diff --git a/shared/models/videos/playlist/video-playlist-privacy.model.ts b/shared/models/videos/playlist/video-playlist-privacy.model.ts new file mode 100644 index 000000000..96e5e2211 --- /dev/null +++ b/shared/models/videos/playlist/video-playlist-privacy.model.ts @@ -0,0 +1,5 @@ +export enum VideoPlaylistPrivacy { + PUBLIC = 1, + UNLISTED = 2, + PRIVATE = 3 +} diff --git a/shared/models/videos/playlist/video-playlist-update.model.ts b/shared/models/videos/playlist/video-playlist-update.model.ts new file mode 100644 index 000000000..c7a15c550 --- /dev/null +++ b/shared/models/videos/playlist/video-playlist-update.model.ts @@ -0,0 +1,10 @@ +import { VideoPlaylistPrivacy } from './video-playlist-privacy.model' + +export interface VideoPlaylistUpdate { + displayName: string + description: string + privacy: VideoPlaylistPrivacy + + videoChannelId?: number + thumbnailfile?: Blob +} diff --git a/shared/models/videos/playlist/video-playlist.model.ts b/shared/models/videos/playlist/video-playlist.model.ts new file mode 100644 index 000000000..6aa04048c --- /dev/null +++ b/shared/models/videos/playlist/video-playlist.model.ts @@ -0,0 +1,23 @@ +import { AccountSummary } from '../../actors/index' +import { VideoChannelSummary, VideoConstant } from '..' +import { VideoPlaylistPrivacy } from './video-playlist-privacy.model' + +export interface VideoPlaylist { + id: number + uuid: string + isLocal: boolean + + displayName: string + description: string + privacy: VideoConstant + + thumbnailPath: string + + videosLength: number + + createdAt: Date | string + updatedAt: Date | string + + ownerAccount?: AccountSummary + videoChannel?: VideoChannelSummary +} diff --git a/shared/models/videos/video.model.ts b/shared/models/videos/video.model.ts index df800461c..6e7a6831e 100644 --- a/shared/models/videos/video.model.ts +++ b/shared/models/videos/video.model.ts @@ -1,4 +1,4 @@ -import { VideoResolution, VideoState } from '../../index' +import { AccountSummary, VideoChannelSummary, VideoResolution, VideoState } from '../../index' import { Account } from '../actors' import { Avatar } from '../avatars/avatar.model' import { VideoChannel } from './channel/video-channel.model' @@ -18,26 +18,6 @@ export interface VideoFile { fps: number } -export interface VideoChannelAttribute { - id: number - uuid: string - name: string - displayName: string - url: string - host: string - avatar?: Avatar -} - -export interface AccountAttribute { - id: number - uuid: string - name: string - displayName: string - url: string - host: string - avatar?: Avatar -} - export interface Video { id: number uuid: string @@ -68,12 +48,18 @@ export interface Video { blacklisted?: boolean blacklistedReason?: string - account: AccountAttribute - channel: VideoChannelAttribute + account: AccountSummary + channel: VideoChannelSummary userHistory?: { currentTime: number } + + playlistElement?: { + position: number + startTimestamp: number + stopTimestamp: number + } } export interface VideoDetails extends Video { -- cgit v1.2.3