Check post recency before creating speaker endpoint

merge-requests/30/head
Bob Mottram 2021-03-03 20:16:53 +00:00
parent 19a9fe0970
commit a9f5831db9
3 changed files with 58 additions and 22 deletions

View File

@ -11,6 +11,7 @@ import os
import datetime
import time
from linked_data_sig import verifyJsonSignature
from utils import isRecentPost
from utils import getConfigParam
from utils import hasUsersPath
from utils import validPostDate
@ -1404,14 +1405,15 @@ def _receiveAnnounce(recentPostsCache: {},
if '/statuses/' in lookupActor:
lookupActor = lookupActor.split('/statuses/')[0]
if not os.path.isfile(postFilename + '.tts'):
updateSpeaker(baseDir, nickname, domain,
postJsonObject, personCache,
translate, lookupActor)
ttsFile = open(postFilename + '.tts', "w+")
if ttsFile:
ttsFile.write('\n')
ttsFile.close()
if isRecentPost(postJsonObject):
if not os.path.isfile(postFilename + '.tts'):
updateSpeaker(baseDir, nickname, domain,
postJsonObject, personCache,
translate, lookupActor)
ttsFile = open(postFilename + '.tts', "w+")
if ttsFile:
ttsFile.write('\n')
ttsFile.close()
if debug:
print('DEBUG: Obtaining actor for announce post ' +
@ -2481,9 +2483,10 @@ def _inboxAfterInitial(recentPostsCache: {}, maxRecentPosts: int,
print('ERROR: unable to update ' + boxname + ' index')
else:
if boxname == 'inbox':
updateSpeaker(baseDir, nickname, domain,
postJsonObject, personCache,
translate, None)
if isRecentPost(postJsonObject):
updateSpeaker(baseDir, nickname, domain,
postJsonObject, personCache,
translate, None)
if not unitTest:
if debug:
print('Saving inbox post as html to cache')

View File

@ -1990,3 +1990,33 @@ def mediaFileMimeType(filename: str) -> str:
if not extensions.get(fileExt):
return 'image/png'
return extensions[fileExt]
def isRecentPost(postJsonObject: {}, maxDays=3) -> bool:
""" Is the given post recent?
"""
if not postJsonObject.get('object'):
return False
if not isinstance(postJsonObject['object'], dict):
return False
if not postJsonObject['object'].get('published'):
return False
if not isinstance(postJsonObject['object']['published'], str):
return False
currTime = datetime.datetime.utcnow()
daysSinceEpoch = (currTime - datetime.datetime(1970, 1, 1)).days
recently = daysSinceEpoch - maxDays
publishedDateStr = postJsonObject['object']['published']
try:
publishedDate = \
datetime.datetime.strptime(publishedDateStr,
"%Y-%m-%dT%H:%M:%SZ")
except BaseException:
return False
publishedDaysSinceEpoch = \
(publishedDate - datetime.datetime(1970, 1, 1)).days
if publishedDaysSinceEpoch < recently:
return False
return True

View File

@ -22,6 +22,7 @@ from posts import getPersonBox
from posts import isDM
from posts import downloadAnnounce
from posts import populateRepliesJson
from utils import isRecentPost
from utils import getConfigParam
from utils import getFullDomain
from utils import isEditor
@ -1292,17 +1293,19 @@ def individualPostAsHtml(allowDownloads: bool,
return ''
postJsonObject = postJsonAnnounce
announceFilename = \
locatePost(baseDir, nickname, domain, postJsonObject['id'])
if announceFilename and postJsonObject.get('actor'):
if not os.path.isfile(announceFilename + '.tts'):
updateSpeaker(baseDir, nickname, domain,
postJsonObject, personCache,
translate, postJsonObject['actor'])
ttsFile = open(announceFilename + '.tts', "w+")
if ttsFile:
ttsFile.write('\n')
ttsFile.close()
if isRecentPost(postJsonObject):
announceFilename = \
locatePost(baseDir, nickname, domain,
postJsonObject['id'])
if announceFilename and postJsonObject.get('actor'):
if not os.path.isfile(announceFilename + '.tts'):
updateSpeaker(baseDir, nickname, domain,
postJsonObject, personCache,
translate, postJsonObject['actor'])
ttsFile = open(announceFilename + '.tts', "w+")
if ttsFile:
ttsFile.write('\n')
ttsFile.close()
isAnnounced = True