Check threads resolve on non federated videos

pull/3289/head
Chocobozzz 2020-11-10 14:34:04 +01:00
parent d470441424
commit 403c69c5a3
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
2 changed files with 19 additions and 14 deletions

View File

@ -91,6 +91,7 @@ async function processCreateVideoComment (activity: ActivityCreate, byActor: MAc
let comment: MCommentOwnerVideo
try {
const resolveThreadResult = await resolveThread({ url: commentObject.id, isVideo: false })
video = resolveThreadResult.video
created = resolveThreadResult.commentCreated
comment = resolveThreadResult.comment
@ -104,16 +105,18 @@ async function processCreateVideoComment (activity: ActivityCreate, byActor: MAc
}
// Try to not forward unwanted commments on our videos
if (video.isOwned() && await isBlockedByServerOrAccount(comment.Account, video.VideoChannel.Account)) {
logger.info('Skip comment forward from blocked account or server %s.', comment.Account.Actor.url)
return
}
if (video.isOwned()) {
if (await isBlockedByServerOrAccount(comment.Account, video.VideoChannel.Account)) {
logger.info('Skip comment forward from blocked account or server %s.', comment.Account.Actor.url)
return
}
if (video.isOwned() && created === true) {
// Don't resend the activity to the sender
const exceptions = [ byActor ]
if (created === true) {
// Don't resend the activity to the sender
const exceptions = [ byActor ]
await forwardVideoRelatedActivity(activity, undefined, exceptions, video)
await forwardVideoRelatedActivity(activity, undefined, exceptions, video)
}
}
if (created && notify) Notifier.Instance.notifyOnNewComment(comment)

View File

@ -29,20 +29,18 @@ async function resolveThread (params: ResolveThreadParams): ResolveThreadResult
if (params.comments === undefined) params.comments = []
// Already have this comment?
if (isVideo !== true) {
if (isVideo === false) {
const result = await resolveCommentFromDB(params)
if (result) return result
}
try {
if (isVideo !== false) return await tryResolveThreadFromVideo(params)
return resolveParentComment(params)
if (isVideo === true) return tryResolveThreadFromVideo(params)
} catch (err) {
logger.debug('Cannot get or create account and video and channel for reply %s, fetch comment', url, { err })
return resolveParentComment(params)
}
return resolveParentComment(params)
}
export {
@ -85,6 +83,10 @@ async function tryResolveThreadFromVideo (params: ResolveThreadParams) {
const syncParam = { likes: true, dislikes: true, shares: true, comments: false, thumbnail: true, refreshVideo: false }
const { video } = await getOrCreateVideoAndAccountAndChannel({ videoObject: url, syncParam })
if (video.isOwned() && !video.hasPrivacyForFederation()) {
throw new Error('Cannot resolve thread of video with privacy that is not compatible with federation')
}
let resultComment: MCommentOwnerVideo
if (comments.length !== 0) {
const firstReply = comments[comments.length - 1] as MCommentOwnerVideo