]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/lib/activitypub/video-rates.ts
Fix peertube runner concurrency
[github/Chocobozzz/PeerTube.git] / server / lib / activitypub / video-rates.ts
CommitLineData
2ccaeeb3 1import { Transaction } from 'sequelize'
1297eb5d 2import { VideoRateType } from '../../../shared/models/videos'
57e4e1c1 3import { MAccountActor, MActorUrl, MVideoAccountLight, MVideoFullLight, MVideoId } from '../../types/models'
db4b15f2
C
4import { sendLike, sendUndoDislike, sendUndoLike } from './send'
5import { sendDislike } from './send/send-dislike'
6import { getVideoDislikeActivityPubUrlByLocalActor, getVideoLikeActivityPubUrlByLocalActor } from './url'
57e4e1c1 7import { federateVideoIfNeeded } from './videos'
2ccaeeb3 8
453e83ea
C
9async function sendVideoRateChange (
10 account: MAccountActor,
57e4e1c1 11 video: MVideoFullLight,
453e83ea
C
12 likes: number,
13 dislikes: number,
14 t: Transaction
15) {
57e4e1c1 16 if (video.isOwned()) return federateVideoIfNeeded(video, false, t)
2ccaeeb3 17
57e4e1c1 18 return sendVideoRateChangeToOrigin(account, video, likes, dislikes, t)
2ccaeeb3
C
19}
20
de94ac86 21function getLocalRateUrl (rateType: VideoRateType, actor: MActorUrl, video: MVideoId) {
453e83ea 22 return rateType === 'like'
de94ac86
C
23 ? getVideoLikeActivityPubUrlByLocalActor(actor, video)
24 : getVideoDislikeActivityPubUrlByLocalActor(actor, video)
5c6d985f
C
25}
26
49af5ac8
C
27// ---------------------------------------------------------------------------
28
2ccaeeb3 29export {
de94ac86 30 getLocalRateUrl,
07197db4 31 sendVideoRateChange
2ccaeeb3 32}
49af5ac8
C
33
34// ---------------------------------------------------------------------------
35
57e4e1c1
C
36async function sendVideoRateChangeToOrigin (
37 account: MAccountActor,
38 video: MVideoAccountLight,
39 likes: number,
40 dislikes: number,
41 t: Transaction
42) {
43 // Local video, we don't need to send like
44 if (video.isOwned()) return
49af5ac8 45
57e4e1c1 46 const actor = account.Actor
49af5ac8 47
57e4e1c1 48 // Keep the order: first we undo and then we create
49af5ac8 49
57e4e1c1
C
50 // Undo Like
51 if (likes < 0) await sendUndoLike(actor, video, t)
52 // Undo Dislike
53 if (dislikes < 0) await sendUndoDislike(actor, video, t)
49af5ac8 54
57e4e1c1
C
55 // Like
56 if (likes > 0) await sendLike(actor, video, t)
57 // Dislike
58 if (dislikes > 0) await sendDislike(actor, video, t)
49af5ac8 59}