X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fshared%2Fshared-main%2Fvideo-channel%2Fvideo-channel.model.ts;h=32376bf625d554f93daee5adb56436c742aa4f3f;hb=ab623c0e0b4815bd69a94887241a69aaa857ed26;hp=4f1f5b65de8358b68176a1a7d4e881b45abd0ac7;hpb=c418d483004dfbae9ea38d54aa1577db46d34a8a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/shared/shared-main/video-channel/video-channel.model.ts b/client/src/app/shared/shared-main/video-channel/video-channel.model.ts index 4f1f5b65d..32376bf62 100644 --- a/client/src/app/shared/shared-main/video-channel/video-channel.model.ts +++ b/client/src/app/shared/shared-main/video-channel/video-channel.model.ts @@ -1,44 +1,75 @@ -import { VideoChannel as ServerVideoChannel, ViewsPerDate, Account, Avatar } from '@shared/models' +import { getAbsoluteAPIUrl } from '@app/helpers' +import { Account as ServerAccount, ActorImage, VideoChannel as ServerVideoChannel, ViewsPerDate } from '@shared/models' import { Actor } from '../account/actor.model' export class VideoChannel extends Actor implements ServerVideoChannel { displayName: string description: string support: string + isLocal: boolean + nameWithHost: string nameWithHostForced: string - ownerAccount?: Account + // TODO: remove, deprecated in 4.2 + banner: never + + banners: ActorImage[] + + bannerUrl: string + + updatedAt: Date | string + + ownerAccount?: ServerAccount ownerBy?: string - ownerAvatarUrl?: string videosCount?: number viewsPerDay?: ViewsPerDate[] - static GET_ACTOR_AVATAR_URL (actor: object) { - return Actor.GET_ACTOR_AVATAR_URL(actor) || this.GET_DEFAULT_AVATAR_URL() + static GET_ACTOR_AVATAR_URL (actor: { avatars: { width: number, url?: string, path: string }[] }, size: number) { + return Actor.GET_ACTOR_AVATAR_URL(actor, size) } - static GET_DEFAULT_AVATAR_URL () { - return `${window.location.origin}/client/assets/images/default-avatar-videochannel.png` + static GET_ACTOR_BANNER_URL (channel: ServerVideoChannel) { + if (!channel || channel.banners.length === 0) { + return '' + } + + const banner = channel.banners[0] + if (!banner) return '' + + if (banner.url) return banner.url + return getAbsoluteAPIUrl() + banner.path } - constructor (hash: ServerVideoChannel) { - super(hash) + static GET_DEFAULT_AVATAR_URL (size: number) { + if (size <= 48) { + return `${window.location.origin}/client/assets/images/default-avatar-video-channel-48x48.png` + } - this.updateComputedAttributes() + return `${window.location.origin}/client/assets/images/default-avatar-video-channel.png` + } + + constructor (hash: Partial) { + super(hash) this.displayName = hash.displayName this.description = hash.description this.support = hash.support + + this.banners = hash.banners || [] + this.isLocal = hash.isLocal + this.nameWithHost = Actor.CREATE_BY_STRING(this.name, this.host) this.nameWithHostForced = Actor.CREATE_BY_STRING(this.name, this.host, true) this.videosCount = hash.videosCount + if (hash.updatedAt) this.updatedAt = new Date(hash.updatedAt.toString()) + if (hash.viewsPerDay) { this.viewsPerDay = hash.viewsPerDay.map(v => ({ ...v, date: new Date(v.date) })) } @@ -46,17 +77,32 @@ export class VideoChannel extends Actor implements ServerVideoChannel { if (hash.ownerAccount) { this.ownerAccount = hash.ownerAccount this.ownerBy = Actor.CREATE_BY_STRING(hash.ownerAccount.name, hash.ownerAccount.host) - this.ownerAvatarUrl = Actor.GET_ACTOR_AVATAR_URL(this.ownerAccount) } + + this.updateComputedAttributes() + } + + updateAvatar (newAvatars: ActorImage[]) { + this.avatars = newAvatars + + this.updateComputedAttributes() } - updateAvatar (newAvatar: Avatar) { - this.avatar = newAvatar + resetAvatar () { + this.updateAvatar([]) + } + + updateBanner (newBanners: ActorImage[]) { + this.banners = newBanners this.updateComputedAttributes() } - private updateComputedAttributes () { - this.avatarUrl = VideoChannel.GET_ACTOR_AVATAR_URL(this) + resetBanner () { + this.updateBanner([]) + } + + updateComputedAttributes () { + this.bannerUrl = VideoChannel.GET_ACTOR_BANNER_URL(this) } }