Merge branch 'main' of ssh://code.freedombone.net:2222/bashrc/epicyon into main

main
Bob Mottram 2021-03-01 23:14:58 +00:00
commit 85767847ca
3 changed files with 48 additions and 37 deletions

View File

@ -1370,8 +1370,10 @@ def _receiveAnnounce(recentPostsCache: {},
if debug:
print('DEBUG: Downloading announce post ' + messageJson['actor'] +
' -> ' + messageJson['object'])
postJsonObject = downloadAnnounce(session, baseDir, httpPrefix,
nickname, domain, messageJson,
postJsonObject, alreadyExists = downloadAnnounce(session, baseDir,
httpPrefix,
nickname, domain,
messageJson,
__version__, translate,
YTReplacementDomain,
allowLocalNetworkAccess)
@ -1407,9 +1409,10 @@ def _receiveAnnounce(recentPostsCache: {},
if '/statuses/' in lookupActor:
lookupActor = lookupActor.split('/statuses/')[0]
if not alreadyExists:
_updateSpeaker(baseDir, nickname, domain,
postJsonObject, personCache,
translate)
translate, lookupActor)
if debug:
print('DEBUG: Obtaining actor for announce post ' +
@ -2146,7 +2149,7 @@ def _bounceDM(senderPostId: str, session, httpPrefix: str,
def _updateSpeaker(baseDir: str, nickname: str, domain: str,
postJsonObject: {}, personCache: {},
translate: {}) -> None:
translate: {}, announcingActor: str) -> None:
""" Generates a json file which can be used for TTS announcement
of incoming inbox posts
"""
@ -2187,6 +2190,14 @@ def _updateSpeaker(baseDir: str, nickname: str, domain: str,
speakerName = \
getDisplayName(baseDir, postJsonObject['actor'], personCache)
if not speakerName:
return
if announcingActor:
announcedNickname = getNicknameFromActor(announcingActor)
announcedDomain = getDomainFromActor(announcingActor)
announcedHandle = announcedNickname + '@' + announcedDomain
content = \
translate['announces'] + ' ' + announcedHandle + '. ' + content
speakerJson = {
"name": speakerName,
"summary": summary,
@ -2534,7 +2545,7 @@ def _inboxAfterInitial(recentPostsCache: {}, maxRecentPosts: int,
if boxname == 'inbox':
_updateSpeaker(baseDir, nickname, domain,
postJsonObject, personCache,
translate)
translate, None)
if not unitTest:
if debug:
print('Saving inbox post as html to cache')

View File

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

View File

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