From 50319d153c09f2a58478bc16e165ae541ea4e328 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 3 Nov 2021 21:53:30 +0000 Subject: [PATCH] When a question vote arrives then update the inbox index --- inbox.py | 10 +++++++--- question.py | 38 +++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/inbox.py b/inbox.py index 2ff5d6f83..227c50c1a 100644 --- a/inbox.py +++ b/inbox.py @@ -2789,9 +2789,13 @@ def _inboxAfterInitial(recentPostsCache: {}, maxRecentPosts: int, maxReplies, debug) # if this is a reply to a question then update the votes - questionJson = questionUpdateVotes(baseDir, nickname, domain, - postJsonObject) - if questionJson: + questionJson, questionPostFilename = \ + questionUpdateVotes(baseDir, nickname, domain, postJsonObject) + if questionJson and questionPostFilename: + removePostFromCache(postJsonObject, recentPostsCache) + # add id to inbox index + inboxUpdateIndex('inbox', baseDir, handle, + questionPostFilename, debug) # Is this a question created by this instance? idPrefix = httpPrefix + '://' + domain if questionJson['object']['id'].startswith(idPrefix): diff --git a/question.py b/question.py index 54f8f4485..925b6bb1c 100644 --- a/question.py +++ b/question.py @@ -15,42 +15,42 @@ from utils import hasObjectDict def questionUpdateVotes(baseDir: str, nickname: str, domain: str, - replyJson: {}) -> {}: + replyJson: {}) -> ({}, str): """ For a given reply update the votes on a question Returns the question json object if the vote totals were changed """ if not hasObjectDict(replyJson): - return None + return None, None if not replyJson['object'].get('inReplyTo'): - return None + return None, None if not replyJson['object']['inReplyTo']: - return None + return None, None if not isinstance(replyJson['object']['inReplyTo'], str): - return None + return None, None if not replyJson['object'].get('name'): - return None + return None, None inReplyTo = replyJson['object']['inReplyTo'] questionPostFilename = locatePost(baseDir, nickname, domain, inReplyTo) if not questionPostFilename: - return None + return None, None questionJson = loadJson(questionPostFilename) if not questionJson: - return None + return None, None if not hasObjectDict(questionJson): - return None + return None, None if not questionJson['object'].get('type'): - return None + return None, None if questionJson['type'] != 'Question': - return None + return None, None if not questionJson['object'].get('oneOf'): - return None + return None, None if not isinstance(questionJson['object']['oneOf'], list): - return None + return None, None if not questionJson['object'].get('content'): - return None + return None, None replyVote = replyJson['object']['name'] # does the reply name field match any possible question option? - foundAnswer = None + foundAnswer = None, None for possibleAnswer in questionJson['object']['oneOf']: if not possibleAnswer.get('name'): continue @@ -58,7 +58,7 @@ def questionUpdateVotes(baseDir: str, nickname: str, domain: str, foundAnswer = possibleAnswer break if not foundAnswer: - return None + return None, None # update the voters file votersFileSeparator = ';;;' votersFilename = questionPostFilename.replace('.json', '.voters') @@ -97,7 +97,7 @@ def questionUpdateVotes(baseDir: str, nickname: str, domain: str, for voteLine in newlines: votersFile.write(voteLine) else: - return None + return None, None # update the vote counts questionTotalsChanged = False for possibleAnswer in questionJson['object']['oneOf']: @@ -114,10 +114,10 @@ def questionUpdateVotes(baseDir: str, nickname: str, domain: str, possibleAnswer['replies']['totalItems'] = totalItems questionTotalsChanged = True if not questionTotalsChanged: - return None + return None, None # save the question with altered totals saveJson(questionJson, questionPostFilename) - return questionJson + return questionJson, questionPostFilename def isQuestion(postObjectJson: {}) -> bool: