Add id to likes/dislikes/comments/shares collections
This commit is contained in:
parent
c88593f72f
commit
46531a0abd
4 changed files with 128 additions and 18 deletions
|
@ -36,10 +36,26 @@ activityPubClientRouter.get('/videos/watch/:id',
|
|||
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))
|
||||
|
@ -105,6 +121,46 @@ async function videoAnnounceController (req: express.Request, res: express.Respo
|
|||
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
|
||||
|
||||
|
|
|
@ -25,8 +25,9 @@ function activityPubContextify <T> (data: T) {
|
|||
})
|
||||
}
|
||||
|
||||
function activityPubCollection (results: any[]) {
|
||||
function activityPubCollection (url: string, results: any[]) {
|
||||
return {
|
||||
id: url,
|
||||
type: 'OrderedCollection',
|
||||
totalItems: results.length,
|
||||
orderedItems: results
|
||||
|
|
|
@ -37,6 +37,22 @@ function getVideoDislikeActivityPubUrl (byActor: ActorModel, video: VideoModel)
|
|||
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
|
||||
|
@ -81,5 +97,9 @@ export {
|
|||
getVideoLikeActivityPubUrl,
|
||||
getVideoDislikeActivityPubUrl,
|
||||
getVideoCommentActivityPubUrl,
|
||||
getDeleteActivityPubUrl
|
||||
getDeleteActivityPubUrl,
|
||||
getVideoSharesActivityPubUrl,
|
||||
getVideoCommentsActivityPubUrl,
|
||||
getVideoLikesActivityPubUrl,
|
||||
getVideoDislikesActivityPubUrl
|
||||
}
|
||||
|
|
|
@ -58,6 +58,12 @@ import {
|
|||
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'
|
||||
|
@ -958,30 +964,19 @@ export class VideoModel extends Model<VideoModel> {
|
|||
}
|
||||
}
|
||||
|
||||
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 = []
|
||||
|
@ -1058,6 +1053,44 @@ export class VideoModel extends Model<VideoModel> {
|
|||
}
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
|
|
Loading…
Reference in a new issue