diff options
author | Rigel Kent <sendmemail@rigelk.eu> | 2020-01-02 13:07:18 +0100 |
---|---|---|
committer | Rigel Kent <sendmemail@rigelk.eu> | 2020-01-02 14:50:14 +0100 |
commit | 29128b2f5ce00093ad81b4b72daae0e3444fd5a8 (patch) | |
tree | f1a90ead86c16892255e2c661da3eed5f302a260 /server/models | |
parent | cca1e13b96799377f19bcc95110fbf76ff741e20 (diff) | |
download | PeerTube-29128b2f5ce00093ad81b4b72daae0e3444fd5a8.tar.gz PeerTube-29128b2f5ce00093ad81b4b72daae0e3444fd5a8.tar.zst PeerTube-29128b2f5ce00093ad81b4b72daae0e3444fd5a8.zip |
Add miniature quick actions to add video to Watch later playlist
Diffstat (limited to 'server/models')
-rw-r--r-- | server/models/account/user.ts | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/server/models/account/user.ts b/server/models/account/user.ts index 3a339b5c3..8bd41de22 100644 --- a/server/models/account/user.ts +++ b/server/models/account/user.ts | |||
@@ -19,7 +19,7 @@ import { | |||
19 | Table, | 19 | Table, |
20 | UpdatedAt | 20 | UpdatedAt |
21 | } from 'sequelize-typescript' | 21 | } from 'sequelize-typescript' |
22 | import { hasUserRight, USER_ROLE_LABELS, UserRight, VideoPrivacy } from '../../../shared' | 22 | import { hasUserRight, USER_ROLE_LABELS, UserRight, VideoPrivacy, MyUser } from '../../../shared' |
23 | import { User, UserRole } from '../../../shared/models/users' | 23 | import { User, UserRole } from '../../../shared/models/users' |
24 | import { | 24 | import { |
25 | isNoInstanceConfigWarningModal, | 25 | isNoInstanceConfigWarningModal, |
@@ -45,6 +45,7 @@ import { comparePassword, cryptPassword } from '../../helpers/peertube-crypto' | |||
45 | import { OAuthTokenModel } from '../oauth/oauth-token' | 45 | import { OAuthTokenModel } from '../oauth/oauth-token' |
46 | import { getSort, throwIfNotValid } from '../utils' | 46 | import { getSort, throwIfNotValid } from '../utils' |
47 | import { VideoChannelModel } from '../video/video-channel' | 47 | import { VideoChannelModel } from '../video/video-channel' |
48 | import { VideoPlaylistModel } from '../video/video-playlist' | ||
48 | import { AccountModel } from './account' | 49 | import { AccountModel } from './account' |
49 | import { NSFWPolicyType } from '../../../shared/models/videos/nsfw-policy.type' | 50 | import { NSFWPolicyType } from '../../../shared/models/videos/nsfw-policy.type' |
50 | import { values } from 'lodash' | 51 | import { values } from 'lodash' |
@@ -68,7 +69,8 @@ import { | |||
68 | } from '@server/typings/models' | 69 | } from '@server/typings/models' |
69 | 70 | ||
70 | enum ScopeNames { | 71 | enum ScopeNames { |
71 | WITH_VIDEO_CHANNEL = 'WITH_VIDEO_CHANNEL' | 72 | WITH_VIDEO_CHANNEL = 'WITH_VIDEO_CHANNEL', |
73 | WITH_SPECIAL_PLAYLISTS = 'WITH_SPECIAL_PLAYLISTS' | ||
72 | } | 74 | } |
73 | 75 | ||
74 | @DefaultScope(() => ({ | 76 | @DefaultScope(() => ({ |
@@ -96,6 +98,16 @@ enum ScopeNames { | |||
96 | required: true | 98 | required: true |
97 | } | 99 | } |
98 | ] | 100 | ] |
101 | }, | ||
102 | [ScopeNames.WITH_SPECIAL_PLAYLISTS]: { | ||
103 | attributes: { | ||
104 | include: [ | ||
105 | [ | ||
106 | literal('(select array(select "id" from "videoPlaylist" where "ownerAccountId" in (select id from public.account where "userId" = "UserModel"."id") and name LIKE \'Watch later\'))'), | ||
107 | 'specialPlaylists' | ||
108 | ] | ||
109 | ] | ||
110 | } | ||
99 | } | 111 | } |
100 | })) | 112 | })) |
101 | @Table({ | 113 | @Table({ |
@@ -431,7 +443,10 @@ export class UserModel extends Model<UserModel> { | |||
431 | } | 443 | } |
432 | } | 444 | } |
433 | 445 | ||
434 | return UserModel.scope(ScopeNames.WITH_VIDEO_CHANNEL).findOne(query) | 446 | return UserModel.scope([ |
447 | ScopeNames.WITH_VIDEO_CHANNEL, | ||
448 | ScopeNames.WITH_SPECIAL_PLAYLISTS | ||
449 | ]).findOne(query) | ||
435 | } | 450 | } |
436 | 451 | ||
437 | static loadByEmail (email: string): Bluebird<MUserDefault> { | 452 | static loadByEmail (email: string): Bluebird<MUserDefault> { |
@@ -610,11 +625,11 @@ export class UserModel extends Model<UserModel> { | |||
610 | return comparePassword(password, this.password) | 625 | return comparePassword(password, this.password) |
611 | } | 626 | } |
612 | 627 | ||
613 | toFormattedJSON (this: MUserFormattable, parameters: { withAdminFlags?: boolean } = {}): User { | 628 | toFormattedJSON (this: MUserFormattable, parameters: { withAdminFlags?: boolean, me?: boolean } = {}): User | MyUser { |
614 | const videoQuotaUsed = this.get('videoQuotaUsed') | 629 | const videoQuotaUsed = this.get('videoQuotaUsed') |
615 | const videoQuotaUsedDaily = this.get('videoQuotaUsedDaily') | 630 | const videoQuotaUsedDaily = this.get('videoQuotaUsedDaily') |
616 | 631 | ||
617 | const json: User = { | 632 | const json: User | MyUser = { |
618 | id: this.id, | 633 | id: this.id, |
619 | username: this.username, | 634 | username: this.username, |
620 | email: this.email, | 635 | email: this.email, |
@@ -675,6 +690,12 @@ export class UserModel extends Model<UserModel> { | |||
675 | }) | 690 | }) |
676 | } | 691 | } |
677 | 692 | ||
693 | if (parameters.me) { | ||
694 | Object.assign(json, { | ||
695 | specialPlaylists: (this.get('specialPlaylists') as Array<number>).map(p => ({ id: p })) | ||
696 | }) | ||
697 | } | ||
698 | |||
678 | return json | 699 | return json |
679 | } | 700 | } |
680 | 701 | ||