diff options
author | Chocobozzz <me@florianbigard.com> | 2021-04-06 17:01:35 +0200 |
---|---|---|
committer | Chocobozzz <chocobozzz@cpy.re> | 2021-04-08 10:07:53 +0200 |
commit | 2cb03dc1f4e01ba491c36caff30c33fe9c5bad89 (patch) | |
tree | 08a8706d105ea1e280339c02b9e2b1dc1edb0ff9 /server/models/video | |
parent | f479685678406a5df864d89615b33d29085ebfc6 (diff) | |
download | PeerTube-2cb03dc1f4e01ba491c36caff30c33fe9c5bad89.tar.gz PeerTube-2cb03dc1f4e01ba491c36caff30c33fe9c5bad89.tar.zst PeerTube-2cb03dc1f4e01ba491c36caff30c33fe9c5bad89.zip |
Add banners support
Diffstat (limited to 'server/models/video')
-rw-r--r-- | server/models/video/video-channel.ts | 88 |
1 files changed, 45 insertions, 43 deletions
diff --git a/server/models/video/video-channel.ts b/server/models/video/video-channel.ts index 815fb16c0..74885edfb 100644 --- a/server/models/video/video-channel.ts +++ b/server/models/video/video-channel.ts | |||
@@ -28,10 +28,9 @@ import { | |||
28 | import { CONSTRAINTS_FIELDS, WEBSERVER } from '../../initializers/constants' | 28 | import { CONSTRAINTS_FIELDS, WEBSERVER } from '../../initializers/constants' |
29 | import { sendDeleteActor } from '../../lib/activitypub/send' | 29 | import { sendDeleteActor } from '../../lib/activitypub/send' |
30 | import { | 30 | import { |
31 | MChannelAccountDefault, | ||
32 | MChannelActor, | 31 | MChannelActor, |
33 | MChannelActorAccountDefaultVideos, | ||
34 | MChannelAP, | 32 | MChannelAP, |
33 | MChannelBannerAccountDefault, | ||
35 | MChannelFormattable, | 34 | MChannelFormattable, |
36 | MChannelSummaryFormattable | 35 | MChannelSummaryFormattable |
37 | } from '../../types/models/video' | 36 | } from '../../types/models/video' |
@@ -49,6 +48,7 @@ export enum ScopeNames { | |||
49 | SUMMARY = 'SUMMARY', | 48 | SUMMARY = 'SUMMARY', |
50 | WITH_ACCOUNT = 'WITH_ACCOUNT', | 49 | WITH_ACCOUNT = 'WITH_ACCOUNT', |
51 | WITH_ACTOR = 'WITH_ACTOR', | 50 | WITH_ACTOR = 'WITH_ACTOR', |
51 | WITH_ACTOR_BANNER = 'WITH_ACTOR_BANNER', | ||
52 | WITH_VIDEOS = 'WITH_VIDEOS', | 52 | WITH_VIDEOS = 'WITH_VIDEOS', |
53 | WITH_STATS = 'WITH_STATS' | 53 | WITH_STATS = 'WITH_STATS' |
54 | } | 54 | } |
@@ -168,6 +168,20 @@ export type SummaryOptions = { | |||
168 | ActorModel | 168 | ActorModel |
169 | ] | 169 | ] |
170 | }, | 170 | }, |
171 | [ScopeNames.WITH_ACTOR_BANNER]: { | ||
172 | include: [ | ||
173 | { | ||
174 | model: ActorModel, | ||
175 | include: [ | ||
176 | { | ||
177 | model: ActorImageModel, | ||
178 | required: false, | ||
179 | as: 'Banner' | ||
180 | } | ||
181 | ] | ||
182 | } | ||
183 | ] | ||
184 | }, | ||
171 | [ScopeNames.WITH_VIDEOS]: { | 185 | [ScopeNames.WITH_VIDEOS]: { |
172 | include: [ | 186 | include: [ |
173 | VideoModel | 187 | VideoModel |
@@ -442,7 +456,7 @@ export class VideoChannelModel extends Model { | |||
442 | where | 456 | where |
443 | } | 457 | } |
444 | 458 | ||
445 | const scopes: string | ScopeOptions | (string | ScopeOptions)[] = [ ScopeNames.WITH_ACTOR ] | 459 | const scopes: string | ScopeOptions | (string | ScopeOptions)[] = [ ScopeNames.WITH_ACTOR_BANNER ] |
446 | 460 | ||
447 | if (options.withStats === true) { | 461 | if (options.withStats === true) { |
448 | scopes.push({ | 462 | scopes.push({ |
@@ -458,32 +472,13 @@ export class VideoChannelModel extends Model { | |||
458 | }) | 472 | }) |
459 | } | 473 | } |
460 | 474 | ||
461 | static loadByIdAndPopulateAccount (id: number): Promise<MChannelAccountDefault> { | 475 | static loadAndPopulateAccount (id: number): Promise<MChannelBannerAccountDefault> { |
462 | return VideoChannelModel.unscoped() | ||
463 | .scope([ ScopeNames.WITH_ACTOR, ScopeNames.WITH_ACCOUNT ]) | ||
464 | .findByPk(id) | ||
465 | } | ||
466 | |||
467 | static loadByIdAndAccount (id: number, accountId: number): Promise<MChannelAccountDefault> { | ||
468 | const query = { | ||
469 | where: { | ||
470 | id, | ||
471 | accountId | ||
472 | } | ||
473 | } | ||
474 | |||
475 | return VideoChannelModel.unscoped() | ||
476 | .scope([ ScopeNames.WITH_ACTOR, ScopeNames.WITH_ACCOUNT ]) | ||
477 | .findOne(query) | ||
478 | } | ||
479 | |||
480 | static loadAndPopulateAccount (id: number): Promise<MChannelAccountDefault> { | ||
481 | return VideoChannelModel.unscoped() | 476 | return VideoChannelModel.unscoped() |
482 | .scope([ ScopeNames.WITH_ACTOR, ScopeNames.WITH_ACCOUNT ]) | 477 | .scope([ ScopeNames.WITH_ACTOR_BANNER, ScopeNames.WITH_ACCOUNT ]) |
483 | .findByPk(id) | 478 | .findByPk(id) |
484 | } | 479 | } |
485 | 480 | ||
486 | static loadByUrlAndPopulateAccount (url: string): Promise<MChannelAccountDefault> { | 481 | static loadByUrlAndPopulateAccount (url: string): Promise<MChannelBannerAccountDefault> { |
487 | const query = { | 482 | const query = { |
488 | include: [ | 483 | include: [ |
489 | { | 484 | { |
@@ -491,7 +486,14 @@ export class VideoChannelModel extends Model { | |||
491 | required: true, | 486 | required: true, |
492 | where: { | 487 | where: { |
493 | url | 488 | url |
494 | } | 489 | }, |
490 | include: [ | ||
491 | { | ||
492 | model: ActorImageModel, | ||
493 | required: false, | ||
494 | as: 'Banner' | ||
495 | } | ||
496 | ] | ||
495 | } | 497 | } |
496 | ] | 498 | ] |
497 | } | 499 | } |
@@ -509,7 +511,7 @@ export class VideoChannelModel extends Model { | |||
509 | return VideoChannelModel.loadByNameAndHostAndPopulateAccount(name, host) | 511 | return VideoChannelModel.loadByNameAndHostAndPopulateAccount(name, host) |
510 | } | 512 | } |
511 | 513 | ||
512 | static loadLocalByNameAndPopulateAccount (name: string): Promise<MChannelAccountDefault> { | 514 | static loadLocalByNameAndPopulateAccount (name: string): Promise<MChannelBannerAccountDefault> { |
513 | const query = { | 515 | const query = { |
514 | include: [ | 516 | include: [ |
515 | { | 517 | { |
@@ -518,17 +520,24 @@ export class VideoChannelModel extends Model { | |||
518 | where: { | 520 | where: { |
519 | preferredUsername: name, | 521 | preferredUsername: name, |
520 | serverId: null | 522 | serverId: null |
521 | } | 523 | }, |
524 | include: [ | ||
525 | { | ||
526 | model: ActorImageModel, | ||
527 | required: false, | ||
528 | as: 'Banner' | ||
529 | } | ||
530 | ] | ||
522 | } | 531 | } |
523 | ] | 532 | ] |
524 | } | 533 | } |
525 | 534 | ||
526 | return VideoChannelModel.unscoped() | 535 | return VideoChannelModel.unscoped() |
527 | .scope([ ScopeNames.WITH_ACTOR, ScopeNames.WITH_ACCOUNT ]) | 536 | .scope([ ScopeNames.WITH_ACCOUNT ]) |
528 | .findOne(query) | 537 | .findOne(query) |
529 | } | 538 | } |
530 | 539 | ||
531 | static loadByNameAndHostAndPopulateAccount (name: string, host: string): Promise<MChannelAccountDefault> { | 540 | static loadByNameAndHostAndPopulateAccount (name: string, host: string): Promise<MChannelBannerAccountDefault> { |
532 | const query = { | 541 | const query = { |
533 | include: [ | 542 | include: [ |
534 | { | 543 | { |
@@ -542,6 +551,11 @@ export class VideoChannelModel extends Model { | |||
542 | model: ServerModel, | 551 | model: ServerModel, |
543 | required: true, | 552 | required: true, |
544 | where: { host } | 553 | where: { host } |
554 | }, | ||
555 | { | ||
556 | model: ActorImageModel, | ||
557 | required: false, | ||
558 | as: 'Banner' | ||
545 | } | 559 | } |
546 | ] | 560 | ] |
547 | } | 561 | } |
@@ -549,22 +563,10 @@ export class VideoChannelModel extends Model { | |||
549 | } | 563 | } |
550 | 564 | ||
551 | return VideoChannelModel.unscoped() | 565 | return VideoChannelModel.unscoped() |
552 | .scope([ ScopeNames.WITH_ACTOR, ScopeNames.WITH_ACCOUNT ]) | 566 | .scope([ ScopeNames.WITH_ACCOUNT ]) |
553 | .findOne(query) | 567 | .findOne(query) |
554 | } | 568 | } |
555 | 569 | ||
556 | static loadAndPopulateAccountAndVideos (id: number): Promise<MChannelActorAccountDefaultVideos> { | ||
557 | const options = { | ||
558 | include: [ | ||
559 | VideoModel | ||
560 | ] | ||
561 | } | ||
562 | |||
563 | return VideoChannelModel.unscoped() | ||
564 | .scope([ ScopeNames.WITH_ACTOR, ScopeNames.WITH_ACCOUNT, ScopeNames.WITH_VIDEOS ]) | ||
565 | .findByPk(id, options) | ||
566 | } | ||
567 | |||
568 | toFormattedSummaryJSON (this: MChannelSummaryFormattable): VideoChannelSummary { | 570 | toFormattedSummaryJSON (this: MChannelSummaryFormattable): VideoChannelSummary { |
569 | const actor = this.Actor.toFormattedSummaryJSON() | 571 | const actor = this.Actor.toFormattedSummaryJSON() |
570 | 572 | ||