Handle post cache for undo like

main
Bob Mottram 2019-11-24 13:37:34 +00:00
parent ae150ca710
commit 0aedab61fb
4 changed files with 35 additions and 14 deletions

View File

@ -658,7 +658,8 @@ class PubServer(BaseHTTPRequestHandler):
if self.server.debug: if self.server.debug:
print('DEBUG: handle any like requests') print('DEBUG: handle any like requests')
outboxLike(self.server.baseDir,self.server.httpPrefix, \ outboxLike(self.server.recentPostsCache, \
self.server.baseDir,self.server.httpPrefix, \
self.postToNickname,self.server.domain,self.server.port, \ self.postToNickname,self.server.domain,self.server.port, \
messageJson,self.server.debug) messageJson,self.server.debug)
if self.server.debug: if self.server.debug:

View File

@ -827,7 +827,8 @@ def receiveUpdate(session,baseDir: str, \
return True return True
return False return False
def receiveLike(session,handle: str,isGroup: bool,baseDir: str, \ def receiveLike(recentPostsCache: {}, \
session,handle: str,isGroup: bool,baseDir: str, \
httpPrefix: str,domain :str,port: int, \ httpPrefix: str,domain :str,port: int, \
sendThreads: [],postLog: [],cachedWebfingers: {}, \ sendThreads: [],postLog: [],cachedWebfingers: {}, \
personCache: {},messageJson: {},federationList: [], \ personCache: {},messageJson: {},federationList: [], \
@ -874,7 +875,9 @@ def receiveLike(session,handle: str,isGroup: bool,baseDir: str, \
if debug: if debug:
print('DEBUG: liked post found in inbox') print('DEBUG: liked post found in inbox')
updateLikesCollection(baseDir,postFilename,messageJson['object'],messageJson['actor'],domain,debug) updateLikesCollection(recentPostsCache,baseDir,postFilename, \
messageJson['object'], \
messageJson['actor'],domain,debug)
return True return True
def receiveUndoLike(session,handle: str,isGroup: bool,baseDir: str, \ def receiveUndoLike(session,handle: str,isGroup: bool,baseDir: str, \
@ -1649,7 +1652,8 @@ def inboxAfterCapabilities(recentPostsCache: {},maxRecentPosts: int, \
isGroup=groupHandle(baseDir,handle) isGroup=groupHandle(baseDir,handle)
if receiveLike(session,handle,isGroup, \ if receiveLike(recentPostsCache, \
session,handle,isGroup, \
baseDir,httpPrefix, \ baseDir,httpPrefix, \
domain,port, \ domain,port, \
sendThreads,postLog, \ sendThreads,postLog, \

34
like.py
View File

@ -102,7 +102,8 @@ def noOfLikes(postJsonObject: {}) -> int:
postJsonObject['object']['likes']['totalItems']=0 postJsonObject['object']['likes']['totalItems']=0
return len(postJsonObject['object']['likes']['items']) return len(postJsonObject['object']['likes']['items'])
def updateLikesCollection(baseDir: str,postFilename: str, \ def updateLikesCollection(recentPostsCache: {}, \
baseDir: str,postFilename: str, \
objectUrl: str, \ objectUrl: str, \
actor: str,domain: str,debug: bool) -> None: actor: str,domain: str,debug: bool) -> None:
"""Updates the likes collection within a post """Updates the likes collection within a post
@ -115,6 +116,13 @@ def updateLikesCollection(baseDir: str,postFilename: str, \
getCachedPostFilename(baseDir,nickname,domain,postJsonObject) getCachedPostFilename(baseDir,nickname,domain,postJsonObject)
if os.path.isfile(cachedPostFilename): if os.path.isfile(cachedPostFilename):
os.remove(cachedPostFilename) os.remove(cachedPostFilename)
# if the post exists in the recent posts cache then remove it
if postJsonObject.get('id') and recentPostsCache.get('index'):
postId=postJsonObject['id'].replace('/activity','').replace('/','#')
if postId in recentPostsCache['index']:
del recentPostsCache['json'][postId]
del recentPostsCache['html'][postId]
recentPostsCache['index'].remove(postId)
if not postJsonObject.get('object'): if not postJsonObject.get('object'):
if debug: if debug:
@ -157,7 +165,8 @@ def updateLikesCollection(baseDir: str,postFilename: str, \
pprint(postJsonObject) pprint(postJsonObject)
saveJson(postJsonObject,postFilename) saveJson(postJsonObject,postFilename)
def like(session,baseDir: str,federationList: [], \ def like(recentPostsCache: {}, \
session,baseDir: str,federationList: [], \
nickname: str,domain: str,port: int, \ nickname: str,domain: str,port: int, \
ccList: [],httpPrefix: str, \ ccList: [],httpPrefix: str, \
objectUrl: str,actorLiked: str, \ objectUrl: str,actorLiked: str, \
@ -216,7 +225,8 @@ def like(session,baseDir: str,federationList: [], \
print('DEBUG: like objectUrl: '+objectUrl) print('DEBUG: like objectUrl: '+objectUrl)
return None return None
updateLikesCollection(baseDir,postFilename,objectUrl, \ updateLikesCollection(recentPostsCache, \
baseDir,postFilename,objectUrl, \
newLikeJson['actor'],domain,debug) newLikeJson['actor'],domain,debug)
sendSignedJson(newLikeJson,session,baseDir, \ sendSignedJson(newLikeJson,session,baseDir, \
@ -257,12 +267,14 @@ def likePost(session,baseDir: str,federationList: [], \
httpPrefix+'://'+likeDomain+':'+ \ httpPrefix+'://'+likeDomain+':'+ \
str(likePort)+'/users/'+likeNickname str(likePort)+'/users/'+likeNickname
return like(session,baseDir,federationList,nickname,domain,port, \ return like(recentPostsCache, \
session,baseDir,federationList,nickname,domain,port, \
ccList,httpPrefix,objectUrl,actorLiked,clientToServer, \ ccList,httpPrefix,objectUrl,actorLiked,clientToServer, \
sendThreads,postLog,personCache,cachedWebfingers, \ sendThreads,postLog,personCache,cachedWebfingers, \
debug,projectVersion) debug,projectVersion)
def undolike(session,baseDir: str,federationList: [], \ def undolike(recentPostsCache: {}, \
session,baseDir: str,federationList: [], \
nickname: str,domain: str,port: int, \ nickname: str,domain: str,port: int, \
ccList: [],httpPrefix: str, \ ccList: [],httpPrefix: str, \
objectUrl: str,actorLiked: str, \ objectUrl: str,actorLiked: str, \
@ -337,7 +349,8 @@ def undolike(session,baseDir: str,federationList: [], \
return newUndoLikeJson return newUndoLikeJson
def undoLikePost(session,baseDir: str,federationList: [], \ def undoLikePost(recentPostsCache: {}, \
session,baseDir: str,federationList: [], \
nickname: str,domain: str,port: int,httpPrefix: str, \ nickname: str,domain: str,port: int,httpPrefix: str, \
likeNickname: str,likeDomain: str,likePort: int, \ likeNickname: str,likeDomain: str,likePort: int, \
ccList: [], \ ccList: [], \
@ -365,7 +378,8 @@ def undoLikePost(session,baseDir: str,federationList: [], \
httpPrefix+'://'+likeDomain+':'+ \ httpPrefix+'://'+likeDomain+':'+ \
str(likePort)+'/users/'+likeNickname str(likePort)+'/users/'+likeNickname
return undoLike(session,baseDir,federationList,nickname,domain,port, \ return undoLike(recentPostsCache, \
session,baseDir,federationList,nickname,domain,port, \
ccList,httpPrefix,objectUrl,clientToServer, \ ccList,httpPrefix,objectUrl,clientToServer, \
sendThreads,postLog,personCache,cachedWebfingers,debug) sendThreads,postLog,personCache,cachedWebfingers,debug)
@ -523,7 +537,8 @@ def sendUndoLikeViaServer(baseDir: str,session, \
return newUndoLikeJson return newUndoLikeJson
def outboxLike(baseDir: str,httpPrefix: str, \ def outboxLike(recentPostsCache: {}, \
baseDir: str,httpPrefix: str, \
nickname: str,domain: str,port: int, \ nickname: str,domain: str,port: int, \
messageJson: {},debug: bool) -> None: messageJson: {},debug: bool) -> None:
""" When a like request is received by the outbox from c2s """ When a like request is received by the outbox from c2s
@ -556,7 +571,8 @@ def outboxLike(baseDir: str,httpPrefix: str, \
print('DEBUG: c2s like post not found in inbox or outbox') print('DEBUG: c2s like post not found in inbox or outbox')
print(messageId) print(messageId)
return True return True
updateLikesCollection(baseDir,postFilename,messageId, \ updateLikesCollection(recentPostsCache, \
baseDir,postFilename,messageId, \
messageJson['actor'],domain,debug) messageJson['actor'],domain,debug)
if debug: if debug:
print('DEBUG: post liked via c2s - '+postFilename) print('DEBUG: post liked via c2s - '+postFilename)

View File

@ -470,7 +470,7 @@ def testPostMessageBetweenServers():
outboxPostFilename=outboxPath+'/'+name outboxPostFilename=outboxPath+'/'+name
assert statusNumber>0 assert statusNumber>0
assert outboxPostFilename assert outboxPostFilename
assert likePost(sessionBob,bobDir,federationList, \ assert likePost({},sessionBob,bobDir,federationList, \
'bob',bobDomain,bobPort,httpPrefix, \ 'bob',bobDomain,bobPort,httpPrefix, \
'alice',aliceDomain,alicePort,[], \ 'alice',aliceDomain,alicePort,[], \
statusNumber,False,bobSendThreads,bobPostLog, \ statusNumber,False,bobSendThreads,bobPostLog, \