forked from indymedia/epicyon
Store recent posts in memory for fast access
parent
1fb7811d08
commit
bd68e84776
33
daemon.py
33
daemon.py
|
@ -2420,7 +2420,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.httpPrefix, \
|
self.server.httpPrefix, \
|
||||||
maxPostsInFeed, 'inbox', \
|
maxPostsInFeed, 'inbox', \
|
||||||
authorized,self.server.ocapAlways)
|
authorized,self.server.ocapAlways)
|
||||||
msg=htmlInbox(self.server.translate, \
|
msg=htmlInbox(self.server.recentPostsCache, \
|
||||||
|
self.server.translate, \
|
||||||
pageNumber,maxPostsInFeed, \
|
pageNumber,maxPostsInFeed, \
|
||||||
self.server.session, \
|
self.server.session, \
|
||||||
self.server.baseDir, \
|
self.server.baseDir, \
|
||||||
|
@ -2494,7 +2495,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.httpPrefix, \
|
self.server.httpPrefix, \
|
||||||
maxPostsInFeed, 'dm', \
|
maxPostsInFeed, 'dm', \
|
||||||
authorized,self.server.ocapAlways)
|
authorized,self.server.ocapAlways)
|
||||||
msg=htmlInboxDMs(self.server.translate, \
|
msg=htmlInboxDMs(self.server.recentPostsCache, \
|
||||||
|
self.server.translate, \
|
||||||
pageNumber,maxPostsInFeed, \
|
pageNumber,maxPostsInFeed, \
|
||||||
self.server.session, \
|
self.server.session, \
|
||||||
self.server.baseDir, \
|
self.server.baseDir, \
|
||||||
|
@ -2569,7 +2571,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.httpPrefix, \
|
self.server.httpPrefix, \
|
||||||
maxPostsInFeed, 'tlreplies', \
|
maxPostsInFeed, 'tlreplies', \
|
||||||
True,self.server.ocapAlways)
|
True,self.server.ocapAlways)
|
||||||
msg=htmlInboxReplies(self.server.translate, \
|
msg=htmlInboxReplies(self.server.recentPostsCache, \
|
||||||
|
self.server.translate, \
|
||||||
pageNumber,maxPostsInFeed, \
|
pageNumber,maxPostsInFeed, \
|
||||||
self.server.session, \
|
self.server.session, \
|
||||||
self.server.baseDir, \
|
self.server.baseDir, \
|
||||||
|
@ -2644,7 +2647,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.httpPrefix, \
|
self.server.httpPrefix, \
|
||||||
maxPostsInMediaFeed, 'tlmedia', \
|
maxPostsInMediaFeed, 'tlmedia', \
|
||||||
True,self.server.ocapAlways)
|
True,self.server.ocapAlways)
|
||||||
msg=htmlInboxMedia(self.server.translate, \
|
msg=htmlInboxMedia(self.server.recentPostsCache, \
|
||||||
|
self.server.translate, \
|
||||||
pageNumber,maxPostsInMediaFeed, \
|
pageNumber,maxPostsInMediaFeed, \
|
||||||
self.server.session, \
|
self.server.session, \
|
||||||
self.server.baseDir, \
|
self.server.baseDir, \
|
||||||
|
@ -2697,7 +2701,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
pageNumber=int(pageNumber)
|
pageNumber=int(pageNumber)
|
||||||
else:
|
else:
|
||||||
pageNumber=1
|
pageNumber=1
|
||||||
msg=htmlShares(self.server.translate, \
|
msg=htmlShares(self.server.recentPostsCache, \
|
||||||
|
self.server.translate, \
|
||||||
pageNumber,maxPostsInFeed, \
|
pageNumber,maxPostsInFeed, \
|
||||||
self.server.session, \
|
self.server.session, \
|
||||||
self.server.baseDir, \
|
self.server.baseDir, \
|
||||||
|
@ -2756,7 +2761,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.httpPrefix, \
|
self.server.httpPrefix, \
|
||||||
maxPostsInFeed, 'tlbookmarks', \
|
maxPostsInFeed, 'tlbookmarks', \
|
||||||
authorized,self.server.ocapAlways)
|
authorized,self.server.ocapAlways)
|
||||||
msg=htmlBookmarks(self.server.translate, \
|
msg=htmlBookmarks(self.server.recentPostsCache, \
|
||||||
|
self.server.translate, \
|
||||||
pageNumber,maxPostsInFeed, \
|
pageNumber,maxPostsInFeed, \
|
||||||
self.server.session, \
|
self.server.session, \
|
||||||
self.server.baseDir, \
|
self.server.baseDir, \
|
||||||
|
@ -2826,7 +2832,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
maxPostsInFeed, 'outbox', \
|
maxPostsInFeed, 'outbox', \
|
||||||
authorized, \
|
authorized, \
|
||||||
self.server.ocapAlways)
|
self.server.ocapAlways)
|
||||||
msg=htmlOutbox(self.server.translate, \
|
msg=htmlOutbox(self.server.recentPostsCache, \
|
||||||
|
self.server.translate, \
|
||||||
pageNumber,maxPostsInFeed, \
|
pageNumber,maxPostsInFeed, \
|
||||||
self.server.session, \
|
self.server.session, \
|
||||||
self.server.baseDir, \
|
self.server.baseDir, \
|
||||||
|
@ -2890,7 +2897,8 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.httpPrefix, \
|
self.server.httpPrefix, \
|
||||||
maxPostsInFeed, 'moderation', \
|
maxPostsInFeed, 'moderation', \
|
||||||
True,self.server.ocapAlways)
|
True,self.server.ocapAlways)
|
||||||
msg=htmlModeration(self.server.translate, \
|
msg=htmlModeration(self.server.recentPostsCache, \
|
||||||
|
self.server.translate, \
|
||||||
pageNumber,maxPostsInFeed, \
|
pageNumber,maxPostsInFeed, \
|
||||||
self.server.session, \
|
self.server.session, \
|
||||||
self.server.baseDir, \
|
self.server.baseDir, \
|
||||||
|
@ -5092,7 +5100,8 @@ def loadTokens(baseDir: str,tokensDict: {},tokensLookup: {}) -> None:
|
||||||
tokensDict[nickname]=token
|
tokensDict[nickname]=token
|
||||||
tokensLookup[token]=nickname
|
tokensLookup[token]=nickname
|
||||||
|
|
||||||
def runDaemon(enableSharedInbox: bool,registration: bool, \
|
def runDaemon(maxRecentPosts: int, \
|
||||||
|
enableSharedInbox: bool,registration: bool, \
|
||||||
language: str,projectVersion: str, \
|
language: str,projectVersion: str, \
|
||||||
instanceId: str,clientToServer: bool, \
|
instanceId: str,clientToServer: bool, \
|
||||||
baseDir: str,domain: str, \
|
baseDir: str,domain: str, \
|
||||||
|
@ -5261,10 +5270,14 @@ def runDaemon(enableSharedInbox: bool,registration: bool, \
|
||||||
else:
|
else:
|
||||||
httpd.thrSharesExpire.start()
|
httpd.thrSharesExpire.start()
|
||||||
|
|
||||||
|
httpd.recentPostsCache={}
|
||||||
|
httpd.maxRecentPosts=maxRecentPosts
|
||||||
|
|
||||||
print('Creating inbox queue')
|
print('Creating inbox queue')
|
||||||
httpd.thrInboxQueue= \
|
httpd.thrInboxQueue= \
|
||||||
threadWithTrace(target=runInboxQueue, \
|
threadWithTrace(target=runInboxQueue, \
|
||||||
args=(projectVersion, \
|
args=(httpd.recentPostsCache,httpd.maxRecentPosts, \
|
||||||
|
projectVersion, \
|
||||||
baseDir,httpPrefix,httpd.sendThreads, \
|
baseDir,httpPrefix,httpd.sendThreads, \
|
||||||
httpd.postLog,httpd.cachedWebfingers, \
|
httpd.postLog,httpd.cachedWebfingers, \
|
||||||
httpd.personCache,httpd.inboxQueue, \
|
httpd.personCache,httpd.inboxQueue, \
|
||||||
|
|
|
@ -104,6 +104,8 @@ parser.add_argument('-d','--domain', dest='domain', type=str,default=None, \
|
||||||
help='Domain name of the server')
|
help='Domain name of the server')
|
||||||
parser.add_argument('-p','--port', dest='port', type=int,default=None, \
|
parser.add_argument('-p','--port', dest='port', type=int,default=None, \
|
||||||
help='Port number to run on')
|
help='Port number to run on')
|
||||||
|
parser.add_argument('--postcache', dest='maxRecentPosts', type=int,default=100, \
|
||||||
|
help='The maximum number of recent posts to store in RAM')
|
||||||
parser.add_argument('--proxy', dest='proxyPort', type=int,default=None, \
|
parser.add_argument('--proxy', dest='proxyPort', type=int,default=None, \
|
||||||
help='Proxy port number to run on')
|
help='Proxy port number to run on')
|
||||||
parser.add_argument('--path', dest='baseDir', \
|
parser.add_argument('--path', dest='baseDir', \
|
||||||
|
@ -1484,7 +1486,7 @@ if not registration:
|
||||||
if setTheme(baseDir,themeName):
|
if setTheme(baseDir,themeName):
|
||||||
print('Theme set to '+themeName)
|
print('Theme set to '+themeName)
|
||||||
|
|
||||||
runDaemon(not args.nosharedinbox, \
|
runDaemon(args.maxRecentPosts,not args.nosharedinbox, \
|
||||||
registration,args.language,__version__, \
|
registration,args.language,__version__, \
|
||||||
instanceId,args.client,baseDir, \
|
instanceId,args.client,baseDir, \
|
||||||
domain,port,proxyPort,httpPrefix, \
|
domain,port,proxyPort,httpPrefix, \
|
||||||
|
|
58
inbox.py
58
inbox.py
|
@ -55,7 +55,31 @@ from posts import sendSignedJson
|
||||||
from webinterface import individualPostAsHtml
|
from webinterface import individualPostAsHtml
|
||||||
from webinterface import getIconsDir
|
from webinterface import getIconsDir
|
||||||
|
|
||||||
def inboxStorePostToHtmlCache(translate: {}, \
|
def updateRecentPostsCache(recentPostsCache: {},maxRecentPosts: int, \
|
||||||
|
postJsonObject: {},htmlStr: str) -> None:
|
||||||
|
"""Store recent posts in memory so that they can be quickly recalled
|
||||||
|
"""
|
||||||
|
if not postJsonObject.get('id'):
|
||||||
|
return
|
||||||
|
postId=postJsonObject['id'].replace('/activity','').replace('/','#')
|
||||||
|
if recentPostsCache.get('index'):
|
||||||
|
recentPostsCache['index'].append(postId)
|
||||||
|
recentPostsCache['json'][postId]=postJsonObject.copy()
|
||||||
|
recentPostsCache['html'][postId]=htmlStr
|
||||||
|
|
||||||
|
while len(recentPostsCache['html'].items())>maxRecentPosts:
|
||||||
|
recentPostsCache['index'].pop(0)
|
||||||
|
del recentPostsCache['json'][postId]
|
||||||
|
del recentPostsCache['html'][postId]
|
||||||
|
else:
|
||||||
|
recentPostsCache['index']=[postId]
|
||||||
|
recentPostsCache['json']={}
|
||||||
|
recentPostsCache['html']={}
|
||||||
|
recentPostsCache['json'][postId]=postJsonObject.copy()
|
||||||
|
recentPostsCache['html'][postId]=htmlStr
|
||||||
|
|
||||||
|
def inboxStorePostToHtmlCache(recentPostsCache: {},maxRecentPosts: int, \
|
||||||
|
translate: {}, \
|
||||||
baseDir: str,httpPrefix: str, \
|
baseDir: str,httpPrefix: str, \
|
||||||
session,cachedWebfingers: {},personCache: {}, \
|
session,cachedWebfingers: {},personCache: {}, \
|
||||||
nickname: str,domain: str,port: int, \
|
nickname: str,domain: str,port: int, \
|
||||||
|
@ -68,13 +92,16 @@ def inboxStorePostToHtmlCache(translate: {}, \
|
||||||
showAvatarOptions=True
|
showAvatarOptions=True
|
||||||
avatarUrl=None
|
avatarUrl=None
|
||||||
boxName='inbox'
|
boxName='inbox'
|
||||||
individualPostAsHtml(getIconsDir(baseDir),translate,pageNumber, \
|
htmlStr= \
|
||||||
baseDir,session,cachedWebfingers,personCache, \
|
individualPostAsHtml(getIconsDir(baseDir),translate,pageNumber, \
|
||||||
nickname,domain,port,postJsonObject, \
|
baseDir,session,cachedWebfingers,personCache, \
|
||||||
avatarUrl,True,allowDeletion, \
|
nickname,domain,port,postJsonObject, \
|
||||||
httpPrefix,__version__,boxName, \
|
avatarUrl,True,allowDeletion, \
|
||||||
not isDM(postJsonObject), \
|
httpPrefix,__version__,boxName, \
|
||||||
True,True,False,True)
|
not isDM(postJsonObject), \
|
||||||
|
True,True,False,True)
|
||||||
|
updateRecentPostsCache(recentPostsCache,maxRecentPosts, \
|
||||||
|
postJsonObject,htmlStr)
|
||||||
|
|
||||||
def validInbox(baseDir: str,nickname: str,domain: str) -> bool:
|
def validInbox(baseDir: str,nickname: str,domain: str) -> bool:
|
||||||
"""Checks whether files were correctly saved to the inbox
|
"""Checks whether files were correctly saved to the inbox
|
||||||
|
@ -1603,7 +1630,8 @@ def inboxUpdateIndex(boxname: str,baseDir: str,handle: str,destinationFilename:
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def inboxAfterCapabilities(session,keyId: str,handle: str,messageJson: {}, \
|
def inboxAfterCapabilities(recentPostsCache: {},maxRecentPosts: int, \
|
||||||
|
session,keyId: str,handle: str,messageJson: {}, \
|
||||||
baseDir: str,httpPrefix: str,sendThreads: [], \
|
baseDir: str,httpPrefix: str,sendThreads: [], \
|
||||||
postLog: [],cachedWebfingers: {},personCache: {}, \
|
postLog: [],cachedWebfingers: {},personCache: {}, \
|
||||||
queue: [],domain: str,port: int,useTor: bool, \
|
queue: [],domain: str,port: int,useTor: bool, \
|
||||||
|
@ -1787,7 +1815,8 @@ def inboxAfterCapabilities(session,keyId: str,handle: str,messageJson: {}, \
|
||||||
if debug:
|
if debug:
|
||||||
print('DEBUG: saving inbox post as html to cache')
|
print('DEBUG: saving inbox post as html to cache')
|
||||||
htmlCacheStartTime=time.time()
|
htmlCacheStartTime=time.time()
|
||||||
inboxStorePostToHtmlCache(translate,baseDir,httpPrefix, \
|
inboxStorePostToHtmlCache(recentPostsCache,maxRecentPosts, \
|
||||||
|
translate,baseDir,httpPrefix, \
|
||||||
session,cachedWebfingers,personCache, \
|
session,cachedWebfingers,personCache, \
|
||||||
handle.split('@')[0],domain,port, \
|
handle.split('@')[0],domain,port, \
|
||||||
postJsonObject,allowDeletion)
|
postJsonObject,allowDeletion)
|
||||||
|
@ -1836,7 +1865,8 @@ def runInboxQueueWatchdog(projectVersion: str,httpd) -> None:
|
||||||
httpd.thrInboxQueue.start()
|
httpd.thrInboxQueue.start()
|
||||||
print('Restarting inbox queue...')
|
print('Restarting inbox queue...')
|
||||||
|
|
||||||
def runInboxQueue(projectVersion: str, \
|
def runInboxQueue(recentPostsCache: {},maxRecentPosts: int, \
|
||||||
|
projectVersion: str, \
|
||||||
baseDir: str,httpPrefix: str,sendThreads: [],postLog: [], \
|
baseDir: str,httpPrefix: str,sendThreads: [],postLog: [], \
|
||||||
cachedWebfingers: {},personCache: {},queue: [], \
|
cachedWebfingers: {},personCache: {},queue: [], \
|
||||||
domain: str,port: int,useTor: bool,federationList: [], \
|
domain: str,port: int,useTor: bool,federationList: [], \
|
||||||
|
@ -2175,7 +2205,8 @@ def runInboxQueue(projectVersion: str, \
|
||||||
# Here the capability id begins with the handle, so this could also
|
# Here the capability id begins with the handle, so this could also
|
||||||
# be matched separately, but it's probably not necessary
|
# be matched separately, but it's probably not necessary
|
||||||
if capsId in capabilityIdList:
|
if capsId in capabilityIdList:
|
||||||
inboxAfterCapabilities(session,keyId,handle, \
|
inboxAfterCapabilities(recentPostsCache,maxRecentPosts, \
|
||||||
|
session,keyId,handle, \
|
||||||
queueJson['post'], \
|
queueJson['post'], \
|
||||||
baseDir,httpPrefix, \
|
baseDir,httpPrefix, \
|
||||||
sendThreads,postLog, \
|
sendThreads,postLog, \
|
||||||
|
@ -2194,7 +2225,8 @@ def runInboxQueue(projectVersion: str, \
|
||||||
pprint(queueJson['post'])
|
pprint(queueJson['post'])
|
||||||
else:
|
else:
|
||||||
if not ocapAlways:
|
if not ocapAlways:
|
||||||
inboxAfterCapabilities(session,keyId,handle, \
|
inboxAfterCapabilities(recentPostsCache,maxRecentPosts, \
|
||||||
|
session,keyId,handle, \
|
||||||
queueJson['post'], \
|
queueJson['post'], \
|
||||||
baseDir,httpPrefix, \
|
baseDir,httpPrefix, \
|
||||||
sendThreads,postLog, \
|
sendThreads,postLog, \
|
||||||
|
|
22
tests.py
22
tests.py
|
@ -67,6 +67,7 @@ from media import getAttachmentMediaType
|
||||||
from delete import sendDeleteViaServer
|
from delete import sendDeleteViaServer
|
||||||
from inbox import validInbox
|
from inbox import validInbox
|
||||||
from inbox import validInboxFilenames
|
from inbox import validInboxFilenames
|
||||||
|
from inbox import updateRecentPostsCache
|
||||||
from content import addWebLinks
|
from content import addWebLinks
|
||||||
from content import replaceEmojiFromTags
|
from content import replaceEmojiFromTags
|
||||||
from content import addHtmlTags
|
from content import addHtmlTags
|
||||||
|
@ -232,7 +233,7 @@ def createServerAlice(path: str,domain: str,port: int,federationList: [], \
|
||||||
maxMentions=10
|
maxMentions=10
|
||||||
maxEmoji=10
|
maxEmoji=10
|
||||||
print('Server running: Alice')
|
print('Server running: Alice')
|
||||||
runDaemon(True,True,'en',__version__, \
|
runDaemon(5,True,True,'en',__version__, \
|
||||||
"instanceId",False,path,domain,port,port, \
|
"instanceId",False,path,domain,port,port, \
|
||||||
httpPrefix,federationList,maxMentions,maxEmoji,False, \
|
httpPrefix,federationList,maxMentions,maxEmoji,False, \
|
||||||
noreply,nolike,nopics,noannounce,cw,ocapAlways, \
|
noreply,nolike,nopics,noannounce,cw,ocapAlways, \
|
||||||
|
@ -288,7 +289,7 @@ def createServerBob(path: str,domain: str,port: int,federationList: [], \
|
||||||
maxMentions=10
|
maxMentions=10
|
||||||
maxEmoji=10
|
maxEmoji=10
|
||||||
print('Server running: Bob')
|
print('Server running: Bob')
|
||||||
runDaemon(True,True,'en',__version__, \
|
runDaemon(5,True,True,'en',__version__, \
|
||||||
"instanceId",False,path,domain,port,port, \
|
"instanceId",False,path,domain,port,port, \
|
||||||
httpPrefix,federationList,maxMentions,maxEmoji,False, \
|
httpPrefix,federationList,maxMentions,maxEmoji,False, \
|
||||||
noreply,nolike,nopics,noannounce,cw,ocapAlways, \
|
noreply,nolike,nopics,noannounce,cw,ocapAlways, \
|
||||||
|
@ -324,7 +325,7 @@ def createServerEve(path: str,domain: str,port: int,federationList: [], \
|
||||||
maxMentions=10
|
maxMentions=10
|
||||||
maxEmoji=10
|
maxEmoji=10
|
||||||
print('Server running: Eve')
|
print('Server running: Eve')
|
||||||
runDaemon(True,True,'en',__version__, \
|
runDaemon(5,True,True,'en',__version__, \
|
||||||
"instanceId",False,path,domain,port,port, \
|
"instanceId",False,path,domain,port,port, \
|
||||||
httpPrefix,federationList,maxMentions,maxEmoji,False, \
|
httpPrefix,federationList,maxMentions,maxEmoji,False, \
|
||||||
noreply,nolike,nopics,noannounce,cw,ocapAlways, \
|
noreply,nolike,nopics,noannounce,cw,ocapAlways, \
|
||||||
|
@ -1663,8 +1664,23 @@ def testTheme():
|
||||||
result=setCSSparam(css,'background-value','32px')
|
result=setCSSparam(css,'background-value','32px')
|
||||||
assert result=='--background-value: 32px; --foreground-value: 24px;'
|
assert result=='--background-value: 32px; --foreground-value: 24px;'
|
||||||
|
|
||||||
|
def testRecentPostsCache():
|
||||||
|
print('testRecentPostsCache')
|
||||||
|
recentPostsCache={}
|
||||||
|
maxRecentPosts=3
|
||||||
|
htmlStr='<html></html>'
|
||||||
|
for i in range(5):
|
||||||
|
postJsonObject={
|
||||||
|
"id": "https://somesite.whatever/users/someuser/statuses/"+str(i)
|
||||||
|
}
|
||||||
|
updateRecentPostsCache(recentPostsCache,maxRecentPosts,postJsonObject,htmlStr)
|
||||||
|
assert len(recentPostsCache['index'])==maxRecentPosts
|
||||||
|
assert len(recentPostsCache['json'].items())==maxRecentPosts
|
||||||
|
assert len(recentPostsCache['html'].items())==maxRecentPosts
|
||||||
|
|
||||||
def runAllTests():
|
def runAllTests():
|
||||||
print('Running tests...')
|
print('Running tests...')
|
||||||
|
testRecentPostsCache()
|
||||||
testTheme()
|
testTheme()
|
||||||
testSaveLoadJson()
|
testSaveLoadJson()
|
||||||
testCommentJson()
|
testCommentJson()
|
||||||
|
|
|
@ -1876,7 +1876,13 @@ def saveIndividualPostAsHtmlToCache(baseDir: str,nickname: str,domain: str, \
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print('ERROR: saving post to cache '+str(e))
|
print('ERROR: saving post to cache '+str(e))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def preparePostFromHtmlCache(postHtml: str,boxName: str,pageNumber: int) -> str:
|
||||||
|
# if on the bookmarks timeline then remain there
|
||||||
|
if boxName=='tlbookmarks':
|
||||||
|
postHtml=postHtml.replace('?tl=inbox','?tl=tlbookmarks')
|
||||||
|
return postHtml.replace(';-999;',';'+str(pageNumber)+';').replace('?page=-999','?page='+str(pageNumber))
|
||||||
|
|
||||||
def individualPostAsHtml(iconsDir: str,translate: {}, \
|
def individualPostAsHtml(iconsDir: str,translate: {}, \
|
||||||
pageNumber: int,baseDir: str, \
|
pageNumber: int,baseDir: str, \
|
||||||
session,wfRequest: {},personCache: {}, \
|
session,wfRequest: {},personCache: {}, \
|
||||||
|
@ -1908,10 +1914,7 @@ def individualPostAsHtml(iconsDir: str,translate: {}, \
|
||||||
loadIndividualPostAsHtmlFromCache(baseDir,nickname,domain, \
|
loadIndividualPostAsHtmlFromCache(baseDir,nickname,domain, \
|
||||||
postJsonObject)
|
postJsonObject)
|
||||||
if postHtml:
|
if postHtml:
|
||||||
# if on the bookmarks timeline then remain there
|
return preparePostFromHtmlCache(postHtml,boxName,pageNumber)
|
||||||
if boxName=='tlbookmarks':
|
|
||||||
postHtml=postHtml.replace('?tl=inbox','?tl=tlbookmarks')
|
|
||||||
return postHtml.replace(';-999;',';'+str(pageNumber)+';').replace('?page=-999','?page='+str(pageNumber))
|
|
||||||
|
|
||||||
# don't create new html within the bookmarks timeline
|
# don't create new html within the bookmarks timeline
|
||||||
# it should already have been created for the inbox
|
# it should already have been created for the inbox
|
||||||
|
@ -2365,7 +2368,8 @@ def isQuestion(postObjectJson: {}) -> bool:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def htmlTimeline(translate: {},pageNumber: int, \
|
def htmlTimeline(recentPostsCache: {}, \
|
||||||
|
translate: {},pageNumber: int, \
|
||||||
itemsPerPage: int,session,baseDir: str, \
|
itemsPerPage: int,session,baseDir: str, \
|
||||||
wfRequest: {},personCache: {}, \
|
wfRequest: {},personCache: {}, \
|
||||||
nickname: str,domain: str,port: int,timelineJson: {}, \
|
nickname: str,domain: str,port: int,timelineJson: {}, \
|
||||||
|
@ -2576,16 +2580,26 @@ def htmlTimeline(translate: {},pageNumber: int, \
|
||||||
for item in timelineJson['orderedItems']:
|
for item in timelineJson['orderedItems']:
|
||||||
if item['type']=='Create' or item['type']=='Announce':
|
if item['type']=='Create' or item['type']=='Announce':
|
||||||
#avatarUrl=getPersonAvatarUrl(baseDir,item['actor'],personCache)
|
#avatarUrl=getPersonAvatarUrl(baseDir,item['actor'],personCache)
|
||||||
currTlStr= \
|
currTlStr=None
|
||||||
individualPostAsHtml(iconsDir,translate,pageNumber, \
|
if recentPostsCache['index']:
|
||||||
baseDir,session,wfRequest,personCache, \
|
postId=item['id'].replace('/activity','').replace('/','#')
|
||||||
nickname,domain,port,item,None,True, \
|
if postId in recentPostsCache['index']:
|
||||||
allowDeletion, \
|
if recentPostsCache['html'].get(postId):
|
||||||
httpPrefix,projectVersion,boxName, \
|
currTlStr=recentPostsCache['html'][postId]
|
||||||
boxName!='dm', \
|
currTlStr= \
|
||||||
showIndividualPostIcons, \
|
preparePostFromHtmlCache(currTlStr,boxName,pageNumber)
|
||||||
manuallyApproveFollowers,False,True)
|
print('Post obtained from recent cache ('+str(len(recentPostsCache['index']))+'): '+postId)
|
||||||
|
if not currTlStr:
|
||||||
|
currTlStr= \
|
||||||
|
individualPostAsHtml(iconsDir,translate,pageNumber, \
|
||||||
|
baseDir,session,wfRequest,personCache, \
|
||||||
|
nickname,domain,port,item,None,True, \
|
||||||
|
allowDeletion, \
|
||||||
|
httpPrefix,projectVersion,boxName, \
|
||||||
|
boxName!='dm', \
|
||||||
|
showIndividualPostIcons, \
|
||||||
|
manuallyApproveFollowers,False,True)
|
||||||
|
|
||||||
if currTlStr:
|
if currTlStr:
|
||||||
itemCtr+=1
|
itemCtr+=1
|
||||||
tlStr+=currTlStr
|
tlStr+=currTlStr
|
||||||
|
@ -2598,7 +2612,8 @@ def htmlTimeline(translate: {},pageNumber: int, \
|
||||||
tlStr+=htmlFooter()
|
tlStr+=htmlFooter()
|
||||||
return tlStr
|
return tlStr
|
||||||
|
|
||||||
def htmlShares(translate: {},pageNumber: int,itemsPerPage: int, \
|
def htmlShares(recentPostsCache: {}, \
|
||||||
|
translate: {},pageNumber: int,itemsPerPage: int, \
|
||||||
session,baseDir: str,wfRequest: {},personCache: {}, \
|
session,baseDir: str,wfRequest: {},personCache: {}, \
|
||||||
nickname: str,domain: str,port: int, \
|
nickname: str,domain: str,port: int, \
|
||||||
allowDeletion: bool, \
|
allowDeletion: bool, \
|
||||||
|
@ -2608,12 +2623,14 @@ def htmlShares(translate: {},pageNumber: int,itemsPerPage: int, \
|
||||||
manuallyApproveFollowers= \
|
manuallyApproveFollowers= \
|
||||||
followerApprovalActive(baseDir,nickname,domain)
|
followerApprovalActive(baseDir,nickname,domain)
|
||||||
|
|
||||||
return htmlTimeline(translate,pageNumber, \
|
return htmlTimeline(recentPostsCache, \
|
||||||
|
translate,pageNumber, \
|
||||||
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
||||||
nickname,domain,port,None,'tlshares',allowDeletion, \
|
nickname,domain,port,None,'tlshares',allowDeletion, \
|
||||||
httpPrefix,projectVersion,manuallyApproveFollowers)
|
httpPrefix,projectVersion,manuallyApproveFollowers)
|
||||||
|
|
||||||
def htmlInbox(translate: {},pageNumber: int,itemsPerPage: int, \
|
def htmlInbox(recentPostsCache: {}, \
|
||||||
|
translate: {},pageNumber: int,itemsPerPage: int, \
|
||||||
session,baseDir: str,wfRequest: {},personCache: {}, \
|
session,baseDir: str,wfRequest: {},personCache: {}, \
|
||||||
nickname: str,domain: str,port: int,inboxJson: {}, \
|
nickname: str,domain: str,port: int,inboxJson: {}, \
|
||||||
allowDeletion: bool, \
|
allowDeletion: bool, \
|
||||||
|
@ -2623,12 +2640,14 @@ def htmlInbox(translate: {},pageNumber: int,itemsPerPage: int, \
|
||||||
manuallyApproveFollowers= \
|
manuallyApproveFollowers= \
|
||||||
followerApprovalActive(baseDir,nickname,domain)
|
followerApprovalActive(baseDir,nickname,domain)
|
||||||
|
|
||||||
return htmlTimeline(translate,pageNumber, \
|
return htmlTimeline(recentPostsCache, \
|
||||||
|
translate,pageNumber, \
|
||||||
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
||||||
nickname,domain,port,inboxJson,'inbox',allowDeletion, \
|
nickname,domain,port,inboxJson,'inbox',allowDeletion, \
|
||||||
httpPrefix,projectVersion,manuallyApproveFollowers)
|
httpPrefix,projectVersion,manuallyApproveFollowers)
|
||||||
|
|
||||||
def htmlBookmarks(translate: {},pageNumber: int,itemsPerPage: int, \
|
def htmlBookmarks(recentPostsCache: {}, \
|
||||||
|
translate: {},pageNumber: int,itemsPerPage: int, \
|
||||||
session,baseDir: str,wfRequest: {},personCache: {}, \
|
session,baseDir: str,wfRequest: {},personCache: {}, \
|
||||||
nickname: str,domain: str,port: int,bookmarksJson: {}, \
|
nickname: str,domain: str,port: int,bookmarksJson: {}, \
|
||||||
allowDeletion: bool, \
|
allowDeletion: bool, \
|
||||||
|
@ -2638,60 +2657,70 @@ def htmlBookmarks(translate: {},pageNumber: int,itemsPerPage: int, \
|
||||||
manuallyApproveFollowers= \
|
manuallyApproveFollowers= \
|
||||||
followerApprovalActive(baseDir,nickname,domain)
|
followerApprovalActive(baseDir,nickname,domain)
|
||||||
|
|
||||||
return htmlTimeline(translate,pageNumber, \
|
return htmlTimeline(recentPostsCache, \
|
||||||
|
translate,pageNumber, \
|
||||||
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
||||||
nickname,domain,port,bookmarksJson,'tlbookmarks',allowDeletion, \
|
nickname,domain,port,bookmarksJson,'tlbookmarks',allowDeletion, \
|
||||||
httpPrefix,projectVersion,manuallyApproveFollowers)
|
httpPrefix,projectVersion,manuallyApproveFollowers)
|
||||||
|
|
||||||
def htmlInboxDMs(translate: {},pageNumber: int,itemsPerPage: int, \
|
def htmlInboxDMs(recentPostsCache: {}, \
|
||||||
|
translate: {},pageNumber: int,itemsPerPage: int, \
|
||||||
session,baseDir: str,wfRequest: {},personCache: {}, \
|
session,baseDir: str,wfRequest: {},personCache: {}, \
|
||||||
nickname: str,domain: str,port: int,inboxJson: {}, \
|
nickname: str,domain: str,port: int,inboxJson: {}, \
|
||||||
allowDeletion: bool, \
|
allowDeletion: bool, \
|
||||||
httpPrefix: str,projectVersion: str) -> str:
|
httpPrefix: str,projectVersion: str) -> str:
|
||||||
"""Show the DM timeline as html
|
"""Show the DM timeline as html
|
||||||
"""
|
"""
|
||||||
return htmlTimeline(translate,pageNumber, \
|
return htmlTimeline(recentPostsCache, \
|
||||||
|
translate,pageNumber, \
|
||||||
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
||||||
nickname,domain,port,inboxJson,'dm',allowDeletion, \
|
nickname,domain,port,inboxJson,'dm',allowDeletion, \
|
||||||
httpPrefix,projectVersion,False)
|
httpPrefix,projectVersion,False)
|
||||||
|
|
||||||
def htmlInboxReplies(translate: {},pageNumber: int,itemsPerPage: int, \
|
def htmlInboxReplies(recentPostsCache: {}, \
|
||||||
|
translate: {},pageNumber: int,itemsPerPage: int, \
|
||||||
session,baseDir: str,wfRequest: {},personCache: {}, \
|
session,baseDir: str,wfRequest: {},personCache: {}, \
|
||||||
nickname: str,domain: str,port: int,inboxJson: {}, \
|
nickname: str,domain: str,port: int,inboxJson: {}, \
|
||||||
allowDeletion: bool, \
|
allowDeletion: bool, \
|
||||||
httpPrefix: str,projectVersion: str) -> str:
|
httpPrefix: str,projectVersion: str) -> str:
|
||||||
"""Show the replies timeline as html
|
"""Show the replies timeline as html
|
||||||
"""
|
"""
|
||||||
return htmlTimeline(translate,pageNumber, \
|
return htmlTimeline(recentPostsCache, \
|
||||||
|
translate,pageNumber, \
|
||||||
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
||||||
nickname,domain,port,inboxJson,'tlreplies',allowDeletion, \
|
nickname,domain,port,inboxJson,'tlreplies',allowDeletion, \
|
||||||
httpPrefix,projectVersion,False)
|
httpPrefix,projectVersion,False)
|
||||||
|
|
||||||
def htmlInboxMedia(translate: {},pageNumber: int,itemsPerPage: int, \
|
def htmlInboxMedia(recentPostsCache: {}, \
|
||||||
|
translate: {},pageNumber: int,itemsPerPage: int, \
|
||||||
session,baseDir: str,wfRequest: {},personCache: {}, \
|
session,baseDir: str,wfRequest: {},personCache: {}, \
|
||||||
nickname: str,domain: str,port: int,inboxJson: {}, \
|
nickname: str,domain: str,port: int,inboxJson: {}, \
|
||||||
allowDeletion: bool, \
|
allowDeletion: bool, \
|
||||||
httpPrefix: str,projectVersion: str) -> str:
|
httpPrefix: str,projectVersion: str) -> str:
|
||||||
"""Show the media timeline as html
|
"""Show the media timeline as html
|
||||||
"""
|
"""
|
||||||
return htmlTimeline(translate,pageNumber, \
|
return htmlTimeline(recentPostsCache, \
|
||||||
|
translate,pageNumber, \
|
||||||
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
||||||
nickname,domain,port,inboxJson,'tlmedia',allowDeletion, \
|
nickname,domain,port,inboxJson,'tlmedia',allowDeletion, \
|
||||||
httpPrefix,projectVersion,False)
|
httpPrefix,projectVersion,False)
|
||||||
|
|
||||||
def htmlModeration(translate: {},pageNumber: int,itemsPerPage: int, \
|
def htmlModeration(recentPostsCache: {}, \
|
||||||
|
translate: {},pageNumber: int,itemsPerPage: int, \
|
||||||
session,baseDir: str,wfRequest: {},personCache: {}, \
|
session,baseDir: str,wfRequest: {},personCache: {}, \
|
||||||
nickname: str,domain: str,port: int,inboxJson: {}, \
|
nickname: str,domain: str,port: int,inboxJson: {}, \
|
||||||
allowDeletion: bool, \
|
allowDeletion: bool, \
|
||||||
httpPrefix: str,projectVersion: str) -> str:
|
httpPrefix: str,projectVersion: str) -> str:
|
||||||
"""Show the moderation feed as html
|
"""Show the moderation feed as html
|
||||||
"""
|
"""
|
||||||
return htmlTimeline(translate,pageNumber, \
|
return htmlTimeline(recentPostsCache, \
|
||||||
|
translate,pageNumber, \
|
||||||
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
||||||
nickname,domain,port,inboxJson,'moderation',allowDeletion, \
|
nickname,domain,port,inboxJson,'moderation',allowDeletion, \
|
||||||
httpPrefix,projectVersion,True)
|
httpPrefix,projectVersion,True)
|
||||||
|
|
||||||
def htmlOutbox(translate: {},pageNumber: int,itemsPerPage: int, \
|
def htmlOutbox(recentPostsCache: {}, \
|
||||||
|
translate: {},pageNumber: int,itemsPerPage: int, \
|
||||||
session,baseDir: str,wfRequest: {},personCache: {}, \
|
session,baseDir: str,wfRequest: {},personCache: {}, \
|
||||||
nickname: str,domain: str,port: int,outboxJson: {}, \
|
nickname: str,domain: str,port: int,outboxJson: {}, \
|
||||||
allowDeletion: bool,
|
allowDeletion: bool,
|
||||||
|
@ -2700,7 +2729,8 @@ def htmlOutbox(translate: {},pageNumber: int,itemsPerPage: int, \
|
||||||
"""
|
"""
|
||||||
manuallyApproveFollowers= \
|
manuallyApproveFollowers= \
|
||||||
followerApprovalActive(baseDir,nickname,domain)
|
followerApprovalActive(baseDir,nickname,domain)
|
||||||
return htmlTimeline(translate,pageNumber, \
|
return htmlTimeline(recentPostsCache, \
|
||||||
|
translate,pageNumber, \
|
||||||
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
itemsPerPage,session,baseDir,wfRequest,personCache, \
|
||||||
nickname,domain,port,outboxJson,'outbox',allowDeletion, \
|
nickname,domain,port,outboxJson,'outbox',allowDeletion, \
|
||||||
httpPrefix,projectVersion,manuallyApproveFollowers)
|
httpPrefix,projectVersion,manuallyApproveFollowers)
|
||||||
|
|
Loading…
Reference in New Issue