executeIfActivityPub(asyncMiddleware(videosGetValidator)),
executeIfActivityPub(asyncMiddleware(videoController))
)
+activityPubClientRouter.get('/videos/watch/:id/announces',
+ executeIfActivityPub(asyncMiddleware(videosGetValidator)),
+ executeIfActivityPub(asyncMiddleware(videoAnnouncesController))
+)
activityPubClientRouter.get('/videos/watch/:id/announces/:accountId',
executeIfActivityPub(asyncMiddleware(videosShareValidator)),
executeIfActivityPub(asyncMiddleware(videoAnnounceController))
)
+activityPubClientRouter.get('/videos/watch/:id/likes',
+ executeIfActivityPub(asyncMiddleware(videosGetValidator)),
+ executeIfActivityPub(asyncMiddleware(videoLikesController))
+)
+activityPubClientRouter.get('/videos/watch/:id/dislikes',
+ executeIfActivityPub(asyncMiddleware(videosGetValidator)),
+ executeIfActivityPub(asyncMiddleware(videoDislikesController))
+)
+activityPubClientRouter.get('/videos/watch/:id/comments',
+ executeIfActivityPub(asyncMiddleware(videosGetValidator)),
+ executeIfActivityPub(asyncMiddleware(videoCommentsController))
+)
activityPubClientRouter.get('/videos/watch/:videoId/comments/:commentId',
executeIfActivityPub(asyncMiddleware(videoCommentGetValidator)),
executeIfActivityPub(asyncMiddleware(videoCommentController))
return res.json(activityPubContextify(object))
}
+async function videoAnnouncesController (req: express.Request, res: express.Response, next: express.NextFunction) {
+ const video: VideoModel = res.locals.video
+
+ // We need more attributes
+ const videoAll = await VideoModel.loadAndPopulateAll(video.id)
+ const object = videoAll.toAnnouncesActivityPubObject()
+
+ return res.json(activityPubContextify(object))
+}
+
+async function videoLikesController (req: express.Request, res: express.Response, next: express.NextFunction) {
+ const video: VideoModel = res.locals.video
+
+ // We need more attributes
+ const videoAll = await VideoModel.loadAndPopulateAll(video.id)
+ const { likesObject } = videoAll.toRatesActivityPubObjects()
+
+ return res.json(activityPubContextify(likesObject))
+}
+
+async function videoDislikesController (req: express.Request, res: express.Response, next: express.NextFunction) {
+ const video: VideoModel = res.locals.video
+
+ // We need more attributes
+ const videoAll = await VideoModel.loadAndPopulateAll(video.id)
+ const { dislikesObject } = videoAll.toRatesActivityPubObjects()
+
+ return res.json(activityPubContextify(dislikesObject))
+}
+
+async function videoCommentsController (req: express.Request, res: express.Response, next: express.NextFunction) {
+ const video: VideoModel = res.locals.video
+
+ // We need more attributes
+ const videoAll = await VideoModel.loadAndPopulateAll(video.id)
+ const commentsObject = videoAll.toCommentsActivityPubObject()
+
+ return res.json(activityPubContextify(commentsObject))
+}
+
async function videoChannelController (req: express.Request, res: express.Response, next: express.NextFunction) {
const videoChannel: VideoChannelModel = res.locals.videoChannel
})
}
-function activityPubCollection (results: any[]) {
+function activityPubCollection (url: string, results: any[]) {
return {
+ id: url,
type: 'OrderedCollection',
totalItems: results.length,
orderedItems: results
return byActor.url + '/dislikes/' + video.id
}
+function getVideoSharesActivityPubUrl (video: VideoModel) {
+ return video.url + '/announces'
+}
+
+function getVideoCommentsActivityPubUrl (video: VideoModel) {
+ return video.url + '/comments'
+}
+
+function getVideoLikesActivityPubUrl (video: VideoModel) {
+ return video.url + '/likes'
+}
+
+function getVideoDislikesActivityPubUrl (video: VideoModel) {
+ return video.url + '/dislikes'
+}
+
function getActorFollowActivityPubUrl (actorFollow: ActorFollowModel) {
const me = actorFollow.ActorFollower
const following = actorFollow.ActorFollowing
getVideoLikeActivityPubUrl,
getVideoDislikeActivityPubUrl,
getVideoCommentActivityPubUrl,
- getDeleteActivityPubUrl
+ getDeleteActivityPubUrl,
+ getVideoSharesActivityPubUrl,
+ getVideoCommentsActivityPubUrl,
+ getVideoLikesActivityPubUrl,
+ getVideoDislikesActivityPubUrl
}
VIDEO_LICENCES,
VIDEO_PRIVACIES
} from '../../initializers'
+import {
+ getVideoCommentsActivityPubUrl,
+ getVideoDislikesActivityPubUrl,
+ getVideoLikesActivityPubUrl,
+ getVideoSharesActivityPubUrl
+} from '../../lib/activitypub'
import { sendDeleteVideo } from '../../lib/activitypub/send'
import { AccountModel } from '../account/account'
import { AccountVideoRateModel } from '../account/account-video-rate'
}
}
- likesObject = activityPubCollection(likes)
- dislikesObject = activityPubCollection(dislikes)
+ const res = this.toRatesActivityPubObjects()
+ likesObject = res.likesObject
+ dislikesObject = res.dislikesObject
}
let sharesObject
if (Array.isArray(this.VideoShares)) {
- const shares: string[] = []
-
- for (const videoShare of this.VideoShares) {
- shares.push(videoShare.url)
- }
-
- sharesObject = activityPubCollection(shares)
+ sharesObject = this.toAnnouncesActivityPubObject()
}
let commentsObject
if (Array.isArray(this.VideoComments)) {
- const comments: string[] = []
-
- for (const videoComment of this.VideoComments) {
- comments.push(videoComment.url)
- }
-
- commentsObject = activityPubCollection(comments)
+ commentsObject = this.toCommentsActivityPubObject()
}
const url = []
}
}
+ toAnnouncesActivityPubObject () {
+ const shares: string[] = []
+
+ for (const videoShare of this.VideoShares) {
+ shares.push(videoShare.url)
+ }
+
+ return activityPubCollection(getVideoSharesActivityPubUrl(this), shares)
+ }
+
+ toCommentsActivityPubObject () {
+ const comments: string[] = []
+
+ for (const videoComment of this.VideoComments) {
+ comments.push(videoComment.url)
+ }
+
+ return activityPubCollection(getVideoCommentsActivityPubUrl(this), comments)
+ }
+
+ toRatesActivityPubObjects () {
+ const likes: string[] = []
+ const dislikes: string[] = []
+
+ for (const rate of this.AccountVideoRates) {
+ if (rate.type === 'like') {
+ likes.push(rate.Account.Actor.url)
+ } else if (rate.type === 'dislike') {
+ dislikes.push(rate.Account.Actor.url)
+ }
+ }
+
+ const likesObject = activityPubCollection(getVideoLikesActivityPubUrl(this), likes)
+ const dislikesObject = activityPubCollection(getVideoDislikesActivityPubUrl(this), dislikes)
+
+ return { likesObject, dislikesObject }
+ }
+
getTruncatedDescription () {
if (!this.description) return null