mirror of https://gitlab.com/bashrc2/epicyon
parent
1515ef0bc9
commit
5d38503baa
280
daemon.py
280
daemon.py
|
@ -81,7 +81,6 @@ from posts import createBlogPost
|
||||||
from posts import createReportPost
|
from posts import createReportPost
|
||||||
from posts import createUnlistedPost
|
from posts import createUnlistedPost
|
||||||
from posts import createFollowersOnlyPost
|
from posts import createFollowersOnlyPost
|
||||||
from posts import createEventPost
|
|
||||||
from posts import createDirectMessagePost
|
from posts import createDirectMessagePost
|
||||||
from posts import populateRepliesJson
|
from posts import populateRepliesJson
|
||||||
from posts import addToField
|
from posts import addToField
|
||||||
|
@ -160,7 +159,6 @@ from webapp_person_options import htmlPersonOptions
|
||||||
from webapp_timeline import htmlShares
|
from webapp_timeline import htmlShares
|
||||||
from webapp_timeline import htmlInbox
|
from webapp_timeline import htmlInbox
|
||||||
from webapp_timeline import htmlBookmarks
|
from webapp_timeline import htmlBookmarks
|
||||||
from webapp_timeline import htmlEvents
|
|
||||||
from webapp_timeline import htmlInboxDMs
|
from webapp_timeline import htmlInboxDMs
|
||||||
from webapp_timeline import htmlInboxReplies
|
from webapp_timeline import htmlInboxReplies
|
||||||
from webapp_timeline import htmlInboxMedia
|
from webapp_timeline import htmlInboxMedia
|
||||||
|
@ -9043,138 +9041,6 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.GETbusy = False
|
self.server.GETbusy = False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _showEventsTimeline(self, authorized: bool,
|
|
||||||
callingDomain: str, path: str,
|
|
||||||
baseDir: str, httpPrefix: str,
|
|
||||||
domain: str, domainFull: str, port: int,
|
|
||||||
onionDomain: str, i2pDomain: str,
|
|
||||||
GETstartTime, GETtimings: {},
|
|
||||||
proxyType: str, cookie: str,
|
|
||||||
debug: str) -> bool:
|
|
||||||
"""Shows the events timeline
|
|
||||||
"""
|
|
||||||
if '/users/' in path:
|
|
||||||
if authorized:
|
|
||||||
# convert /events to /tlevents
|
|
||||||
if path.endswith('/events') or \
|
|
||||||
'/events?page=' in path:
|
|
||||||
path = path.replace('/events', '/tlevents')
|
|
||||||
eventsFeed = \
|
|
||||||
personBoxJson(self.server.recentPostsCache,
|
|
||||||
self.server.session,
|
|
||||||
baseDir,
|
|
||||||
domain,
|
|
||||||
port,
|
|
||||||
path,
|
|
||||||
httpPrefix,
|
|
||||||
maxPostsInFeed, 'tlevents',
|
|
||||||
authorized,
|
|
||||||
0, self.server.positiveVoting,
|
|
||||||
self.server.votingTimeMins)
|
|
||||||
print('eventsFeed: ' + str(eventsFeed))
|
|
||||||
if eventsFeed:
|
|
||||||
if self._requestHTTP():
|
|
||||||
nickname = path.replace('/users/', '')
|
|
||||||
nickname = nickname.replace('/tlevents', '')
|
|
||||||
pageNumber = 1
|
|
||||||
if '?page=' in nickname:
|
|
||||||
pageNumber = nickname.split('?page=')[1]
|
|
||||||
nickname = nickname.split('?page=')[0]
|
|
||||||
if pageNumber.isdigit():
|
|
||||||
pageNumber = int(pageNumber)
|
|
||||||
else:
|
|
||||||
pageNumber = 1
|
|
||||||
if 'page=' not in path:
|
|
||||||
# if no page was specified then show the first
|
|
||||||
eventsFeed = \
|
|
||||||
personBoxJson(self.server.recentPostsCache,
|
|
||||||
self.server.session,
|
|
||||||
baseDir,
|
|
||||||
domain,
|
|
||||||
port,
|
|
||||||
path + '?page=1',
|
|
||||||
httpPrefix,
|
|
||||||
maxPostsInFeed,
|
|
||||||
'tlevents',
|
|
||||||
authorized,
|
|
||||||
0, self.server.positiveVoting,
|
|
||||||
self.server.votingTimeMins)
|
|
||||||
fullWidthTimelineButtonHeader = \
|
|
||||||
self.server.fullWidthTimelineButtonHeader
|
|
||||||
minimalNick = isMinimal(baseDir, domain, nickname)
|
|
||||||
|
|
||||||
accessKeys = self.server.accessKeys
|
|
||||||
if self.server.keyShortcuts.get(nickname):
|
|
||||||
accessKeys = \
|
|
||||||
self.server.keyShortcuts[nickname]
|
|
||||||
|
|
||||||
msg = \
|
|
||||||
htmlEvents(self.server.cssCache,
|
|
||||||
self.server.defaultTimeline,
|
|
||||||
self.server.recentPostsCache,
|
|
||||||
self.server.maxRecentPosts,
|
|
||||||
self.server.translate,
|
|
||||||
pageNumber, maxPostsInFeed,
|
|
||||||
self.server.session,
|
|
||||||
baseDir,
|
|
||||||
self.server.cachedWebfingers,
|
|
||||||
self.server.personCache,
|
|
||||||
nickname,
|
|
||||||
domain,
|
|
||||||
port,
|
|
||||||
eventsFeed,
|
|
||||||
self.server.allowDeletion,
|
|
||||||
httpPrefix,
|
|
||||||
self.server.projectVersion,
|
|
||||||
minimalNick,
|
|
||||||
self.server.YTReplacementDomain,
|
|
||||||
self.server.showPublishedDateOnly,
|
|
||||||
self.server.newswire,
|
|
||||||
self.server.positiveVoting,
|
|
||||||
self.server.showPublishAsIcon,
|
|
||||||
fullWidthTimelineButtonHeader,
|
|
||||||
self.server.iconsAsButtons,
|
|
||||||
self.server.rssIconAtTop,
|
|
||||||
self.server.publishButtonAtTop,
|
|
||||||
authorized,
|
|
||||||
self.server.themeName,
|
|
||||||
self.server.peertubeInstances,
|
|
||||||
self.server.allowLocalNetworkAccess,
|
|
||||||
self.server.textModeBanner,
|
|
||||||
accessKeys)
|
|
||||||
msg = msg.encode('utf-8')
|
|
||||||
msglen = len(msg)
|
|
||||||
self._set_headers('text/html', msglen,
|
|
||||||
cookie, callingDomain)
|
|
||||||
self._write(msg)
|
|
||||||
self._benchmarkGETtimings(GETstartTime, GETtimings,
|
|
||||||
'show bookmarks 2 done',
|
|
||||||
'show events')
|
|
||||||
else:
|
|
||||||
# don't need authenticated fetch here because
|
|
||||||
# there is already the authorization check
|
|
||||||
msg = json.dumps(eventsFeed,
|
|
||||||
ensure_ascii=False)
|
|
||||||
msg = msg.encode('utf-8')
|
|
||||||
msglen = len(msg)
|
|
||||||
self._set_headers('application/json', msglen,
|
|
||||||
None, callingDomain)
|
|
||||||
self._write(msg)
|
|
||||||
self.server.GETbusy = False
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
if debug:
|
|
||||||
nickname = path.replace('/users/', '')
|
|
||||||
nickname = nickname.replace('/tlevents', '')
|
|
||||||
print('DEBUG: ' + nickname +
|
|
||||||
' was not authorized to access ' + path)
|
|
||||||
if debug:
|
|
||||||
print('DEBUG: GET access to events is unauthorized')
|
|
||||||
self.send_response(405)
|
|
||||||
self.end_headers()
|
|
||||||
self.server.GETbusy = False
|
|
||||||
return True
|
|
||||||
|
|
||||||
def _showOutboxTimeline(self, authorized: bool,
|
def _showOutboxTimeline(self, authorized: bool,
|
||||||
callingDomain: str, path: str,
|
callingDomain: str, path: str,
|
||||||
baseDir: str, httpPrefix: str,
|
baseDir: str, httpPrefix: str,
|
||||||
|
@ -10385,7 +10251,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
# Various types of new post in the web interface
|
# Various types of new post in the web interface
|
||||||
newPostEnd = ('newpost', 'newblog', 'newunlisted',
|
newPostEnd = ('newpost', 'newblog', 'newunlisted',
|
||||||
'newfollowers', 'newdm', 'newreminder',
|
'newfollowers', 'newdm', 'newreminder',
|
||||||
'newevent', 'newreport', 'newquestion',
|
'newreport', 'newquestion',
|
||||||
'newshare')
|
'newshare')
|
||||||
for postType in newPostEnd:
|
for postType in newPostEnd:
|
||||||
if path.endswith('/' + postType):
|
if path.endswith('/' + postType):
|
||||||
|
@ -10578,44 +10444,6 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _editEvent(self, callingDomain: str, path: str,
|
|
||||||
httpPrefix: str, domain: str, domainFull: str,
|
|
||||||
baseDir: str, translate: {},
|
|
||||||
mediaInstance: bool,
|
|
||||||
cookie: str) -> bool:
|
|
||||||
"""Show edit event screen
|
|
||||||
"""
|
|
||||||
messageId = path.split('?editeventpost=')[1]
|
|
||||||
if '?' in messageId:
|
|
||||||
messageId = messageId.split('?')[0]
|
|
||||||
actor = path.split('?actor=')[1]
|
|
||||||
if '?' in actor:
|
|
||||||
actor = actor.split('?')[0]
|
|
||||||
nickname = getNicknameFromActor(path)
|
|
||||||
if nickname == actor:
|
|
||||||
# postUrl = \
|
|
||||||
# httpPrefix + '://' + \
|
|
||||||
# domainFull + '/users/' + nickname + \
|
|
||||||
# '/statuses/' + messageId
|
|
||||||
msg = None
|
|
||||||
# TODO
|
|
||||||
# htmlEditEvent(mediaInstance,
|
|
||||||
# translate,
|
|
||||||
# baseDir,
|
|
||||||
# httpPrefix,
|
|
||||||
# path,
|
|
||||||
# nickname, domain,
|
|
||||||
# postUrl)
|
|
||||||
if msg:
|
|
||||||
msg = msg.encode('utf-8')
|
|
||||||
msglen = len(msg)
|
|
||||||
self._set_headers('text/html', msglen,
|
|
||||||
cookie, callingDomain)
|
|
||||||
self._write(msg)
|
|
||||||
self.server.GETbusy = False
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def _getFollowingJson(self, baseDir: str, path: str,
|
def _getFollowingJson(self, baseDir: str, path: str,
|
||||||
callingDomain: str,
|
callingDomain: str,
|
||||||
httpPrefix: str,
|
httpPrefix: str,
|
||||||
|
@ -12498,21 +12326,6 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.GETbusy = False
|
self.server.GETbusy = False
|
||||||
return
|
return
|
||||||
|
|
||||||
# Edit an event
|
|
||||||
if authorized and \
|
|
||||||
'/tlevents' in self.path and \
|
|
||||||
'?editeventpost=' in self.path and \
|
|
||||||
'?actor=' in self.path:
|
|
||||||
if self._editEvent(callingDomain, self.path,
|
|
||||||
self.server.httpPrefix,
|
|
||||||
self.server.domain,
|
|
||||||
self.server.domainFull,
|
|
||||||
self.server.baseDir,
|
|
||||||
self.server.translate,
|
|
||||||
self.server.mediaInstance,
|
|
||||||
cookie):
|
|
||||||
return
|
|
||||||
|
|
||||||
# edit profile in web interface
|
# edit profile in web interface
|
||||||
if self._editProfile(callingDomain, self.path,
|
if self._editProfile(callingDomain, self.path,
|
||||||
self.server.translate,
|
self.server.translate,
|
||||||
|
@ -12931,29 +12744,6 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
'show shares 2 done',
|
'show shares 2 done',
|
||||||
'show bookmarks 2 done')
|
'show bookmarks 2 done')
|
||||||
|
|
||||||
# get the events for a given person
|
|
||||||
if self.path.endswith('/tlevents') or \
|
|
||||||
'/tlevents?page=' in self.path or \
|
|
||||||
self.path.endswith('/events') or \
|
|
||||||
'/events?page=' in self.path:
|
|
||||||
if self._showEventsTimeline(authorized,
|
|
||||||
callingDomain, self.path,
|
|
||||||
self.server.baseDir,
|
|
||||||
self.server.httpPrefix,
|
|
||||||
self.server.domain,
|
|
||||||
self.server.domainFull,
|
|
||||||
self.server.port,
|
|
||||||
self.server.onionDomain,
|
|
||||||
self.server.i2pDomain,
|
|
||||||
GETstartTime, GETtimings,
|
|
||||||
self.server.proxyType,
|
|
||||||
cookie, self.server.debug):
|
|
||||||
return
|
|
||||||
|
|
||||||
self._benchmarkGETtimings(GETstartTime, GETtimings,
|
|
||||||
'show bookmarks 2 done',
|
|
||||||
'show events done')
|
|
||||||
|
|
||||||
# outbox timeline
|
# outbox timeline
|
||||||
if self._showOutboxTimeline(authorized,
|
if self._showOutboxTimeline(authorized,
|
||||||
callingDomain, self.path,
|
callingDomain, self.path,
|
||||||
|
@ -13333,11 +13123,6 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
else:
|
else:
|
||||||
commentsEnabled = True
|
commentsEnabled = True
|
||||||
|
|
||||||
if not fields.get('privateEvent'):
|
|
||||||
privateEvent = False
|
|
||||||
else:
|
|
||||||
privateEvent = True
|
|
||||||
|
|
||||||
if postType == 'newpost':
|
if postType == 'newpost':
|
||||||
if not fields.get('pinToProfile'):
|
if not fields.get('pinToProfile'):
|
||||||
pinToProfile = False
|
pinToProfile = False
|
||||||
|
@ -13621,64 +13406,6 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
return 1
|
return 1
|
||||||
else:
|
else:
|
||||||
return -1
|
return -1
|
||||||
elif postType == 'newevent':
|
|
||||||
# A Mobilizon-type event is posted
|
|
||||||
|
|
||||||
# if there is no image dscription then make it the same
|
|
||||||
# as the event title
|
|
||||||
if not fields.get('imageDescription'):
|
|
||||||
fields['imageDescription'] = fields['subject']
|
|
||||||
# Events are public by default, with opt-in
|
|
||||||
# followers only status
|
|
||||||
if not fields.get('followersOnlyEvent'):
|
|
||||||
fields['followersOnlyEvent'] = False
|
|
||||||
|
|
||||||
if not fields.get('anonymousParticipationEnabled'):
|
|
||||||
anonymousParticipationEnabled = False
|
|
||||||
else:
|
|
||||||
anonymousParticipationEnabled = True
|
|
||||||
maximumAttendeeCapacity = 999999
|
|
||||||
if fields.get('maximumAttendeeCapacity'):
|
|
||||||
maximumAttendeeCapacity = \
|
|
||||||
int(fields['maximumAttendeeCapacity'])
|
|
||||||
|
|
||||||
city = getSpoofedCity(self.server.city,
|
|
||||||
self.server.baseDir,
|
|
||||||
nickname,
|
|
||||||
self.server.domain)
|
|
||||||
messageJson = \
|
|
||||||
createEventPost(self.server.baseDir,
|
|
||||||
nickname,
|
|
||||||
self.server.domain,
|
|
||||||
self.server.port,
|
|
||||||
self.server.httpPrefix,
|
|
||||||
mentionsStr + fields['message'],
|
|
||||||
privateEvent,
|
|
||||||
False, False, commentsEnabled,
|
|
||||||
filename, attachmentMediaType,
|
|
||||||
fields['imageDescription'],
|
|
||||||
city,
|
|
||||||
fields['subject'],
|
|
||||||
fields['schedulePost'],
|
|
||||||
fields['eventDate'],
|
|
||||||
fields['eventTime'],
|
|
||||||
fields['location'],
|
|
||||||
fields['category'],
|
|
||||||
fields['joinMode'],
|
|
||||||
fields['endDate'],
|
|
||||||
fields['endTime'],
|
|
||||||
maximumAttendeeCapacity,
|
|
||||||
fields['repliesModerationOption'],
|
|
||||||
anonymousParticipationEnabled,
|
|
||||||
fields['eventStatus'],
|
|
||||||
fields['ticketUrl'])
|
|
||||||
if messageJson:
|
|
||||||
if fields['schedulePost']:
|
|
||||||
return 1
|
|
||||||
if self._postToOutbox(messageJson, __version__, nickname):
|
|
||||||
return 1
|
|
||||||
else:
|
|
||||||
return -1
|
|
||||||
elif postType == 'newdm':
|
elif postType == 'newdm':
|
||||||
messageJson = None
|
messageJson = None
|
||||||
print('A DM was posted')
|
print('A DM was posted')
|
||||||
|
@ -14190,7 +13917,6 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
if not self.path.endswith('confirm'):
|
if not self.path.endswith('confirm'):
|
||||||
self.path = self.path.replace('/outbox/', '/outbox')
|
self.path = self.path.replace('/outbox/', '/outbox')
|
||||||
self.path = self.path.replace('/tlblogs/', '/tlblogs')
|
self.path = self.path.replace('/tlblogs/', '/tlblogs')
|
||||||
self.path = self.path.replace('/tlevents/', '/tlevents')
|
|
||||||
self.path = self.path.replace('/inbox/', '/inbox')
|
self.path = self.path.replace('/inbox/', '/inbox')
|
||||||
self.path = self.path.replace('/shares/', '/shares')
|
self.path = self.path.replace('/shares/', '/shares')
|
||||||
self.path = self.path.replace('/sharedInbox/', '/sharedInbox')
|
self.path = self.path.replace('/sharedInbox/', '/sharedInbox')
|
||||||
|
@ -14528,7 +14254,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
# receive different types of post created by htmlNewPost
|
# receive different types of post created by htmlNewPost
|
||||||
postTypes = ("newpost", "newblog", "newunlisted", "newfollowers",
|
postTypes = ("newpost", "newblog", "newunlisted", "newfollowers",
|
||||||
"newdm", "newreport", "newshare", "newquestion",
|
"newdm", "newreport", "newshare", "newquestion",
|
||||||
"editblogpost", "newreminder", "newevent")
|
"editblogpost", "newreminder")
|
||||||
for currPostType in postTypes:
|
for currPostType in postTypes:
|
||||||
if not authorized:
|
if not authorized:
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
|
@ -14538,8 +14264,6 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
postRedirect = self.server.defaultTimeline
|
postRedirect = self.server.defaultTimeline
|
||||||
if currPostType == 'newshare':
|
if currPostType == 'newshare':
|
||||||
postRedirect = 'shares'
|
postRedirect = 'shares'
|
||||||
elif currPostType == 'newevent':
|
|
||||||
postRedirect = 'tlevents'
|
|
||||||
|
|
||||||
pageNumber = \
|
pageNumber = \
|
||||||
self._receiveNewPost(currPostType, self.path,
|
self._receiveNewPost(currPostType, self.path,
|
||||||
|
|
5
inbox.py
5
inbox.py
|
@ -168,7 +168,7 @@ def _inboxStorePostToHtmlCache(recentPostsCache: {}, maxRecentPosts: int,
|
||||||
"""
|
"""
|
||||||
pageNumber = -999
|
pageNumber = -999
|
||||||
avatarUrl = None
|
avatarUrl = None
|
||||||
if boxname != 'tlevents' and boxname != 'outbox':
|
if boxname != 'outbox':
|
||||||
boxname = 'inbox'
|
boxname = 'inbox'
|
||||||
|
|
||||||
individualPostAsHtml(True, recentPostsCache, maxRecentPosts,
|
individualPostAsHtml(True, recentPostsCache, maxRecentPosts,
|
||||||
|
@ -2504,9 +2504,6 @@ def _inboxAfterInitial(recentPostsCache: {}, maxRecentPosts: int,
|
||||||
if isBlogPost(postJsonObject):
|
if isBlogPost(postJsonObject):
|
||||||
# blogs index will be updated
|
# blogs index will be updated
|
||||||
updateIndexList.append('tlblogs')
|
updateIndexList.append('tlblogs')
|
||||||
elif isEventPost(postJsonObject):
|
|
||||||
# events index will be updated
|
|
||||||
updateIndexList.append('tlevents')
|
|
||||||
|
|
||||||
# get the avatar for a reply/announce
|
# get the avatar for a reply/announce
|
||||||
_obtainAvatarForReplyPost(session, baseDir,
|
_obtainAvatarForReplyPost(session, baseDir,
|
||||||
|
|
|
@ -337,8 +337,6 @@ def postMessageToOutbox(session, translate: {},
|
||||||
if messageJson['object'].get('type'):
|
if messageJson['object'].get('type'):
|
||||||
if messageJson['object']['type'] == 'Article':
|
if messageJson['object']['type'] == 'Article':
|
||||||
outboxName = 'tlblogs'
|
outboxName = 'tlblogs'
|
||||||
elif messageJson['object']['type'] == 'Event':
|
|
||||||
outboxName = 'tlevents'
|
|
||||||
|
|
||||||
savedFilename = \
|
savedFilename = \
|
||||||
savePostToBox(baseDir,
|
savePostToBox(baseDir,
|
||||||
|
|
10
person.py
10
person.py
|
@ -28,7 +28,6 @@ from posts import createNewsTimeline
|
||||||
from posts import createBlogsTimeline
|
from posts import createBlogsTimeline
|
||||||
from posts import createFeaturesTimeline
|
from posts import createFeaturesTimeline
|
||||||
from posts import createBookmarksTimeline
|
from posts import createBookmarksTimeline
|
||||||
from posts import createEventsTimeline
|
|
||||||
from posts import createInbox
|
from posts import createInbox
|
||||||
from posts import createOutbox
|
from posts import createOutbox
|
||||||
from posts import createModeration
|
from posts import createModeration
|
||||||
|
@ -746,8 +745,7 @@ def personBoxJson(recentPostsCache: {},
|
||||||
boxname != 'tlblogs' and boxname != 'tlnews' and \
|
boxname != 'tlblogs' and boxname != 'tlnews' and \
|
||||||
boxname != 'tlfeatures' and \
|
boxname != 'tlfeatures' and \
|
||||||
boxname != 'outbox' and boxname != 'moderation' and \
|
boxname != 'outbox' and boxname != 'moderation' and \
|
||||||
boxname != 'tlbookmarks' and boxname != 'bookmarks' and \
|
boxname != 'tlbookmarks' and boxname != 'bookmarks':
|
||||||
boxname != 'tlevents':
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if not '/' + boxname in path:
|
if not '/' + boxname in path:
|
||||||
|
@ -796,12 +794,6 @@ def personBoxJson(recentPostsCache: {},
|
||||||
port, httpPrefix,
|
port, httpPrefix,
|
||||||
noOfItems, headerOnly,
|
noOfItems, headerOnly,
|
||||||
pageNumber)
|
pageNumber)
|
||||||
elif boxname == 'tlevents':
|
|
||||||
return createEventsTimeline(recentPostsCache,
|
|
||||||
session, baseDir, nickname, domain,
|
|
||||||
port, httpPrefix,
|
|
||||||
noOfItems, headerOnly,
|
|
||||||
pageNumber)
|
|
||||||
elif boxname == 'tlreplies':
|
elif boxname == 'tlreplies':
|
||||||
return createRepliesTimeline(recentPostsCache,
|
return createRepliesTimeline(recentPostsCache,
|
||||||
session, baseDir, nickname, domain,
|
session, baseDir, nickname, domain,
|
||||||
|
|
72
posts.py
72
posts.py
|
@ -14,7 +14,6 @@ import os
|
||||||
import shutil
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import uuid
|
|
||||||
import random
|
import random
|
||||||
from socket import error as SocketError
|
from socket import error as SocketError
|
||||||
from time import gmtime, strftime
|
from time import gmtime, strftime
|
||||||
|
@ -657,8 +656,7 @@ def deleteAllPosts(baseDir: str,
|
||||||
"""Deletes all posts for a person from inbox or outbox
|
"""Deletes all posts for a person from inbox or outbox
|
||||||
"""
|
"""
|
||||||
if boxname != 'inbox' and boxname != 'outbox' and \
|
if boxname != 'inbox' and boxname != 'outbox' and \
|
||||||
boxname != 'tlblogs' and boxname != 'tlnews' and \
|
boxname != 'tlblogs' and boxname != 'tlnews':
|
||||||
boxname != 'tlevents':
|
|
||||||
return
|
return
|
||||||
boxDir = createPersonDir(nickname, domain, baseDir, boxname)
|
boxDir = createPersonDir(nickname, domain, baseDir, boxname)
|
||||||
for deleteFilename in os.scandir(boxDir):
|
for deleteFilename in os.scandir(boxDir):
|
||||||
|
@ -681,7 +679,6 @@ def savePostToBox(baseDir: str, httpPrefix: str, postId: str,
|
||||||
"""
|
"""
|
||||||
if boxname != 'inbox' and boxname != 'outbox' and \
|
if boxname != 'inbox' and boxname != 'outbox' and \
|
||||||
boxname != 'tlblogs' and boxname != 'tlnews' and \
|
boxname != 'tlblogs' and boxname != 'tlnews' and \
|
||||||
boxname != 'tlevents' and \
|
|
||||||
boxname != 'scheduled':
|
boxname != 'scheduled':
|
||||||
return None
|
return None
|
||||||
originalDomain = domain
|
originalDomain = domain
|
||||||
|
@ -1244,9 +1241,6 @@ def _createPostBase(baseDir: str, nickname: str, domain: str, port: int,
|
||||||
if isArticle:
|
if isArticle:
|
||||||
savePostToBox(baseDir, httpPrefix, newPostId,
|
savePostToBox(baseDir, httpPrefix, newPostId,
|
||||||
nickname, domain, newPost, 'tlblogs')
|
nickname, domain, newPost, 'tlblogs')
|
||||||
elif eventUUID:
|
|
||||||
savePostToBox(baseDir, httpPrefix, newPostId,
|
|
||||||
nickname, domain, newPost, 'tlevents')
|
|
||||||
else:
|
else:
|
||||||
savePostToBox(baseDir, httpPrefix, newPostId,
|
savePostToBox(baseDir, httpPrefix, newPostId,
|
||||||
nickname, domain, newPost, 'outbox')
|
nickname, domain, newPost, 'outbox')
|
||||||
|
@ -1653,57 +1647,6 @@ def createFollowersOnlyPost(baseDir: str,
|
||||||
None, None, None, None, None)
|
None, None, None, None, None)
|
||||||
|
|
||||||
|
|
||||||
def createEventPost(baseDir: str,
|
|
||||||
nickname: str, domain: str, port: int,
|
|
||||||
httpPrefix: str,
|
|
||||||
content: str, followersOnly: bool,
|
|
||||||
saveToFile: bool,
|
|
||||||
clientToServer: bool, commentsEnabled: bool,
|
|
||||||
attachImageFilename: str, mediaType: str,
|
|
||||||
imageDescription: str, city: str,
|
|
||||||
subject: str = None, schedulePost: str = False,
|
|
||||||
eventDate: str = None, eventTime: str = None,
|
|
||||||
location: str = None, category: str = None,
|
|
||||||
joinMode: str = None,
|
|
||||||
endDate: str = None, endTime: str = None,
|
|
||||||
maximumAttendeeCapacity: int = None,
|
|
||||||
repliesModerationOption: str = None,
|
|
||||||
anonymousParticipationEnabled: bool = None,
|
|
||||||
eventStatus: str = None, ticketUrl: str = None) -> {}:
|
|
||||||
"""Mobilizon-type Event post
|
|
||||||
"""
|
|
||||||
if not attachImageFilename:
|
|
||||||
print('Event has no attached image')
|
|
||||||
return None
|
|
||||||
if not category:
|
|
||||||
print('Event has no category')
|
|
||||||
return None
|
|
||||||
domainFull = getFullDomain(domain, port)
|
|
||||||
|
|
||||||
# create event uuid
|
|
||||||
eventUUID = str(uuid.uuid1())
|
|
||||||
|
|
||||||
toStr1 = 'https://www.w3.org/ns/activitystreams#Public'
|
|
||||||
toStr2 = httpPrefix + '://' + domainFull + '/users/' + \
|
|
||||||
nickname + '/followers',
|
|
||||||
if followersOnly:
|
|
||||||
toStr1 = toStr2
|
|
||||||
toStr2 = None
|
|
||||||
return _createPostBase(baseDir, nickname, domain, port,
|
|
||||||
toStr1, toStr2,
|
|
||||||
httpPrefix, content, followersOnly, saveToFile,
|
|
||||||
clientToServer, commentsEnabled,
|
|
||||||
attachImageFilename, mediaType,
|
|
||||||
imageDescription, city,
|
|
||||||
False, False, None, None, subject,
|
|
||||||
schedulePost, eventDate, eventTime, location,
|
|
||||||
eventUUID, category, joinMode,
|
|
||||||
endDate, endTime, maximumAttendeeCapacity,
|
|
||||||
repliesModerationOption,
|
|
||||||
anonymousParticipationEnabled,
|
|
||||||
eventStatus, ticketUrl)
|
|
||||||
|
|
||||||
|
|
||||||
def getMentionedPeople(baseDir: str, httpPrefix: str,
|
def getMentionedPeople(baseDir: str, httpPrefix: str,
|
||||||
content: str, domain: str, debug: bool) -> []:
|
content: str, domain: str, debug: bool) -> []:
|
||||||
"""Extracts a list of mentioned actors from the given message content
|
"""Extracts a list of mentioned actors from the given message content
|
||||||
|
@ -2835,16 +2778,6 @@ def createBookmarksTimeline(session, baseDir: str, nickname: str, domain: str,
|
||||||
True, 0, False, 0, pageNumber)
|
True, 0, False, 0, pageNumber)
|
||||||
|
|
||||||
|
|
||||||
def createEventsTimeline(recentPostsCache: {},
|
|
||||||
session, baseDir: str, nickname: str, domain: str,
|
|
||||||
port: int, httpPrefix: str, itemsPerPage: int,
|
|
||||||
headerOnly: bool, pageNumber: int = None) -> {}:
|
|
||||||
return _createBoxIndexed(recentPostsCache, session, baseDir, 'tlevents',
|
|
||||||
nickname, domain,
|
|
||||||
port, httpPrefix, itemsPerPage, headerOnly,
|
|
||||||
True, 0, False, 0, pageNumber)
|
|
||||||
|
|
||||||
|
|
||||||
def createDMTimeline(recentPostsCache: {},
|
def createDMTimeline(recentPostsCache: {},
|
||||||
session, baseDir: str, nickname: str, domain: str,
|
session, baseDir: str, nickname: str, domain: str,
|
||||||
port: int, httpPrefix: str, itemsPerPage: int,
|
port: int, httpPrefix: str, itemsPerPage: int,
|
||||||
|
@ -3179,8 +3112,7 @@ def _createBoxIndexed(recentPostsCache: {},
|
||||||
boxname != 'tlblogs' and boxname != 'tlnews' and \
|
boxname != 'tlblogs' and boxname != 'tlnews' and \
|
||||||
boxname != 'tlfeatures' and \
|
boxname != 'tlfeatures' and \
|
||||||
boxname != 'outbox' and boxname != 'tlbookmarks' and \
|
boxname != 'outbox' and boxname != 'tlbookmarks' and \
|
||||||
boxname != 'bookmarks' and \
|
boxname != 'bookmarks':
|
||||||
boxname != 'tlevents':
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# bookmarks and events timelines are like the inbox
|
# bookmarks and events timelines are like the inbox
|
||||||
|
|
4
utils.py
4
utils.py
|
@ -1139,7 +1139,7 @@ def locatePost(baseDir: str, nickname: str, domain: str,
|
||||||
postUrl = postUrl + '.' + extension
|
postUrl = postUrl + '.' + extension
|
||||||
|
|
||||||
# search boxes
|
# search boxes
|
||||||
boxes = ('inbox', 'outbox', 'tlblogs', 'tlevents')
|
boxes = ('inbox', 'outbox', 'tlblogs')
|
||||||
accountDir = baseDir + '/accounts/' + nickname + '@' + domain + '/'
|
accountDir = baseDir + '/accounts/' + nickname + '@' + domain + '/'
|
||||||
for boxName in boxes:
|
for boxName in boxes:
|
||||||
postFilename = accountDir + boxName + '/' + postUrl
|
postFilename = accountDir + boxName + '/' + postUrl
|
||||||
|
@ -1401,7 +1401,7 @@ def _isReservedName(nickname: str) -> bool:
|
||||||
'public', 'followers', 'category',
|
'public', 'followers', 'category',
|
||||||
'channel', 'calendar',
|
'channel', 'calendar',
|
||||||
'tlreplies', 'tlmedia', 'tlblogs',
|
'tlreplies', 'tlmedia', 'tlblogs',
|
||||||
'tlevents', 'tlblogs', 'tlfeatures',
|
'tlblogs', 'tlfeatures',
|
||||||
'moderation', 'moderationaction',
|
'moderation', 'moderationaction',
|
||||||
'activity', 'undo', 'pinned',
|
'activity', 'undo', 'pinned',
|
||||||
'reply', 'replies', 'question', 'like',
|
'reply', 'replies', 'question', 'like',
|
||||||
|
|
|
@ -129,20 +129,6 @@ def _htmlTimelineNewPost(manuallyApproveFollowers: bool,
|
||||||
'<a href="' + usersPath + '/newblog">' + \
|
'<a href="' + usersPath + '/newblog">' + \
|
||||||
'<button class="button"><span>' + \
|
'<button class="button"><span>' + \
|
||||||
translate['Post'] + '</span></button></a>'
|
translate['Post'] + '</span></button></a>'
|
||||||
elif boxName == 'tlevents':
|
|
||||||
if not iconsAsButtons:
|
|
||||||
newPostButtonStr += \
|
|
||||||
'<a class="imageAnchor" href="' + usersPath + \
|
|
||||||
'/newevent?nodropdown"><img loading="lazy" src="/' + \
|
|
||||||
'icons/newpost.png" title="' + \
|
|
||||||
translate['Create a new event'] + '" alt="| ' + \
|
|
||||||
translate['Create a new event'] + \
|
|
||||||
'" class="timelineicon"/></a>\n'
|
|
||||||
else:
|
|
||||||
newPostButtonStr += \
|
|
||||||
'<a href="' + usersPath + '/newevent?nodropdown">' + \
|
|
||||||
'<button class="button"><span>' + \
|
|
||||||
translate['Post'] + '</span></button></a>'
|
|
||||||
elif boxName == 'tlshares':
|
elif boxName == 'tlshares':
|
||||||
if not iconsAsButtons:
|
if not iconsAsButtons:
|
||||||
newPostButtonStr += \
|
newPostButtonStr += \
|
||||||
|
@ -500,8 +486,6 @@ def htmlTimeline(cssCache: {}, defaultTimeline: str,
|
||||||
sharesButton = 'buttonselectedhighlighted'
|
sharesButton = 'buttonselectedhighlighted'
|
||||||
elif boxName == 'tlbookmarks' or boxName == 'bookmarks':
|
elif boxName == 'tlbookmarks' or boxName == 'bookmarks':
|
||||||
bookmarksButton = 'buttonselected'
|
bookmarksButton = 'buttonselected'
|
||||||
# elif boxName == 'tlevents':
|
|
||||||
# eventsButton = 'buttonselected'
|
|
||||||
|
|
||||||
# get the full domain, including any port number
|
# get the full domain, including any port number
|
||||||
fullDomain = getFullDomain(domain, port)
|
fullDomain = getFullDomain(domain, port)
|
||||||
|
@ -559,11 +543,6 @@ def htmlTimeline(cssCache: {}, defaultTimeline: str,
|
||||||
'<a href="' + usersPath + '/tlbookmarks"><button class="' + \
|
'<a href="' + usersPath + '/tlbookmarks"><button class="' + \
|
||||||
bookmarksButton + '"><span>' + translate['Bookmarks'] + \
|
bookmarksButton + '"><span>' + translate['Bookmarks'] + \
|
||||||
'</span></button></a>'
|
'</span></button></a>'
|
||||||
#
|
|
||||||
# eventsButtonStr = \
|
|
||||||
# '<a href="' + usersPath + '/tlevents"><button class="' + \
|
|
||||||
# eventsButton + '"><span>' + translate['Events'] + \
|
|
||||||
# '</span></button></a>'
|
|
||||||
|
|
||||||
instanceTitle = \
|
instanceTitle = \
|
||||||
getConfigParam(baseDir, 'instanceTitle')
|
getConfigParam(baseDir, 'instanceTitle')
|
||||||
|
@ -1054,51 +1033,6 @@ def htmlBookmarks(cssCache: {}, defaultTimeline: str,
|
||||||
accessKeys)
|
accessKeys)
|
||||||
|
|
||||||
|
|
||||||
def htmlEvents(cssCache: {}, defaultTimeline: str,
|
|
||||||
recentPostsCache: {}, maxRecentPosts: int,
|
|
||||||
translate: {}, pageNumber: int, itemsPerPage: int,
|
|
||||||
session, baseDir: str,
|
|
||||||
cachedWebfingers: {}, personCache: {},
|
|
||||||
nickname: str, domain: str, port: int, bookmarksJson: {},
|
|
||||||
allowDeletion: bool,
|
|
||||||
httpPrefix: str, projectVersion: str,
|
|
||||||
minimal: bool, YTReplacementDomain: str,
|
|
||||||
showPublishedDateOnly: bool,
|
|
||||||
newswire: {}, positiveVoting: bool,
|
|
||||||
showPublishAsIcon: bool,
|
|
||||||
fullWidthTimelineButtonHeader: bool,
|
|
||||||
iconsAsButtons: bool,
|
|
||||||
rssIconAtTop: bool,
|
|
||||||
publishButtonAtTop: bool,
|
|
||||||
authorized: bool, theme: str,
|
|
||||||
peertubeInstances: [],
|
|
||||||
allowLocalNetworkAccess: bool,
|
|
||||||
textModeBanner: str,
|
|
||||||
accessKeys: {}) -> str:
|
|
||||||
"""Show the events as html
|
|
||||||
"""
|
|
||||||
manuallyApproveFollowers = \
|
|
||||||
followerApprovalActive(baseDir, nickname, domain)
|
|
||||||
|
|
||||||
return htmlTimeline(cssCache, defaultTimeline,
|
|
||||||
recentPostsCache, maxRecentPosts,
|
|
||||||
translate, pageNumber,
|
|
||||||
itemsPerPage, session, baseDir,
|
|
||||||
cachedWebfingers, personCache,
|
|
||||||
nickname, domain, port, bookmarksJson,
|
|
||||||
'tlevents', allowDeletion,
|
|
||||||
httpPrefix, projectVersion, manuallyApproveFollowers,
|
|
||||||
minimal, YTReplacementDomain,
|
|
||||||
showPublishedDateOnly,
|
|
||||||
newswire, False, False,
|
|
||||||
positiveVoting, showPublishAsIcon,
|
|
||||||
fullWidthTimelineButtonHeader,
|
|
||||||
iconsAsButtons, rssIconAtTop, publishButtonAtTop,
|
|
||||||
authorized, None, theme, peertubeInstances,
|
|
||||||
allowLocalNetworkAccess, textModeBanner,
|
|
||||||
accessKeys)
|
|
||||||
|
|
||||||
|
|
||||||
def htmlInboxDMs(cssCache: {}, defaultTimeline: str,
|
def htmlInboxDMs(cssCache: {}, defaultTimeline: str,
|
||||||
recentPostsCache: {}, maxRecentPosts: int,
|
recentPostsCache: {}, maxRecentPosts: int,
|
||||||
translate: {}, pageNumber: int, itemsPerPage: int,
|
translate: {}, pageNumber: int, itemsPerPage: int,
|
||||||
|
|
Loading…
Reference in New Issue