diff --git a/inbox.py b/inbox.py index b47ec94e3..3e9bd1caa 100644 --- a/inbox.py +++ b/inbox.py @@ -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') diff --git a/utils.py b/utils.py index 7460417dc..6c0c48595 100644 --- a/utils.py +++ b/utils.py @@ -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 diff --git a/webapp_post.py b/webapp_post.py index a0ba9a96a..c06c55959 100644 --- a/webapp_post.py +++ b/webapp_post.py @@ -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