Voting time period

main
Bob Mottram 2020-10-09 13:15:20 +01:00
parent 85a31ccd72
commit 947a13fba2
8 changed files with 155 additions and 63 deletions

View File

@ -6004,7 +6004,8 @@ class PubServer(BaseHTTPRequestHandler):
maxPostsInFeed, 'inbox', maxPostsInFeed, 'inbox',
authorized, authorized,
0, 0,
self.server.positiveVoting) self.server.positiveVoting,
self.server.votingTimeMins)
if inboxFeed: if inboxFeed:
if GETstartTime: if GETstartTime:
self._benchmarkGETtimings(GETstartTime, GETtimings, self._benchmarkGETtimings(GETstartTime, GETtimings,
@ -6034,7 +6035,8 @@ class PubServer(BaseHTTPRequestHandler):
maxPostsInFeed, 'inbox', maxPostsInFeed, 'inbox',
authorized, authorized,
0, 0,
self.server.positiveVoting) self.server.positiveVoting,
self.server.votingTimeMins)
if GETstartTime: if GETstartTime:
self._benchmarkGETtimings(GETstartTime, self._benchmarkGETtimings(GETstartTime,
GETtimings, GETtimings,
@ -6123,7 +6125,8 @@ class PubServer(BaseHTTPRequestHandler):
httpPrefix, httpPrefix,
maxPostsInFeed, 'dm', maxPostsInFeed, 'dm',
authorized, authorized,
0, self.server.positiveVoting) 0, self.server.positiveVoting,
self.server.votingTimeMins)
if inboxDMFeed: if inboxDMFeed:
if self._requestHTTP(): if self._requestHTTP():
nickname = path.replace('/users/', '') nickname = path.replace('/users/', '')
@ -6149,7 +6152,8 @@ class PubServer(BaseHTTPRequestHandler):
maxPostsInFeed, 'dm', maxPostsInFeed, 'dm',
authorized, authorized,
0, 0,
self.server.positiveVoting) self.server.positiveVoting,
self.server.votingTimeMins)
msg = \ msg = \
htmlInboxDMs(self.server.defaultTimeline, htmlInboxDMs(self.server.defaultTimeline,
self.server.recentPostsCache, self.server.recentPostsCache,
@ -6227,7 +6231,8 @@ class PubServer(BaseHTTPRequestHandler):
httpPrefix, httpPrefix,
maxPostsInFeed, 'tlreplies', maxPostsInFeed, 'tlreplies',
True, True,
0, self.server.positiveVoting) 0, self.server.positiveVoting,
self.server.votingTimeMins)
if not inboxRepliesFeed: if not inboxRepliesFeed:
inboxRepliesFeed = [] inboxRepliesFeed = []
if self._requestHTTP(): if self._requestHTTP():
@ -6253,7 +6258,8 @@ class PubServer(BaseHTTPRequestHandler):
httpPrefix, httpPrefix,
maxPostsInFeed, 'tlreplies', maxPostsInFeed, 'tlreplies',
True, True,
0, self.server.positiveVoting) 0, self.server.positiveVoting,
self.server.votingTimeMins)
msg = \ msg = \
htmlInboxReplies(self.server.defaultTimeline, htmlInboxReplies(self.server.defaultTimeline,
self.server.recentPostsCache, self.server.recentPostsCache,
@ -6331,7 +6337,8 @@ class PubServer(BaseHTTPRequestHandler):
httpPrefix, httpPrefix,
maxPostsInMediaFeed, 'tlmedia', maxPostsInMediaFeed, 'tlmedia',
True, True,
0, self.server.positiveVoting) 0, self.server.positiveVoting,
self.server.votingTimeMins)
if not inboxMediaFeed: if not inboxMediaFeed:
inboxMediaFeed = [] inboxMediaFeed = []
if self._requestHTTP(): if self._requestHTTP():
@ -6357,7 +6364,8 @@ class PubServer(BaseHTTPRequestHandler):
httpPrefix, httpPrefix,
maxPostsInMediaFeed, 'tlmedia', maxPostsInMediaFeed, 'tlmedia',
True, True,
0, self.server.positiveVoting) 0, self.server.positiveVoting,
self.server.votingTimeMins)
msg = \ msg = \
htmlInboxMedia(self.server.defaultTimeline, htmlInboxMedia(self.server.defaultTimeline,
self.server.recentPostsCache, self.server.recentPostsCache,
@ -6435,7 +6443,8 @@ class PubServer(BaseHTTPRequestHandler):
httpPrefix, httpPrefix,
maxPostsInBlogsFeed, 'tlblogs', maxPostsInBlogsFeed, 'tlblogs',
True, True,
0, self.server.positiveVoting) 0, self.server.positiveVoting,
self.server.votingTimeMins)
if not inboxBlogsFeed: if not inboxBlogsFeed:
inboxBlogsFeed = [] inboxBlogsFeed = []
if self._requestHTTP(): if self._requestHTTP():
@ -6461,7 +6470,8 @@ class PubServer(BaseHTTPRequestHandler):
httpPrefix, httpPrefix,
maxPostsInBlogsFeed, 'tlblogs', maxPostsInBlogsFeed, 'tlblogs',
True, True,
0, self.server.positiveVoting) 0, self.server.positiveVoting,
self.server.votingTimeMins)
msg = \ msg = \
htmlInboxBlogs(self.server.defaultTimeline, htmlInboxBlogs(self.server.defaultTimeline,
self.server.recentPostsCache, self.server.recentPostsCache,
@ -6541,7 +6551,8 @@ class PubServer(BaseHTTPRequestHandler):
maxPostsInNewsFeed, 'tlnews', maxPostsInNewsFeed, 'tlnews',
True, True,
self.server.newswireVotesThreshold, self.server.newswireVotesThreshold,
self.server.positiveVoting) self.server.positiveVoting,
self.server.votingTimeMins)
if not inboxNewsFeed: if not inboxNewsFeed:
inboxNewsFeed = [] inboxNewsFeed = []
if self._requestHTTP(): if self._requestHTTP():
@ -6568,7 +6579,8 @@ class PubServer(BaseHTTPRequestHandler):
maxPostsInBlogsFeed, 'tlnews', maxPostsInBlogsFeed, 'tlnews',
True, True,
self.server.newswireVotesThreshold, self.server.newswireVotesThreshold,
self.server.positiveVoting) self.server.positiveVoting,
self.server.votingTimeMins)
currNickname = path.split('/users/')[1] currNickname = path.split('/users/')[1]
if '/' in currNickname: if '/' in currNickname:
currNickname = currNickname.split('/')[0] currNickname = currNickname.split('/')[0]
@ -6709,7 +6721,8 @@ class PubServer(BaseHTTPRequestHandler):
httpPrefix, httpPrefix,
maxPostsInFeed, 'tlbookmarks', maxPostsInFeed, 'tlbookmarks',
authorized, authorized,
0, self.server.positiveVoting) 0, self.server.positiveVoting,
self.server.votingTimeMins)
if bookmarksFeed: if bookmarksFeed:
if self._requestHTTP(): if self._requestHTTP():
nickname = path.replace('/users/', '') nickname = path.replace('/users/', '')
@ -6736,7 +6749,8 @@ class PubServer(BaseHTTPRequestHandler):
maxPostsInFeed, maxPostsInFeed,
'tlbookmarks', 'tlbookmarks',
authorized, authorized,
0, self.server.positiveVoting) 0, self.server.positiveVoting,
self.server.votingTimeMins)
msg = \ msg = \
htmlBookmarks(self.server.defaultTimeline, htmlBookmarks(self.server.defaultTimeline,
self.server.recentPostsCache, self.server.recentPostsCache,
@ -6816,7 +6830,8 @@ class PubServer(BaseHTTPRequestHandler):
httpPrefix, httpPrefix,
maxPostsInFeed, 'tlevents', maxPostsInFeed, 'tlevents',
authorized, authorized,
0, self.server.positiveVoting) 0, self.server.positiveVoting,
self.server.votingTimeMins)
print('eventsFeed: ' + str(eventsFeed)) print('eventsFeed: ' + str(eventsFeed))
if eventsFeed: if eventsFeed:
if self._requestHTTP(): if self._requestHTTP():
@ -6843,7 +6858,8 @@ class PubServer(BaseHTTPRequestHandler):
maxPostsInFeed, maxPostsInFeed,
'tlevents', 'tlevents',
authorized, authorized,
0, self.server.positiveVoting) 0, self.server.positiveVoting,
self.server.votingTimeMins)
msg = \ msg = \
htmlEvents(self.server.defaultTimeline, htmlEvents(self.server.defaultTimeline,
self.server.recentPostsCache, self.server.recentPostsCache,
@ -6916,7 +6932,8 @@ class PubServer(BaseHTTPRequestHandler):
maxPostsInFeed, 'outbox', maxPostsInFeed, 'outbox',
authorized, authorized,
self.server.newswireVotesThreshold, self.server.newswireVotesThreshold,
self.server.positiveVoting) self.server.positiveVoting,
self.server.votingTimeMins)
if outboxFeed: if outboxFeed:
if self._requestHTTP(): if self._requestHTTP():
nickname = \ nickname = \
@ -6942,7 +6959,8 @@ class PubServer(BaseHTTPRequestHandler):
maxPostsInFeed, 'outbox', maxPostsInFeed, 'outbox',
authorized, authorized,
self.server.newswireVotesThreshold, self.server.newswireVotesThreshold,
self.server.positiveVoting) self.server.positiveVoting,
self.server.votingTimeMins)
msg = \ msg = \
htmlOutbox(self.server.defaultTimeline, htmlOutbox(self.server.defaultTimeline,
self.server.recentPostsCache, self.server.recentPostsCache,
@ -7007,7 +7025,8 @@ class PubServer(BaseHTTPRequestHandler):
httpPrefix, httpPrefix,
maxPostsInFeed, 'moderation', maxPostsInFeed, 'moderation',
True, True,
0, self.server.positiveVoting) 0, self.server.positiveVoting,
self.server.votingTimeMins)
if moderationFeed: if moderationFeed:
if self._requestHTTP(): if self._requestHTTP():
nickname = path.replace('/users/', '') nickname = path.replace('/users/', '')
@ -7032,7 +7051,8 @@ class PubServer(BaseHTTPRequestHandler):
httpPrefix, httpPrefix,
maxPostsInFeed, 'moderation', maxPostsInFeed, 'moderation',
True, True,
0, self.server.positiveVoting) 0, self.server.positiveVoting,
self.server.votingTimeMins)
msg = \ msg = \
htmlModeration(self.server.defaultTimeline, htmlModeration(self.server.defaultTimeline,
self.server.recentPostsCache, self.server.recentPostsCache,
@ -11387,7 +11407,8 @@ def loadTokens(baseDir: str, tokensDict: {}, tokensLookup: {}) -> None:
tokensLookup[token] = nickname tokensLookup[token] = nickname
def runDaemon(positiveVoting: bool, def runDaemon(votingTimeMins: int,
positiveVoting: bool,
newswireVotesThreshold: int, newswireVotesThreshold: int,
newsInstance: bool, newsInstance: bool,
blogsInstance: bool, blogsInstance: bool,
@ -11496,6 +11517,9 @@ def runDaemon(positiveVoting: bool,
print('ERROR: no translations loaded from ' + translationsFile) print('ERROR: no translations loaded from ' + translationsFile)
sys.exit() sys.exit()
# For moderated newswire feeds this is the amount of time allowed
# for voting after the post arrives
httpd.votingTimeMins = votingTimeMins
# on the newswire, whether moderators vote positively for items # on the newswire, whether moderators vote positively for items
# or against them (veto) # or against them (veto)
httpd.positiveVoting = positiveVoting httpd.positiveVoting = positiveVoting

View File

@ -260,6 +260,9 @@ parser.add_argument('--minimumvotes', dest='minimumvotes', type=int,
default=1, default=1,
help='Minimum number of votes to remove or add' + help='Minimum number of votes to remove or add' +
' a newswire item') ' a newswire item')
parser.add_argument('--votingtime', dest='votingtime', type=int,
default=1440,
help='Time to vote on newswire items in minutes')
parser.add_argument('--message', dest='message', type=str, parser.add_argument('--message', dest='message', type=str,
default=None, default=None,
help='Message content') help='Message content')
@ -1919,7 +1922,8 @@ if setTheme(baseDir, themeName):
print('Theme set to ' + themeName) print('Theme set to ' + themeName)
if __name__ == "__main__": if __name__ == "__main__":
runDaemon(args.positivevoting, runDaemon(args.votingtime,
args.positivevoting,
args.minimumvotes, args.minimumvotes,
args.newsinstance, args.newsinstance,
args.blogsinstance, args.mediainstance, args.blogsinstance, args.mediainstance,

View File

@ -41,6 +41,15 @@ def updateFeedsOutboxIndex(baseDir: str, domain: str, postId: str) -> None:
feedsFile.close() feedsFile.close()
def saveArrivedTime(baseDir: str, postFilename: str, arrived: str) -> None:
"""Saves the time when an rss post arrived to a file
"""
arrivedFile = open(postFilename + '.arrived', 'w+')
if arrivedFile:
arrivedFile.write(arrived)
arrivedFile.close()
def convertRSStoActivityPub(baseDir: str, httpPrefix: str, def convertRSStoActivityPub(baseDir: str, httpPrefix: str,
domain: str, port: int, domain: str, port: int,
newswire: {}, newswire: {},
@ -87,8 +96,7 @@ def convertRSStoActivityPub(baseDir: str, httpPrefix: str,
rssDescription = '' rssDescription = ''
# get the rss description if it exists # get the rss description if it exists
if len(item) >= 5: rssDescription = item[4]
rssDescription = item[4]
# add the off-site link to the description # add the off-site link to the description
if rssDescription: if rssDescription:
@ -132,9 +140,21 @@ def convertRSStoActivityPub(baseDir: str, httpPrefix: str,
postId = newPostId.replace('/', '#') postId = newPostId.replace('/', '#')
moderated = item[5]
# save the post and update the index # save the post and update the index
if saveJson(blog, filename): if saveJson(blog, filename):
updateFeedsOutboxIndex(baseDir, domain, postId + '.json') updateFeedsOutboxIndex(baseDir, domain, postId + '.json')
# Save a file containing the time when the post arrived
# this can then later be used to construct the news timeline
# excluding items during the voting period
if moderated:
saveArrivedTime(baseDir, filename, blog['object']['arrived'])
else:
if os.path.isfile(filename + '.arrived'):
os.remove(filename + '.arrived')
# set the url # set the url
newswire[originalDateStr][1] = \ newswire[originalDateStr][1] = \
'/users/news/statuses/' + statusNumber '/users/news/statuses/' + statusNumber

View File

@ -596,7 +596,8 @@ def personBoxJson(recentPostsCache: {},
session, baseDir: str, domain: str, port: int, path: str, session, baseDir: str, domain: str, port: int, path: str,
httpPrefix: str, noOfItems: int, boxname: str, httpPrefix: str, noOfItems: int, boxname: str,
authorized: bool, authorized: bool,
newswireVotesThreshold: int, positiveVoting: bool) -> {}: newswireVotesThreshold: int, positiveVoting: bool,
votingTimeMins: int) -> {}:
"""Obtain the inbox/outbox/moderation feed for the given person """Obtain the inbox/outbox/moderation feed for the given person
""" """
if boxname != 'inbox' and boxname != 'dm' and \ if boxname != 'inbox' and boxname != 'dm' and \
@ -673,7 +674,7 @@ def personBoxJson(recentPostsCache: {},
return createNewsTimeline(session, baseDir, nickname, domain, port, return createNewsTimeline(session, baseDir, nickname, domain, port,
httpPrefix, noOfItems, headerOnly, httpPrefix, noOfItems, headerOnly,
newswireVotesThreshold, positiveVoting, newswireVotesThreshold, positiveVoting,
pageNumber) votingTimeMins, pageNumber)
elif boxname == 'tlblogs': elif boxname == 'tlblogs':
return createBlogsTimeline(session, baseDir, nickname, domain, port, return createBlogsTimeline(session, baseDir, nickname, domain, port,
httpPrefix, noOfItems, headerOnly, httpPrefix, noOfItems, headerOnly,

View File

@ -47,6 +47,7 @@ from utils import loadJson
from utils import saveJson from utils import saveJson
from utils import getConfigParam from utils import getConfigParam
from utils import locateNewsVotes from utils import locateNewsVotes
from utils import locateNewsArrival
from utils import votesOnNewswireItem from utils import votesOnNewswireItem
from media import attachMedia from media import attachMedia
from media import replaceYouTube from media import replaceYouTube
@ -2476,7 +2477,7 @@ def createInbox(recentPostsCache: {},
session, baseDir, 'inbox', session, baseDir, 'inbox',
nickname, domain, port, httpPrefix, nickname, domain, port, httpPrefix,
itemsPerPage, headerOnly, True, itemsPerPage, headerOnly, True,
0, False, pageNumber) 0, False, 0, pageNumber)
def createBookmarksTimeline(session, baseDir: str, nickname: str, domain: str, def createBookmarksTimeline(session, baseDir: str, nickname: str, domain: str,
@ -2485,7 +2486,7 @@ def createBookmarksTimeline(session, baseDir: str, nickname: str, domain: str,
return createBoxIndexed({}, session, baseDir, 'tlbookmarks', return createBoxIndexed({}, session, baseDir, 'tlbookmarks',
nickname, domain, nickname, domain,
port, httpPrefix, itemsPerPage, headerOnly, port, httpPrefix, itemsPerPage, headerOnly,
True, 0, False, pageNumber) True, 0, False, 0, pageNumber)
def createEventsTimeline(recentPostsCache: {}, def createEventsTimeline(recentPostsCache: {},
@ -2495,7 +2496,7 @@ def createEventsTimeline(recentPostsCache: {},
return createBoxIndexed(recentPostsCache, session, baseDir, 'tlevents', return createBoxIndexed(recentPostsCache, session, baseDir, 'tlevents',
nickname, domain, nickname, domain,
port, httpPrefix, itemsPerPage, headerOnly, port, httpPrefix, itemsPerPage, headerOnly,
True, 0, False, pageNumber) True, 0, False, 0, pageNumber)
def createDMTimeline(recentPostsCache: {}, def createDMTimeline(recentPostsCache: {},
@ -2505,7 +2506,7 @@ def createDMTimeline(recentPostsCache: {},
return createBoxIndexed(recentPostsCache, return createBoxIndexed(recentPostsCache,
session, baseDir, 'dm', nickname, session, baseDir, 'dm', nickname,
domain, port, httpPrefix, itemsPerPage, domain, port, httpPrefix, itemsPerPage,
headerOnly, True, 0, False, pageNumber) headerOnly, True, 0, False, 0, pageNumber)
def createRepliesTimeline(recentPostsCache: {}, def createRepliesTimeline(recentPostsCache: {},
@ -2515,7 +2516,7 @@ def createRepliesTimeline(recentPostsCache: {},
return createBoxIndexed(recentPostsCache, session, baseDir, 'tlreplies', return createBoxIndexed(recentPostsCache, session, baseDir, 'tlreplies',
nickname, domain, port, httpPrefix, nickname, domain, port, httpPrefix,
itemsPerPage, headerOnly, True, itemsPerPage, headerOnly, True,
0, False, pageNumber) 0, False, 0, pageNumber)
def createBlogsTimeline(session, baseDir: str, nickname: str, domain: str, def createBlogsTimeline(session, baseDir: str, nickname: str, domain: str,
@ -2524,7 +2525,7 @@ def createBlogsTimeline(session, baseDir: str, nickname: str, domain: str,
return createBoxIndexed({}, session, baseDir, 'tlblogs', nickname, return createBoxIndexed({}, session, baseDir, 'tlblogs', nickname,
domain, port, httpPrefix, domain, port, httpPrefix,
itemsPerPage, headerOnly, True, itemsPerPage, headerOnly, True,
0, False, pageNumber) 0, False, 0, pageNumber)
def createMediaTimeline(session, baseDir: str, nickname: str, domain: str, def createMediaTimeline(session, baseDir: str, nickname: str, domain: str,
@ -2533,18 +2534,19 @@ def createMediaTimeline(session, baseDir: str, nickname: str, domain: str,
return createBoxIndexed({}, session, baseDir, 'tlmedia', nickname, return createBoxIndexed({}, session, baseDir, 'tlmedia', nickname,
domain, port, httpPrefix, domain, port, httpPrefix,
itemsPerPage, headerOnly, True, itemsPerPage, headerOnly, True,
0, False, pageNumber) 0, False, 0, pageNumber)
def createNewsTimeline(session, baseDir: str, nickname: str, domain: str, def createNewsTimeline(session, baseDir: str, nickname: str, domain: str,
port: int, httpPrefix: str, itemsPerPage: int, port: int, httpPrefix: str, itemsPerPage: int,
headerOnly: bool, newswireVotesThreshold: int, headerOnly: bool, newswireVotesThreshold: int,
positiveVoting: bool, pageNumber=None) -> {}: positiveVoting: bool, votingTimeMins: int,
pageNumber=None) -> {}:
return createBoxIndexed({}, session, baseDir, 'outbox', 'news', return createBoxIndexed({}, session, baseDir, 'outbox', 'news',
domain, port, httpPrefix, domain, port, httpPrefix,
itemsPerPage, headerOnly, True, itemsPerPage, headerOnly, True,
newswireVotesThreshold, positiveVoting, newswireVotesThreshold, positiveVoting,
pageNumber) votingTimeMins, pageNumber)
def createOutbox(session, baseDir: str, nickname: str, domain: str, def createOutbox(session, baseDir: str, nickname: str, domain: str,
@ -2554,7 +2556,7 @@ def createOutbox(session, baseDir: str, nickname: str, domain: str,
return createBoxIndexed({}, session, baseDir, 'outbox', return createBoxIndexed({}, session, baseDir, 'outbox',
nickname, domain, port, httpPrefix, nickname, domain, port, httpPrefix,
itemsPerPage, headerOnly, authorized, itemsPerPage, headerOnly, authorized,
0, False, pageNumber) 0, False, 0, pageNumber)
def createModeration(baseDir: str, nickname: str, domain: str, port: int, def createModeration(baseDir: str, nickname: str, domain: str, port: int,
@ -2848,7 +2850,7 @@ def createBoxIndexed(recentPostsCache: {},
nickname: str, domain: str, port: int, httpPrefix: str, nickname: str, domain: str, port: int, httpPrefix: str,
itemsPerPage: int, headerOnly: bool, authorized: bool, itemsPerPage: int, headerOnly: bool, authorized: bool,
newswireVotesThreshold: int, positiveVoting: bool, newswireVotesThreshold: int, positiveVoting: bool,
pageNumber=None) -> {}: votingTimeMins: int, pageNumber=None) -> {}:
"""Constructs the box feed for a person with the given nickname """Constructs the box feed for a person with the given nickname
""" """
if not authorized or not pageNumber: if not authorized or not pageNumber:
@ -2919,27 +2921,38 @@ def createBoxIndexed(recentPostsCache: {},
# apply votes within this timeline # apply votes within this timeline
if newswireVotesThreshold > 0: if newswireVotesThreshold > 0:
# if there a votes file for this post? # note that the presence of an arrival file also indicates
votesFilename = \ # that this post is moderated
locateNewsVotes(baseDir, domain, postFilename) arrivalDate = \
if votesFilename: locateNewsArrival(baseDir, domain, postFilename)
# load the votes file and count the votes if arrivalDate:
votesJson = loadJson(votesFilename, 0, 2) # how long has elapsed since this post arrived?
if votesJson: currDate = datetime.datetime.now()
if not positiveVoting: timeDiffMins = \
if votesOnNewswireItem(votesJson) >= \ int((currDate - arrivalDate).total_seconds() / 60)
newswireVotesThreshold: # has the voting time elapsed?
# Too many veto votes. if timeDiffMins > votingTimeMins:
# Continue without incrementing the # if there a votes file for this post?
# posts counter votesFilename = \
continue locateNewsVotes(baseDir, domain, postFilename)
else: if votesFilename:
if votesOnNewswireItem < \ # load the votes file and count the votes
newswireVotesThreshold: votesJson = loadJson(votesFilename, 0, 2)
# Not enough votes. if votesJson:
# Continue without incrementing the if not positiveVoting:
# posts counter if votesOnNewswireItem(votesJson) >= \
continue newswireVotesThreshold:
# Too many veto votes.
# Continue without incrementing
# the posts counter
continue
else:
if votesOnNewswireItem < \
newswireVotesThreshold:
# Not enough votes.
# Continue without incrementing
# the posts counter
continue
# Skip through any posts previous to the current page # Skip through any posts previous to the current page
if postsCtr < int((pageNumber - 1) * itemsPerPage): if postsCtr < int((pageNumber - 1) * itemsPerPage):

View File

@ -287,7 +287,7 @@ def createServerAlice(path: str, domain: str, port: int,
onionDomain = None onionDomain = None
i2pDomain = None i2pDomain = None
print('Server running: Alice') print('Server running: Alice')
runDaemon(False, 1, False, False, False, runDaemon(0, False, 1, False, False, False,
5, True, True, 'en', __version__, 5, True, True, 'en', __version__,
"instanceId", False, path, domain, "instanceId", False, path, domain,
onionDomain, i2pDomain, None, port, port, onionDomain, i2pDomain, None, port, port,
@ -350,7 +350,7 @@ def createServerBob(path: str, domain: str, port: int,
onionDomain = None onionDomain = None
i2pDomain = None i2pDomain = None
print('Server running: Bob') print('Server running: Bob')
runDaemon(False, 1, False, False, False, runDaemon(0, False, 1, False, False, False,
5, True, True, 'en', __version__, 5, True, True, 'en', __version__,
"instanceId", False, path, domain, "instanceId", False, path, domain,
onionDomain, i2pDomain, None, port, port, onionDomain, i2pDomain, None, port, port,
@ -387,7 +387,7 @@ def createServerEve(path: str, domain: str, port: int, federationList: [],
onionDomain = None onionDomain = None
i2pDomain = None i2pDomain = None
print('Server running: Eve') print('Server running: Eve')
runDaemon(False, 1, False, False, False, runDaemon(0, False, 1, False, False, False,
5, True, True, 'en', __version__, 5, True, True, 'en', __version__,
"instanceId", False, path, domain, "instanceId", False, path, domain,
onionDomain, i2pDomain, None, port, port, onionDomain, i2pDomain, None, port, port,

View File

@ -526,10 +526,40 @@ def locateNewsVotes(baseDir: str, domain: str,
else: else:
postUrl = postUrl + '.json.votes' postUrl = postUrl + '.json.votes'
accountDir = baseDir + '/accounts/news' + '@' + domain + '/' accountDir = baseDir + '/accounts/news@' + domain + '/'
postFilename = accountDir + 'outbox/' + postUrl postFilename = accountDir + 'outbox/' + postUrl
if os.path.isfile(postFilename): if os.path.isfile(postFilename):
return postFilename return postFilename
return None
def locateNewsArrival(baseDir: str, domain: str,
postUrl: str) -> str:
"""Returns the arrival time for a news post
within the news user account
"""
postUrl = \
postUrl.strip().replace('\n', '').replace('\r', '')
# if this post in the shared inbox?
postUrl = removeIdEnding(postUrl.strip()).replace('/', '#')
if postUrl.endswith('.json'):
postUrl = postUrl + '.arrival'
else:
postUrl = postUrl + '.json.arrival'
accountDir = baseDir + '/accounts/news@' + domain + '/'
postFilename = accountDir + 'outbox/' + postUrl
if os.path.isfile(postFilename):
with open(postFilename, 'r') as arrivalFile:
arrival = arrivalFile.read()
if arrival:
arrivalDate = \
datetime.strptime(arrival, "%Y-%m-%dT%H:%M:%SZ")
return arrivalDate
return None return None

View File

@ -2862,7 +2862,7 @@ def htmlProfilePosts(recentPostsCache: {}, maxRecentPosts: int,
str(currPage), str(currPage),
httpPrefix, httpPrefix,
10, 'outbox', 10, 'outbox',
authorized, 0, False) authorized, 0, False, 0)
if not outboxFeed: if not outboxFeed:
break break
if len(outboxFeed['orderedItems']) == 0: if len(outboxFeed['orderedItems']) == 0: