diff options
author | Chocobozzz <me@florianbigard.com> | 2021-05-03 11:06:19 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2021-05-03 16:42:15 +0200 |
commit | 1fd61899eaea245a5844e33e21f04b2562f16e5e (patch) | |
tree | 2a1d51b37b12219cade35e189d62686cd0fec105 /server/models/video | |
parent | dfcb6f50a607b6b402b4f8fa3d43792d61c912a5 (diff) | |
download | PeerTube-1fd61899eaea245a5844e33e21f04b2562f16e5e.tar.gz PeerTube-1fd61899eaea245a5844e33e21f04b2562f16e5e.tar.zst PeerTube-1fd61899eaea245a5844e33e21f04b2562f16e5e.zip |
Add ability to filter my videos by live
Diffstat (limited to 'server/models/video')
-rw-r--r-- | server/models/video/video-query-builder.ts | 12 | ||||
-rw-r--r-- | server/models/video/video.ts | 52 |
2 files changed, 48 insertions, 16 deletions
diff --git a/server/models/video/video-query-builder.ts b/server/models/video/video-query-builder.ts index 4d95ddee2..155afe64b 100644 --- a/server/models/video/video-query-builder.ts +++ b/server/models/video/video-query-builder.ts | |||
@@ -16,9 +16,11 @@ export type BuildVideosQueryOptions = { | |||
16 | start: number | 16 | start: number |
17 | sort: string | 17 | sort: string |
18 | 18 | ||
19 | nsfw?: boolean | ||
19 | filter?: VideoFilter | 20 | filter?: VideoFilter |
21 | isLive?: boolean | ||
22 | |||
20 | categoryOneOf?: number[] | 23 | categoryOneOf?: number[] |
21 | nsfw?: boolean | ||
22 | licenceOneOf?: number[] | 24 | licenceOneOf?: number[] |
23 | languageOneOf?: string[] | 25 | languageOneOf?: string[] |
24 | tagsOneOf?: string[] | 26 | tagsOneOf?: string[] |
@@ -199,10 +201,14 @@ function buildListQuery (model: typeof Model, options: BuildVideosQueryOptions) | |||
199 | 201 | ||
200 | if (options.nsfw === true) { | 202 | if (options.nsfw === true) { |
201 | and.push('"video"."nsfw" IS TRUE') | 203 | and.push('"video"."nsfw" IS TRUE') |
204 | } else if (options.nsfw === false) { | ||
205 | and.push('"video"."nsfw" IS FALSE') | ||
202 | } | 206 | } |
203 | 207 | ||
204 | if (options.nsfw === false) { | 208 | if (options.isLive === true) { |
205 | and.push('"video"."nsfw" IS FALSE') | 209 | and.push('"video"."isLive" IS TRUE') |
210 | } else if (options.isLive === false) { | ||
211 | and.push('"video"."isLive" IS FALSE') | ||
206 | } | 212 | } |
207 | 213 | ||
208 | if (options.categoryOneOf) { | 214 | if (options.categoryOneOf) { |
diff --git a/server/models/video/video.ts b/server/models/video/video.ts index 422bf6deb..e55a21a6b 100644 --- a/server/models/video/video.ts +++ b/server/models/video/video.ts | |||
@@ -1021,14 +1021,28 @@ export class VideoModel extends Model { | |||
1021 | start: number | 1021 | start: number |
1022 | count: number | 1022 | count: number |
1023 | sort: string | 1023 | sort: string |
1024 | isLive?: boolean | ||
1024 | search?: string | 1025 | search?: string |
1025 | }) { | 1026 | }) { |
1026 | const { accountId, start, count, sort, search } = options | 1027 | const { accountId, start, count, sort, search, isLive } = options |
1027 | 1028 | ||
1028 | function buildBaseQuery (): FindOptions { | 1029 | function buildBaseQuery (): FindOptions { |
1029 | let baseQuery = { | 1030 | const where: WhereOptions = {} |
1031 | |||
1032 | if (search) { | ||
1033 | where.name = { | ||
1034 | [Op.iLike]: '%' + search + '%' | ||
1035 | } | ||
1036 | } | ||
1037 | |||
1038 | if (isLive) { | ||
1039 | where.isLive = isLive | ||
1040 | } | ||
1041 | |||
1042 | const baseQuery = { | ||
1030 | offset: start, | 1043 | offset: start, |
1031 | limit: count, | 1044 | limit: count, |
1045 | where, | ||
1032 | order: getVideoSort(sort), | 1046 | order: getVideoSort(sort), |
1033 | include: [ | 1047 | include: [ |
1034 | { | 1048 | { |
@@ -1047,16 +1061,6 @@ export class VideoModel extends Model { | |||
1047 | ] | 1061 | ] |
1048 | } | 1062 | } |
1049 | 1063 | ||
1050 | if (search) { | ||
1051 | baseQuery = Object.assign(baseQuery, { | ||
1052 | where: { | ||
1053 | name: { | ||
1054 | [Op.iLike]: '%' + search + '%' | ||
1055 | } | ||
1056 | } | ||
1057 | }) | ||
1058 | } | ||
1059 | |||
1060 | return baseQuery | 1064 | return baseQuery |
1061 | } | 1065 | } |
1062 | 1066 | ||
@@ -1084,23 +1088,34 @@ export class VideoModel extends Model { | |||
1084 | start: number | 1088 | start: number |
1085 | count: number | 1089 | count: number |
1086 | sort: string | 1090 | sort: string |
1091 | |||
1087 | nsfw: boolean | 1092 | nsfw: boolean |
1093 | filter?: VideoFilter | ||
1094 | isLive?: boolean | ||
1095 | |||
1088 | includeLocalVideos: boolean | 1096 | includeLocalVideos: boolean |
1089 | withFiles: boolean | 1097 | withFiles: boolean |
1098 | |||
1090 | categoryOneOf?: number[] | 1099 | categoryOneOf?: number[] |
1091 | licenceOneOf?: number[] | 1100 | licenceOneOf?: number[] |
1092 | languageOneOf?: string[] | 1101 | languageOneOf?: string[] |
1093 | tagsOneOf?: string[] | 1102 | tagsOneOf?: string[] |
1094 | tagsAllOf?: string[] | 1103 | tagsAllOf?: string[] |
1095 | filter?: VideoFilter | 1104 | |
1096 | accountId?: number | 1105 | accountId?: number |
1097 | videoChannelId?: number | 1106 | videoChannelId?: number |
1107 | |||
1098 | followerActorId?: number | 1108 | followerActorId?: number |
1109 | |||
1099 | videoPlaylistId?: number | 1110 | videoPlaylistId?: number |
1111 | |||
1100 | trendingDays?: number | 1112 | trendingDays?: number |
1113 | |||
1101 | user?: MUserAccountId | 1114 | user?: MUserAccountId |
1102 | historyOfUser?: MUserId | 1115 | historyOfUser?: MUserId |
1116 | |||
1103 | countVideos?: boolean | 1117 | countVideos?: boolean |
1118 | |||
1104 | search?: string | 1119 | search?: string |
1105 | }) { | 1120 | }) { |
1106 | if ((options.filter === 'all-local' || options.filter === 'all') && !options.user.hasRight(UserRight.SEE_ALL_VIDEOS)) { | 1121 | if ((options.filter === 'all-local' || options.filter === 'all') && !options.user.hasRight(UserRight.SEE_ALL_VIDEOS)) { |
@@ -1128,6 +1143,7 @@ export class VideoModel extends Model { | |||
1128 | followerActorId, | 1143 | followerActorId, |
1129 | serverAccountId: serverActor.Account.id, | 1144 | serverAccountId: serverActor.Account.id, |
1130 | nsfw: options.nsfw, | 1145 | nsfw: options.nsfw, |
1146 | isLive: options.isLive, | ||
1131 | categoryOneOf: options.categoryOneOf, | 1147 | categoryOneOf: options.categoryOneOf, |
1132 | licenceOneOf: options.licenceOneOf, | 1148 | licenceOneOf: options.licenceOneOf, |
1133 | languageOneOf: options.languageOneOf, | 1149 | languageOneOf: options.languageOneOf, |
@@ -1160,6 +1176,7 @@ export class VideoModel extends Model { | |||
1160 | originallyPublishedStartDate?: string | 1176 | originallyPublishedStartDate?: string |
1161 | originallyPublishedEndDate?: string | 1177 | originallyPublishedEndDate?: string |
1162 | nsfw?: boolean | 1178 | nsfw?: boolean |
1179 | isLive?: boolean | ||
1163 | categoryOneOf?: number[] | 1180 | categoryOneOf?: number[] |
1164 | licenceOneOf?: number[] | 1181 | licenceOneOf?: number[] |
1165 | languageOneOf?: string[] | 1182 | languageOneOf?: string[] |
@@ -1171,23 +1188,32 @@ export class VideoModel extends Model { | |||
1171 | filter?: VideoFilter | 1188 | filter?: VideoFilter |
1172 | }) { | 1189 | }) { |
1173 | const serverActor = await getServerActor() | 1190 | const serverActor = await getServerActor() |
1191 | |||
1174 | const queryOptions = { | 1192 | const queryOptions = { |
1175 | followerActorId: serverActor.id, | 1193 | followerActorId: serverActor.id, |
1176 | serverAccountId: serverActor.Account.id, | 1194 | serverAccountId: serverActor.Account.id, |
1195 | |||
1177 | includeLocalVideos: options.includeLocalVideos, | 1196 | includeLocalVideos: options.includeLocalVideos, |
1178 | nsfw: options.nsfw, | 1197 | nsfw: options.nsfw, |
1198 | isLive: options.isLive, | ||
1199 | |||
1179 | categoryOneOf: options.categoryOneOf, | 1200 | categoryOneOf: options.categoryOneOf, |
1180 | licenceOneOf: options.licenceOneOf, | 1201 | licenceOneOf: options.licenceOneOf, |
1181 | languageOneOf: options.languageOneOf, | 1202 | languageOneOf: options.languageOneOf, |
1203 | |||
1182 | tagsOneOf: options.tagsOneOf, | 1204 | tagsOneOf: options.tagsOneOf, |
1183 | tagsAllOf: options.tagsAllOf, | 1205 | tagsAllOf: options.tagsAllOf, |
1206 | |||
1184 | user: options.user, | 1207 | user: options.user, |
1185 | filter: options.filter, | 1208 | filter: options.filter, |
1209 | |||
1186 | start: options.start, | 1210 | start: options.start, |
1187 | count: options.count, | 1211 | count: options.count, |
1188 | sort: options.sort, | 1212 | sort: options.sort, |
1213 | |||
1189 | startDate: options.startDate, | 1214 | startDate: options.startDate, |
1190 | endDate: options.endDate, | 1215 | endDate: options.endDate, |
1216 | |||
1191 | originallyPublishedStartDate: options.originallyPublishedStartDate, | 1217 | originallyPublishedStartDate: options.originallyPublishedStartDate, |
1192 | originallyPublishedEndDate: options.originallyPublishedEndDate, | 1218 | originallyPublishedEndDate: options.originallyPublishedEndDate, |
1193 | 1219 | ||