diff options
-rw-r--r-- | server/lib/schedulers/videos-redundancy-scheduler.ts | 10 | ||||
-rw-r--r-- | server/models/redundancy/video-redundancy.ts | 51 |
2 files changed, 60 insertions, 1 deletions
diff --git a/server/lib/schedulers/videos-redundancy-scheduler.ts b/server/lib/schedulers/videos-redundancy-scheduler.ts index 82005a2c8..93e76626c 100644 --- a/server/lib/schedulers/videos-redundancy-scheduler.ts +++ b/server/lib/schedulers/videos-redundancy-scheduler.ts | |||
@@ -301,7 +301,15 @@ export class VideosRedundancyScheduler extends AbstractScheduler { | |||
301 | const toDelete = await VideoRedundancyModel.loadOldestLocalExpired(redundancy.strategy, redundancy.minLifetime) | 301 | const toDelete = await VideoRedundancyModel.loadOldestLocalExpired(redundancy.strategy, redundancy.minLifetime) |
302 | if (!toDelete) return | 302 | if (!toDelete) return |
303 | 303 | ||
304 | await removeVideoRedundancy(toDelete) | 304 | const videoId = toDelete.VideoFile |
305 | ? toDelete.VideoFile.videoId | ||
306 | : toDelete.VideoStreamingPlaylist.videoId | ||
307 | |||
308 | const redundancies = await VideoRedundancyModel.listLocalByVideoId(videoId) | ||
309 | |||
310 | for (const redundancy of redundancies) { | ||
311 | await removeVideoRedundancy(redundancy) | ||
312 | } | ||
305 | } | 313 | } |
306 | } | 314 | } |
307 | 315 | ||
diff --git a/server/models/redundancy/video-redundancy.ts b/server/models/redundancy/video-redundancy.ts index 98c6ff134..74895fe30 100644 --- a/server/models/redundancy/video-redundancy.ts +++ b/server/models/redundancy/video-redundancy.ts | |||
@@ -185,6 +185,57 @@ export class VideoRedundancyModel extends Model { | |||
185 | return VideoRedundancyModel.scope(ScopeNames.WITH_VIDEO).findOne(query) | 185 | return VideoRedundancyModel.scope(ScopeNames.WITH_VIDEO).findOne(query) |
186 | } | 186 | } |
187 | 187 | ||
188 | static async listLocalByVideoId (videoId: number): Promise<MVideoRedundancyVideo[]> { | ||
189 | const actor = await getServerActor() | ||
190 | |||
191 | const queryStreamingPlaylist = { | ||
192 | where: { | ||
193 | actorId: actor.id | ||
194 | }, | ||
195 | include: [ | ||
196 | { | ||
197 | model: VideoStreamingPlaylistModel.unscoped(), | ||
198 | required: true, | ||
199 | include: [ | ||
200 | { | ||
201 | model: VideoModel.unscoped(), | ||
202 | required: true, | ||
203 | where: { | ||
204 | id: videoId | ||
205 | } | ||
206 | } | ||
207 | ] | ||
208 | } | ||
209 | ] | ||
210 | } | ||
211 | |||
212 | const queryFiles = { | ||
213 | where: { | ||
214 | actorId: actor.id | ||
215 | }, | ||
216 | include: [ | ||
217 | { | ||
218 | model: VideoFileModel, | ||
219 | required: true, | ||
220 | include: [ | ||
221 | { | ||
222 | model: VideoModel, | ||
223 | required: true, | ||
224 | where: { | ||
225 | id: videoId | ||
226 | } | ||
227 | } | ||
228 | ] | ||
229 | } | ||
230 | ] | ||
231 | } | ||
232 | |||
233 | return Promise.all([ | ||
234 | VideoRedundancyModel.findAll(queryStreamingPlaylist), | ||
235 | VideoRedundancyModel.findAll(queryFiles) | ||
236 | ]).then(([ r1, r2 ]) => r1.concat(r2)) | ||
237 | } | ||
238 | |||
188 | static async loadLocalByStreamingPlaylistId (videoStreamingPlaylistId: number): Promise<MVideoRedundancyVideo> { | 239 | static async loadLocalByStreamingPlaylistId (videoStreamingPlaylistId: number): Promise<MVideoRedundancyVideo> { |
189 | const actor = await getServerActor() | 240 | const actor = await getServerActor() |
190 | 241 | ||