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 let comment: MCommentOwnerVideo
try { try {
const resolveThreadResult = await resolveThread({ url: commentObject.id, isVideo: false }) const resolveThreadResult = await resolveThread({ url: commentObject.id, isVideo: false })
video = resolveThreadResult.video video = resolveThreadResult.video
created = resolveThreadResult.commentCreated created = resolveThreadResult.commentCreated
comment = resolveThreadResult.comment comment = resolveThreadResult.comment
@ -104,17 +105,19 @@ async function processCreateVideoComment (activity: ActivityCreate, byActor: MAc
} }
// Try to not forward unwanted commments on our videos // Try to not forward unwanted commments on our videos
if (video.isOwned() && await isBlockedByServerOrAccount(comment.Account, video.VideoChannel.Account)) { 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) logger.info('Skip comment forward from blocked account or server %s.', comment.Account.Actor.url)
return return
} }
if (video.isOwned() && created === true) { if (created === true) {
// Don't resend the activity to the sender // Don't resend the activity to the sender
const exceptions = [ byActor ] const exceptions = [ byActor ]
await forwardVideoRelatedActivity(activity, undefined, exceptions, video) await forwardVideoRelatedActivity(activity, undefined, exceptions, video)
} }
}
if (created && notify) Notifier.Instance.notifyOnNewComment(comment) 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 = [] if (params.comments === undefined) params.comments = []
// Already have this comment? // Already have this comment?
if (isVideo !== true) { if (isVideo === false) {
const result = await resolveCommentFromDB(params) const result = await resolveCommentFromDB(params)
if (result) return result if (result) return result
} }
try { try {
if (isVideo !== false) return await tryResolveThreadFromVideo(params) if (isVideo === true) return tryResolveThreadFromVideo(params)
return resolveParentComment(params)
} catch (err) { } catch (err) {
logger.debug('Cannot get or create account and video and channel for reply %s, fetch comment', url, { 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 { 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 syncParam = { likes: true, dislikes: true, shares: true, comments: false, thumbnail: true, refreshVideo: false }
const { video } = await getOrCreateVideoAndAccountAndChannel({ videoObject: url, syncParam }) 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 let resultComment: MCommentOwnerVideo
if (comments.length !== 0) { if (comments.length !== 0) {
const firstReply = comments[comments.length - 1] as MCommentOwnerVideo const firstReply = comments[comments.length - 1] as MCommentOwnerVideo