+
+ static listRemoteShareUrlsOfLocalVideos () {
+ const query = `SELECT "videoShare".url FROM "videoShare" ` +
+ `INNER JOIN actor ON actor.id = "videoShare"."actorId" AND actor."serverId" IS NOT NULL ` +
+ `INNER JOIN video ON video.id = "videoShare"."videoId" AND video.remote IS FALSE`
+
+ return VideoShareModel.sequelize.query<{ url: string }>(query, {
+ type: QueryTypes.SELECT,
+ raw: true
+ }).then(rows => rows.map(r => r.url))
+ }
+
+ static cleanOldSharesOf (videoId: number, beforeUpdatedAt: Date) {
+ const query = {
+ where: {
+ updatedAt: {
+ [Op.lt]: beforeUpdatedAt
+ },
+ videoId,
+ actorId: {
+ [Op.notIn]: buildLocalActorIdsIn()
+ }
+ }
+ }
+
+ return VideoShareModel.destroy(query)
+ }