Only speak announces once

merge-requests/30/head
Bob Mottram 2021-03-01 22:59:40 +00:00
parent a4f2bfdc06
commit 2787ceb724
3 changed files with 38 additions and 35 deletions

View File

@ -1370,11 +1370,13 @@ def _receiveAnnounce(recentPostsCache: {},
if debug: if debug:
print('DEBUG: Downloading announce post ' + messageJson['actor'] + print('DEBUG: Downloading announce post ' + messageJson['actor'] +
' -> ' + messageJson['object']) ' -> ' + messageJson['object'])
postJsonObject = downloadAnnounce(session, baseDir, httpPrefix, postJsonObject, alreadyExists = downloadAnnounce(session, baseDir,
nickname, domain, messageJson, httpPrefix,
__version__, translate, nickname, domain,
YTReplacementDomain, messageJson,
allowLocalNetworkAccess) __version__, translate,
YTReplacementDomain,
allowLocalNetworkAccess)
if not postJsonObject: if not postJsonObject:
notInOnion = True notInOnion = True
if onionDomain: if onionDomain:
@ -1407,9 +1409,10 @@ def _receiveAnnounce(recentPostsCache: {},
if '/statuses/' in lookupActor: if '/statuses/' in lookupActor:
lookupActor = lookupActor.split('/statuses/')[0] lookupActor = lookupActor.split('/statuses/')[0]
_updateSpeaker(baseDir, nickname, domain, if not alreadyExists:
postJsonObject, personCache, _updateSpeaker(baseDir, nickname, domain,
translate) postJsonObject, personCache,
translate)
if debug: if debug:
print('DEBUG: Obtaining actor for announce post ' + print('DEBUG: Obtaining actor for announce post ' +

View File

@ -2956,7 +2956,7 @@ def isImageMedia(session, baseDir: str, httpPrefix: str,
"""Returns true if the given post has attached image media """Returns true if the given post has attached image media
""" """
if postJsonObject['type'] == 'Announce': if postJsonObject['type'] == 'Announce':
postJsonAnnounce = \ postJsonAnnounce, alreadyExists = \
downloadAnnounce(session, baseDir, httpPrefix, downloadAnnounce(session, baseDir, httpPrefix,
nickname, domain, postJsonObject, nickname, domain, postJsonObject,
__version__, translate, __version__, translate,
@ -3879,13 +3879,13 @@ def downloadAnnounce(session, baseDir: str, httpPrefix: str,
nickname: str, domain: str, nickname: str, domain: str,
postJsonObject: {}, projectVersion: str, postJsonObject: {}, projectVersion: str,
translate: {}, YTReplacementDomain: str, translate: {}, YTReplacementDomain: str,
allowLocalNetworkAccess: bool) -> {}: allowLocalNetworkAccess: bool) -> ({}, bool):
"""Download the post referenced by an announce """Download the post referenced by an announce
""" """
if not postJsonObject.get('object'): if not postJsonObject.get('object'):
return None return None, False
if not isinstance(postJsonObject['object'], str): if not isinstance(postJsonObject['object'], str):
return None return None, False
# get the announced post # get the announced post
announceCacheDir = baseDir + '/cache/announce/' + nickname announceCacheDir = baseDir + '/cache/announce/' + nickname
@ -3896,14 +3896,14 @@ def downloadAnnounce(session, baseDir: str, httpPrefix: str,
postJsonObject['object'].replace('/', '#') + '.json' postJsonObject['object'].replace('/', '#') + '.json'
if os.path.isfile(announceFilename + '.reject'): if os.path.isfile(announceFilename + '.reject'):
return None return None, False
if os.path.isfile(announceFilename): if os.path.isfile(announceFilename):
print('Reading cached Announce content for ' + print('Reading cached Announce content for ' +
postJsonObject['object']) postJsonObject['object'])
postJsonObject = loadJson(announceFilename) postJsonObject = loadJson(announceFilename)
if postJsonObject: if postJsonObject:
return postJsonObject return postJsonObject, True
else: else:
profileStr = 'https://www.w3.org/ns/activitystreams' profileStr = 'https://www.w3.org/ns/activitystreams'
asHeader = { asHeader = {
@ -3920,18 +3920,18 @@ def downloadAnnounce(session, baseDir: str, httpPrefix: str,
print('Announce actor does not contain a ' + print('Announce actor does not contain a ' +
'valid domain or port number: ' + 'valid domain or port number: ' +
str(postJsonObject['actor'])) str(postJsonObject['actor']))
return None return None, False
if isBlocked(baseDir, nickname, domain, actorNickname, actorDomain): if isBlocked(baseDir, nickname, domain, actorNickname, actorDomain):
print('Announce download blocked actor: ' + print('Announce download blocked actor: ' +
actorNickname + '@' + actorDomain) actorNickname + '@' + actorDomain)
return None return None, False
objectNickname = getNicknameFromActor(postJsonObject['object']) objectNickname = getNicknameFromActor(postJsonObject['object'])
objectDomain, objectPort = getDomainFromActor(postJsonObject['object']) objectDomain, objectPort = getDomainFromActor(postJsonObject['object'])
if not objectDomain: if not objectDomain:
print('Announce object does not contain a ' + print('Announce object does not contain a ' +
'valid domain or port number: ' + 'valid domain or port number: ' +
str(postJsonObject['object'])) str(postJsonObject['object']))
return None return None, False
if isBlocked(baseDir, nickname, domain, objectNickname, objectDomain): if isBlocked(baseDir, nickname, domain, objectNickname, objectDomain):
if objectNickname and objectDomain: if objectNickname and objectDomain:
print('Announce download blocked object: ' + print('Announce download blocked object: ' +
@ -3939,56 +3939,56 @@ def downloadAnnounce(session, baseDir: str, httpPrefix: str,
else: else:
print('Announce download blocked object: ' + print('Announce download blocked object: ' +
str(postJsonObject['object'])) str(postJsonObject['object']))
return None return None, False
print('Downloading Announce content for ' + postJsonObject['object']) print('Downloading Announce content for ' + postJsonObject['object'])
announcedJson = \ announcedJson = \
getJson(session, postJsonObject['object'], asHeader, getJson(session, postJsonObject['object'], asHeader,
None, projectVersion, httpPrefix, domain) None, projectVersion, httpPrefix, domain)
if not announcedJson: if not announcedJson:
return None return None, False
if not isinstance(announcedJson, dict): if not isinstance(announcedJson, dict):
print('WARN: announce json is not a dict - ' + print('WARN: announce json is not a dict - ' +
postJsonObject['object']) postJsonObject['object'])
_rejectAnnounce(announceFilename) _rejectAnnounce(announceFilename)
return None return None, False
if not announcedJson.get('id'): if not announcedJson.get('id'):
_rejectAnnounce(announceFilename) _rejectAnnounce(announceFilename)
return None return None, False
if '/statuses/' not in announcedJson['id']: if '/statuses/' not in announcedJson['id']:
_rejectAnnounce(announceFilename) _rejectAnnounce(announceFilename)
return None return None, False
if not hasUsersPath(announcedJson['id']): if not hasUsersPath(announcedJson['id']):
_rejectAnnounce(announceFilename) _rejectAnnounce(announceFilename)
return None return None, False
if not announcedJson.get('type'): if not announcedJson.get('type'):
_rejectAnnounce(announceFilename) _rejectAnnounce(announceFilename)
return None return None, False
if announcedJson['type'] != 'Note' and \ if announcedJson['type'] != 'Note' and \
announcedJson['type'] != 'Article': announcedJson['type'] != 'Article':
# You can only announce Note or Article types # You can only announce Note or Article types
_rejectAnnounce(announceFilename) _rejectAnnounce(announceFilename)
return None return None, False
if not announcedJson.get('content'): if not announcedJson.get('content'):
_rejectAnnounce(announceFilename) _rejectAnnounce(announceFilename)
return None return None, False
if not announcedJson.get('published'): if not announcedJson.get('published'):
_rejectAnnounce(announceFilename) _rejectAnnounce(announceFilename)
return None return None, False
if not validPostDate(announcedJson['published']): if not validPostDate(announcedJson['published']):
_rejectAnnounce(announceFilename) _rejectAnnounce(announceFilename)
return None return None, False
# Check the content of the announce # Check the content of the announce
contentStr = announcedJson['content'] contentStr = announcedJson['content']
if dangerousMarkup(contentStr, allowLocalNetworkAccess): if dangerousMarkup(contentStr, allowLocalNetworkAccess):
_rejectAnnounce(announceFilename) _rejectAnnounce(announceFilename)
return None return None, False
if isFiltered(baseDir, nickname, domain, contentStr): if isFiltered(baseDir, nickname, domain, contentStr):
_rejectAnnounce(announceFilename) _rejectAnnounce(announceFilename)
return None return None, False
# remove any long words # remove any long words
contentStr = removeLongWords(contentStr, 40, []) contentStr = removeLongWords(contentStr, 40, [])
@ -4007,7 +4007,7 @@ def downloadAnnounce(session, baseDir: str, httpPrefix: str,
if announcedJson['type'] != 'Create': if announcedJson['type'] != 'Create':
# Create wrap failed # Create wrap failed
_rejectAnnounce(announceFilename) _rejectAnnounce(announceFilename)
return None return None, False
# labelAccusatoryPost(postJsonObject, translate) # labelAccusatoryPost(postJsonObject, translate)
# set the id to the original status # set the id to the original status
@ -4023,12 +4023,12 @@ def downloadAnnounce(session, baseDir: str, httpPrefix: str,
if isBlocked(baseDir, nickname, domain, if isBlocked(baseDir, nickname, domain,
attributedNickname, attributedDomain): attributedNickname, attributedDomain):
_rejectAnnounce(announceFilename) _rejectAnnounce(announceFilename)
return None return None, False
postJsonObject = announcedJson postJsonObject = announcedJson
replaceYouTube(postJsonObject, YTReplacementDomain) replaceYouTube(postJsonObject, YTReplacementDomain)
if saveJson(postJsonObject, announceFilename): if saveJson(postJsonObject, announceFilename):
return postJsonObject return postJsonObject, False
return None return None, False
def isMuted(baseDir: str, nickname: str, domain: str, postId: str) -> bool: def isMuted(baseDir: str, nickname: str, domain: str, postId: str) -> bool:

View File

@ -1281,7 +1281,7 @@ def individualPostAsHtml(allowDownloads: bool,
galleryStr = '' galleryStr = ''
isAnnounced = False isAnnounced = False
if postJsonObject['type'] == 'Announce': if postJsonObject['type'] == 'Announce':
postJsonAnnounce = \ postJsonAnnounce, alreadyExists = \
downloadAnnounce(session, baseDir, httpPrefix, downloadAnnounce(session, baseDir, httpPrefix,
nickname, domain, postJsonObject, nickname, domain, postJsonObject,
projectVersion, translate, projectVersion, translate,