From d0800f7661f13fabe7bb6f4aa0ea50764f106405 Mon Sep 17 00:00:00 2001 From: kontrollanten <6680299+kontrollanten@users.noreply.github.com> Date: Mon, 28 Feb 2022 08:34:43 +0100 Subject: Implement avatar miniatures (#4639) * client: remove unused file * refactor(client/my-actor-avatar): size from input Read size from component input instead of scss, to make it possible to use smaller avatar images when implemented. * implement avatar miniatures close #4560 * fix(test): max file size * fix(search-index): normalize res acc to avatarMini * refactor avatars to an array * client/search: resize channel avatar to 120 * refactor(client/videos): remove unused function * client(actor-avatar): set default size * fix tests and avatars full result When findOne is used only an array containting one avatar is returned. * update migration version and version notations * server/search: harmonize normalizing * Cleanup avatar miniature PR Co-authored-by: Chocobozzz --- shared/models/activitypub/activitypub-actor.ts | 7 +++++-- shared/models/actors/account.model.ts | 7 ++++++- shared/models/actors/actor-image.model.ts | 1 + shared/models/actors/actor.model.ts | 6 +++++- shared/models/users/user-notification.model.ts | 11 ++++++++--- shared/models/videos/channel/video-channel.model.ts | 13 ++++++++++--- shared/server-commands/users/accounts.ts | 15 +++++++++++++++ shared/server-commands/users/index.ts | 1 + shared/server-commands/videos/channels.ts | 13 ++++++++++++- 9 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 shared/server-commands/users/accounts.ts (limited to 'shared') diff --git a/shared/models/activitypub/activitypub-actor.ts b/shared/models/activitypub/activitypub-actor.ts index 09d4f7402..efb6edec4 100644 --- a/shared/models/activitypub/activitypub-actor.ts +++ b/shared/models/activitypub/activitypub-actor.ts @@ -27,8 +27,11 @@ export interface ActivityPubActor { publicKeyPem: string } - icon?: ActivityIconObject - image?: ActivityIconObject + image?: ActivityIconObject | ActivityIconObject[] + + icon?: ActivityIconObject | ActivityIconObject[] + // TODO: migrate to `icon`, introduced in 4.2 + icons?: ActivityIconObject[] published?: string } diff --git a/shared/models/actors/account.model.ts b/shared/models/actors/account.model.ts index f2138077e..60f4236d5 100644 --- a/shared/models/actors/account.model.ts +++ b/shared/models/actors/account.model.ts @@ -4,6 +4,7 @@ import { Actor } from './actor.model' export interface Account extends Actor { displayName: string description: string + avatars: ActorImage[] updatedAt: Date | string @@ -16,5 +17,9 @@ export interface AccountSummary { displayName: string url: string host: string - avatar?: ActorImage + + avatars: ActorImage[] + + // TODO: remove, deprecated in 4.2 + avatar: ActorImage } diff --git a/shared/models/actors/actor-image.model.ts b/shared/models/actors/actor-image.model.ts index ad5eab627..cfe44ac15 100644 --- a/shared/models/actors/actor-image.model.ts +++ b/shared/models/actors/actor-image.model.ts @@ -1,4 +1,5 @@ export interface ActorImage { + width: number path: string url?: string diff --git a/shared/models/actors/actor.model.ts b/shared/models/actors/actor.model.ts index fd0662331..bf86a917f 100644 --- a/shared/models/actors/actor.model.ts +++ b/shared/models/actors/actor.model.ts @@ -8,5 +8,9 @@ export interface Actor { followingCount: number followersCount: number createdAt: Date | string - avatar?: ActorImage + + avatars: ActorImage[] + + // TODO: remove, deprecated in 4.2 + avatar: ActorImage } diff --git a/shared/models/users/user-notification.model.ts b/shared/models/users/user-notification.model.ts index 5820589fe..a2621fb5b 100644 --- a/shared/models/users/user-notification.model.ts +++ b/shared/models/users/user-notification.model.ts @@ -40,14 +40,19 @@ export interface VideoInfo { name: string } +export interface AvatarInfo { + width: number + path: string +} + export interface ActorInfo { id: number displayName: string name: string host: string - avatar?: { - path: string - } + + avatars: AvatarInfo[] + avatar: AvatarInfo } export interface UserNotification { diff --git a/shared/models/videos/channel/video-channel.model.ts b/shared/models/videos/channel/video-channel.model.ts index 5393f924d..58b60c177 100644 --- a/shared/models/videos/channel/video-channel.model.ts +++ b/shared/models/videos/channel/video-channel.model.ts @@ -1,5 +1,5 @@ -import { Actor } from '../../actors/actor.model' import { Account, ActorImage } from '../../actors' +import { Actor } from '../../actors/actor.model' export type ViewsPerDate = { date: Date @@ -19,7 +19,10 @@ export interface VideoChannel extends Actor { videosCount?: number viewsPerDay?: ViewsPerDate[] // chronologically ordered - banner?: ActorImage + banners: ActorImage[] + + // TODO: remove, deprecated in 4.2 + banner: ActorImage } export interface VideoChannelSummary { @@ -28,5 +31,9 @@ export interface VideoChannelSummary { displayName: string url: string host: string - avatar?: ActorImage + + avatars: ActorImage[] + + // TODO: remove, deprecated in 4.2 + avatar: ActorImage } diff --git a/shared/server-commands/users/accounts.ts b/shared/server-commands/users/accounts.ts new file mode 100644 index 000000000..6387891f4 --- /dev/null +++ b/shared/server-commands/users/accounts.ts @@ -0,0 +1,15 @@ +import { PeerTubeServer } from '../server/server' + +async function setDefaultAccountAvatar (serversArg: PeerTubeServer | PeerTubeServer[], token?: string) { + const servers = Array.isArray(serversArg) + ? serversArg + : [ serversArg ] + + for (const server of servers) { + await server.users.updateMyAvatar({ fixture: 'avatar.png', token }) + } +} + +export { + setDefaultAccountAvatar +} diff --git a/shared/server-commands/users/index.ts b/shared/server-commands/users/index.ts index c2bc5c44f..f6f93b4d2 100644 --- a/shared/server-commands/users/index.ts +++ b/shared/server-commands/users/index.ts @@ -1,4 +1,5 @@ export * from './accounts-command' +export * from './accounts' export * from './blocklist-command' export * from './login' export * from './login-command' diff --git a/shared/server-commands/videos/channels.ts b/shared/server-commands/videos/channels.ts index 756c47453..3c0d4b723 100644 --- a/shared/server-commands/videos/channels.ts +++ b/shared/server-commands/videos/channels.ts @@ -13,6 +13,17 @@ function setDefaultVideoChannel (servers: PeerTubeServer[]) { return Promise.all(tasks) } +async function setDefaultChannelAvatar (serversArg: PeerTubeServer | PeerTubeServer[], channelName: string = 'root_channel') { + const servers = Array.isArray(serversArg) + ? serversArg + : [ serversArg ] + + for (const server of servers) { + await server.channels.updateImage({ channelName, fixture: 'avatar.png', type: 'avatar' }) + } +} + export { - setDefaultVideoChannel + setDefaultVideoChannel, + setDefaultChannelAvatar } -- cgit v1.2.3