Include federated shared items within shares timeline

merge-requests/30/head
Bob Mottram 2021-07-27 15:06:14 +01:00
parent 0db65ae069
commit 974b97dc87
8 changed files with 148 additions and 50 deletions

View File

@ -7665,6 +7665,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.debug, self.server.debug,
accessKeys, city, accessKeys, city,
self.server.systemLanguage, self.server.systemLanguage,
self.server.sharedItemsFederatedDomains,
rolesList, rolesList,
None, None) None, None)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
@ -7740,6 +7741,8 @@ class PubServer(BaseHTTPRequestHandler):
city = getSpoofedCity(self.server.city, city = getSpoofedCity(self.server.city,
baseDir, baseDir,
nickname, domain) nickname, domain)
sharedItemsFederatedDomains = \
self.server.sharedItemsFederatedDomains
msg = \ msg = \
htmlProfile(self.server.rssIconAtTop, htmlProfile(self.server.rssIconAtTop,
self.server.cssCache, self.server.cssCache,
@ -7765,6 +7768,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.debug, self.server.debug,
accessKeys, city, accessKeys, city,
self.server.systemLanguage, self.server.systemLanguage,
sharedItemsFederatedDomains,
skills, skills,
None, None) None, None)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
@ -8076,6 +8080,8 @@ class PubServer(BaseHTTPRequestHandler):
accessKeys = \ accessKeys = \
self.server.keyShortcuts[nickname] self.server.keyShortcuts[nickname]
sharedItemsFederatedDomains = \
self.server.sharedItemsFederatedDomains
msg = htmlInbox(self.server.cssCache, msg = htmlInbox(self.server.cssCache,
defaultTimeline, defaultTimeline,
recentPostsCache, recentPostsCache,
@ -8109,7 +8115,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.allowLocalNetworkAccess, self.server.allowLocalNetworkAccess,
self.server.textModeBanner, self.server.textModeBanner,
accessKeys, accessKeys,
self.server.systemLanguage) self.server.systemLanguage,
sharedItemsFederatedDomains)
if GETstartTime: if GETstartTime:
self._benchmarkGETtimings(GETstartTime, GETtimings, self._benchmarkGETtimings(GETstartTime, GETtimings,
'show status done', 'show status done',
@ -8213,6 +8220,8 @@ class PubServer(BaseHTTPRequestHandler):
accessKeys = \ accessKeys = \
self.server.keyShortcuts[nickname] self.server.keyShortcuts[nickname]
sharedItemsFederatedDomains = \
self.server.sharedItemsFederatedDomains
msg = \ msg = \
htmlInboxDMs(self.server.cssCache, htmlInboxDMs(self.server.cssCache,
self.server.defaultTimeline, self.server.defaultTimeline,
@ -8246,7 +8255,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.allowLocalNetworkAccess, self.server.allowLocalNetworkAccess,
self.server.textModeBanner, self.server.textModeBanner,
accessKeys, accessKeys,
self.server.systemLanguage) self.server.systemLanguage,
sharedItemsFederatedDomains)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -8343,6 +8353,8 @@ class PubServer(BaseHTTPRequestHandler):
accessKeys = \ accessKeys = \
self.server.keyShortcuts[nickname] self.server.keyShortcuts[nickname]
sharedItemsFederatedDomains = \
self.server.sharedItemsFederatedDomains
msg = \ msg = \
htmlInboxReplies(self.server.cssCache, htmlInboxReplies(self.server.cssCache,
self.server.defaultTimeline, self.server.defaultTimeline,
@ -8376,7 +8388,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.allowLocalNetworkAccess, self.server.allowLocalNetworkAccess,
self.server.textModeBanner, self.server.textModeBanner,
accessKeys, accessKeys,
self.server.systemLanguage) self.server.systemLanguage,
sharedItemsFederatedDomains)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -8507,7 +8520,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.allowLocalNetworkAccess, self.server.allowLocalNetworkAccess,
self.server.textModeBanner, self.server.textModeBanner,
accessKeys, accessKeys,
self.server.systemLanguage) self.server.systemLanguage,
self.server.sharedItemsFederatedDomains)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -8638,7 +8652,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.allowLocalNetworkAccess, self.server.allowLocalNetworkAccess,
self.server.textModeBanner, self.server.textModeBanner,
accessKeys, accessKeys,
self.server.systemLanguage) self.server.systemLanguage,
self.server.sharedItemsFederatedDomains)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -8778,7 +8793,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.allowLocalNetworkAccess, self.server.allowLocalNetworkAccess,
self.server.textModeBanner, self.server.textModeBanner,
accessKeys, accessKeys,
self.server.systemLanguage) self.server.systemLanguage,
self.server.sharedItemsFederatedDomains)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -8880,6 +8896,8 @@ class PubServer(BaseHTTPRequestHandler):
accessKeys = \ accessKeys = \
self.server.keyShortcuts[nickname] self.server.keyShortcuts[nickname]
sharedItemsFederatedDomains = \
self.server.sharedItemsFederatedDomains
msg = \ msg = \
htmlInboxFeatures(self.server.cssCache, htmlInboxFeatures(self.server.cssCache,
self.server.defaultTimeline, self.server.defaultTimeline,
@ -8914,7 +8932,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.allowLocalNetworkAccess, self.server.allowLocalNetworkAccess,
self.server.textModeBanner, self.server.textModeBanner,
accessKeys, accessKeys,
self.server.systemLanguage) self.server.systemLanguage,
sharedItemsFederatedDomains)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -9011,7 +9030,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.allowLocalNetworkAccess, self.server.allowLocalNetworkAccess,
self.server.textModeBanner, self.server.textModeBanner,
accessKeys, accessKeys,
self.server.systemLanguage) self.server.systemLanguage,
self.server.sharedItemsFederatedDomains)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -9091,6 +9111,8 @@ class PubServer(BaseHTTPRequestHandler):
accessKeys = \ accessKeys = \
self.server.keyShortcuts[nickname] self.server.keyShortcuts[nickname]
sharedItemsFederatedDomains = \
self.server.sharedItemsFederatedDomains
msg = \ msg = \
htmlBookmarks(self.server.cssCache, htmlBookmarks(self.server.cssCache,
self.server.defaultTimeline, self.server.defaultTimeline,
@ -9125,7 +9147,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.allowLocalNetworkAccess, self.server.allowLocalNetworkAccess,
self.server.textModeBanner, self.server.textModeBanner,
accessKeys, accessKeys,
self.server.systemLanguage) self.server.systemLanguage,
sharedItemsFederatedDomains)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -9252,7 +9275,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.allowLocalNetworkAccess, self.server.allowLocalNetworkAccess,
self.server.textModeBanner, self.server.textModeBanner,
accessKeys, accessKeys,
self.server.systemLanguage) self.server.systemLanguage,
self.server.sharedItemsFederatedDomains)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -9335,6 +9359,8 @@ class PubServer(BaseHTTPRequestHandler):
accessKeys = \ accessKeys = \
self.server.keyShortcuts[nickname] self.server.keyShortcuts[nickname]
sharedItemsFederatedDomains = \
self.server.sharedItemsFederatedDomains
msg = \ msg = \
htmlModeration(self.server.cssCache, htmlModeration(self.server.cssCache,
self.server.defaultTimeline, self.server.defaultTimeline,
@ -9368,7 +9394,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.allowLocalNetworkAccess, self.server.allowLocalNetworkAccess,
self.server.textModeBanner, self.server.textModeBanner,
accessKeys, accessKeys,
self.server.systemLanguage) self.server.systemLanguage,
sharedItemsFederatedDomains)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -9485,6 +9512,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.debug, self.server.debug,
accessKeys, city, accessKeys, city,
self.server.systemLanguage, self.server.systemLanguage,
self.server.sharedItemsFederatedDomains,
shares, shares,
pageNumber, sharesPerPage) pageNumber, sharesPerPage)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
@ -9599,6 +9627,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.debug, self.server.debug,
accessKeys, city, accessKeys, city,
self.server.systemLanguage, self.server.systemLanguage,
self.server.sharedItemsFederatedDomains,
following, following,
pageNumber, pageNumber,
followsPerPage).encode('utf-8') followsPerPage).encode('utf-8')
@ -9713,6 +9742,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.debug, self.server.debug,
accessKeys, city, accessKeys, city,
self.server.systemLanguage, self.server.systemLanguage,
self.server.sharedItemsFederatedDomains,
followers, followers,
pageNumber, pageNumber,
followsPerPage).encode('utf-8') followsPerPage).encode('utf-8')
@ -9850,6 +9880,7 @@ class PubServer(BaseHTTPRequestHandler):
self.server.debug, self.server.debug,
accessKeys, city, accessKeys, city,
self.server.systemLanguage, self.server.systemLanguage,
self.server.sharedItemsFederatedDomains,
None, None).encode('utf-8') None, None).encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
@ -11901,6 +11932,8 @@ class PubServer(BaseHTTPRequestHandler):
'/users/' + nickname + '/' + self.server.defaultTimeline '/users/' + nickname + '/' + self.server.defaultTimeline
iconsAsButtons = self.server.iconsAsButtons iconsAsButtons = self.server.iconsAsButtons
defaultTimeline = self.server.defaultTimeline defaultTimeline = self.server.defaultTimeline
sharedItemsDomains = \
self.server.sharedItemsFederatedDomains
msg = htmlLinksMobile(self.server.cssCache, msg = htmlLinksMobile(self.server.cssCache,
self.server.baseDir, nickname, self.server.baseDir, nickname,
self.server.domainFull, self.server.domainFull,
@ -11912,7 +11945,8 @@ class PubServer(BaseHTTPRequestHandler):
iconsAsButtons, iconsAsButtons,
defaultTimeline, defaultTimeline,
self.server.themeName, self.server.themeName,
accessKeys).encode('utf-8') accessKeys,
sharedItemsDomains).encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, cookie, callingDomain) self._set_headers('text/html', msglen, cookie, callingDomain)
self._write(msg) self._write(msg)

View File

@ -32,15 +32,16 @@ def _getLeftColumnShares(baseDir: str,
httpPrefix: str, domainFull: str, httpPrefix: str, domainFull: str,
nickname: str, nickname: str,
maxSharesInLeftColumn: int, maxSharesInLeftColumn: int,
translate: {}) -> []: translate: {},
sharedItemsFederatedDomains: []) -> []:
"""get any shares and turn them into the left column links format """get any shares and turn them into the left column links format
""" """
pageNumber = 1 pageNumber = 1
actor = httpPrefix + '://' + domainFull + '/users/' + nickname actor = httpPrefix + '://' + domainFull + '/users/' + nickname
sharesJson, lastPage = \ sharesJson, lastPage = \
sharesTimelineJson(actor, pageNumber, sharesTimelineJson(actor, pageNumber, maxSharesInLeftColumn,
maxSharesInLeftColumn, baseDir, maxSharesInLeftColumn,
baseDir, maxSharesInLeftColumn) sharedItemsFederatedDomains)
if not sharesJson: if not sharesJson:
return [] return []
@ -69,7 +70,8 @@ def getLeftColumnContent(baseDir: str, nickname: str, domainFull: str,
showBackButton: bool, timelinePath: str, showBackButton: bool, timelinePath: str,
rssIconAtTop: bool, showHeaderImage: bool, rssIconAtTop: bool, showHeaderImage: bool,
frontPage: bool, theme: str, frontPage: bool, theme: str,
accessKeys: {}) -> str: accessKeys: {},
sharedItemsFederatedDomains: []) -> str:
"""Returns html content for the left column """Returns html content for the left column
""" """
htmlStr = '' htmlStr = ''
@ -159,7 +161,8 @@ def getLeftColumnContent(baseDir: str, nickname: str, domainFull: str,
sharesList = \ sharesList = \
_getLeftColumnShares(baseDir, _getLeftColumnShares(baseDir,
httpPrefix, domainFull, nickname, httpPrefix, domainFull, nickname,
maxSharesInLeftColumn, translate) maxSharesInLeftColumn, translate,
sharedItemsFederatedDomains)
if linksList and sharesList: if linksList and sharesList:
linksList = sharesList + linksList linksList = sharesList + linksList
@ -272,7 +275,8 @@ def htmlLinksMobile(cssCache: {}, baseDir: str,
rssIconAtTop: bool, rssIconAtTop: bool,
iconsAsButtons: bool, iconsAsButtons: bool,
defaultTimeline: str, defaultTimeline: str,
theme: str, accessKeys: {}) -> str: theme: str, accessKeys: {},
sharedItemsFederatedDomains: []) -> str:
"""Show the left column links within mobile view """Show the left column links within mobile view
""" """
htmlStr = '' htmlStr = ''
@ -314,7 +318,8 @@ def htmlLinksMobile(cssCache: {}, baseDir: str,
editor, editor,
False, timelinePath, False, timelinePath,
rssIconAtTop, False, False, rssIconAtTop, False, False,
theme, accessKeys) theme, accessKeys,
sharedItemsFederatedDomains)
else: else:
if editor: if editor:
htmlStr += '<br><br><br>\n<center>\n ' htmlStr += '<br><br><br>\n<center>\n '

View File

@ -99,6 +99,7 @@ def htmlFrontScreen(rssIconAtTop: bool,
allowLocalNetworkAccess: bool, allowLocalNetworkAccess: bool,
accessKeys: {}, accessKeys: {},
systemLanguage: str, systemLanguage: str,
sharedItemsFederatedDomains: [],
extraJson: {} = None, extraJson: {} = None,
pageNumber: int = None, pageNumber: int = None,
maxItemsPerPage: int = None) -> str: maxItemsPerPage: int = None) -> str:
@ -143,7 +144,8 @@ def htmlFrontScreen(rssIconAtTop: bool,
getLeftColumnContent(baseDir, 'news', domainFull, getLeftColumnContent(baseDir, 'news', domainFull,
httpPrefix, translate, httpPrefix, translate,
False, False, None, rssIconAtTop, True, False, False, None, rssIconAtTop, True,
True, theme, accessKeys) True, theme, accessKeys,
sharedItemsFederatedDomains)
profileHeaderStr += \ profileHeaderStr += \
' </td>\n' + \ ' </td>\n' + \
' <td valign="top" class="col-center">\n' ' <td valign="top" class="col-center">\n'

View File

@ -47,7 +47,8 @@ def htmlModeration(cssCache: {}, defaultTimeline: str,
theme: str, peertubeInstances: [], theme: str, peertubeInstances: [],
allowLocalNetworkAccess: bool, allowLocalNetworkAccess: bool,
textModeBanner: str, textModeBanner: str,
accessKeys: {}, systemLanguage: str) -> str: accessKeys: {}, systemLanguage: str,
sharedItemsFederatedDomains: []) -> str:
"""Show the moderation feed as html """Show the moderation feed as html
This is what you see when selecting the "mod" timeline This is what you see when selecting the "mod" timeline
""" """
@ -63,7 +64,8 @@ def htmlModeration(cssCache: {}, defaultTimeline: str,
iconsAsButtons, rssIconAtTop, publishButtonAtTop, iconsAsButtons, rssIconAtTop, publishButtonAtTop,
authorized, moderationActionStr, theme, authorized, moderationActionStr, theme,
peertubeInstances, allowLocalNetworkAccess, peertubeInstances, allowLocalNetworkAccess,
textModeBanner, accessKeys, systemLanguage) textModeBanner, accessKeys, systemLanguage,
sharedItemsFederatedDomains)
def htmlAccountInfo(cssCache: {}, translate: {}, def htmlAccountInfo(cssCache: {}, translate: {},

View File

@ -455,6 +455,7 @@ def htmlProfile(rssIconAtTop: bool,
textModeBanner: str, textModeBanner: str,
debug: bool, accessKeys: {}, city: str, debug: bool, accessKeys: {}, city: str,
systemLanguage: str, systemLanguage: str,
sharedItemsFederatedDomains: [],
extraJson: {} = None, pageNumber: int = None, extraJson: {} = None, pageNumber: int = None,
maxItemsPerPage: int = None) -> str: maxItemsPerPage: int = None) -> str:
"""Show the profile page as html """Show the profile page as html
@ -476,6 +477,7 @@ def htmlProfile(rssIconAtTop: bool,
newswire, theme, extraJson, newswire, theme, extraJson,
allowLocalNetworkAccess, accessKeys, allowLocalNetworkAccess, accessKeys,
systemLanguage, systemLanguage,
sharedItemsFederatedDomains,
pageNumber, maxItemsPerPage) pageNumber, maxItemsPerPage)
domain, port = getDomainFromActor(profileJson['id']) domain, port = getDomainFromActor(profileJson['id'])

View File

@ -316,6 +316,8 @@ def htmlSearchSharedItems(cssCache: {}, translate: {},
if currPage <= pageNumber and os.path.isdir(catalogsDir): if currPage <= pageNumber and os.path.isdir(catalogsDir):
for subdir, dirs, files in os.walk(catalogsDir): for subdir, dirs, files in os.walk(catalogsDir):
for f in files: for f in files:
if '#' in f:
continue
if not f.endswith('.shares.json'): if not f.endswith('.shares.json'):
continue continue
federatedDomain = f.split('.')[0] federatedDomain = f.split('.')[0]

View File

@ -359,7 +359,8 @@ def htmlTimeline(cssCache: {}, defaultTimeline: str,
peertubeInstances: [], peertubeInstances: [],
allowLocalNetworkAccess: bool, allowLocalNetworkAccess: bool,
textModeBanner: str, textModeBanner: str,
accessKeys: {}, systemLanguage: str) -> str: accessKeys: {}, systemLanguage: str,
sharedItemsFederatedDomains: []) -> str:
"""Show the timeline as html """Show the timeline as html
""" """
enableTimingLog = False enableTimingLog = False
@ -618,7 +619,8 @@ def htmlTimeline(cssCache: {}, defaultTimeline: str,
getLeftColumnContent(baseDir, nickname, domainFull, getLeftColumnContent(baseDir, nickname, domainFull,
httpPrefix, translate, httpPrefix, translate,
editor, False, None, rssIconAtTop, editor, False, None, rssIconAtTop,
True, False, theme, accessKeys) True, False, theme, accessKeys,
sharedItemsFederatedDomains)
tlStr += ' <td valign="top" class="col-left" ' + \ tlStr += ' <td valign="top" class="col-left" ' + \
'id="links" tabindex="-1">' + \ 'id="links" tabindex="-1">' + \
leftColumnStr + ' </td>\n' leftColumnStr + ' </td>\n'
@ -655,7 +657,8 @@ def htmlTimeline(cssCache: {}, defaultTimeline: str,
return (tlStr + return (tlStr +
_htmlSharesTimeline(translate, pageNumber, itemsPerPage, _htmlSharesTimeline(translate, pageNumber, itemsPerPage,
baseDir, actor, nickname, domain, port, baseDir, actor, nickname, domain, port,
maxSharesPerAccount, httpPrefix) + maxSharesPerAccount, httpPrefix,
sharedItemsFederatedDomains) +
htmlFooter()) htmlFooter())
_logTimelineTiming(enableTimingLog, timelineStartTime, boxName, '7') _logTimelineTiming(enableTimingLog, timelineStartTime, boxName, '7')
@ -860,12 +863,14 @@ def htmlIndividualShare(actor: str, item: {}, translate: {},
def _htmlSharesTimeline(translate: {}, pageNumber: int, itemsPerPage: int, def _htmlSharesTimeline(translate: {}, pageNumber: int, itemsPerPage: int,
baseDir: str, actor: str, baseDir: str, actor: str,
nickname: str, domain: str, port: int, nickname: str, domain: str, port: int,
maxSharesPerAccount: int, httpPrefix: str) -> str: maxSharesPerAccount: int, httpPrefix: str,
sharedItemsFederatedDomains: []) -> str:
"""Show shared items timeline as html """Show shared items timeline as html
""" """
sharesJson, lastPage = \ sharesJson, lastPage = \
sharesTimelineJson(actor, pageNumber, itemsPerPage, sharesTimelineJson(actor, pageNumber, itemsPerPage,
baseDir, maxSharesPerAccount) baseDir, maxSharesPerAccount,
sharedItemsFederatedDomains)
domainFull = getFullDomain(domain, port) domainFull = getFullDomain(domain, port)
actor = httpPrefix + '://' + domainFull + '/users/' + nickname actor = httpPrefix + '://' + domainFull + '/users/' + nickname
timelineStr = '' timelineStr = ''
@ -931,7 +936,8 @@ def htmlShares(cssCache: {}, defaultTimeline: str,
peertubeInstances: [], peertubeInstances: [],
allowLocalNetworkAccess: bool, allowLocalNetworkAccess: bool,
textModeBanner: str, textModeBanner: str,
accessKeys: {}, systemLanguage: str) -> str: accessKeys: {}, systemLanguage: str,
sharedItemsFederatedDomains: []) -> str:
"""Show the shares timeline as html """Show the shares timeline as html
""" """
manuallyApproveFollowers = \ manuallyApproveFollowers = \
@ -953,7 +959,8 @@ def htmlShares(cssCache: {}, defaultTimeline: str,
iconsAsButtons, rssIconAtTop, publishButtonAtTop, iconsAsButtons, rssIconAtTop, publishButtonAtTop,
authorized, None, theme, peertubeInstances, authorized, None, theme, peertubeInstances,
allowLocalNetworkAccess, textModeBanner, allowLocalNetworkAccess, textModeBanner,
accessKeys, systemLanguage) accessKeys, systemLanguage,
sharedItemsFederatedDomains)
def htmlInbox(cssCache: {}, defaultTimeline: str, def htmlInbox(cssCache: {}, defaultTimeline: str,
@ -976,7 +983,8 @@ def htmlInbox(cssCache: {}, defaultTimeline: str,
peertubeInstances: [], peertubeInstances: [],
allowLocalNetworkAccess: bool, allowLocalNetworkAccess: bool,
textModeBanner: str, textModeBanner: str,
accessKeys: {}, systemLanguage: str) -> str: accessKeys: {}, systemLanguage: str,
sharedItemsFederatedDomains: []) -> str:
"""Show the inbox as html """Show the inbox as html
""" """
manuallyApproveFollowers = \ manuallyApproveFollowers = \
@ -998,7 +1006,8 @@ def htmlInbox(cssCache: {}, defaultTimeline: str,
iconsAsButtons, rssIconAtTop, publishButtonAtTop, iconsAsButtons, rssIconAtTop, publishButtonAtTop,
authorized, None, theme, peertubeInstances, authorized, None, theme, peertubeInstances,
allowLocalNetworkAccess, textModeBanner, allowLocalNetworkAccess, textModeBanner,
accessKeys, systemLanguage) accessKeys, systemLanguage,
sharedItemsFederatedDomains)
def htmlBookmarks(cssCache: {}, defaultTimeline: str, def htmlBookmarks(cssCache: {}, defaultTimeline: str,
@ -1021,7 +1030,8 @@ def htmlBookmarks(cssCache: {}, defaultTimeline: str,
peertubeInstances: [], peertubeInstances: [],
allowLocalNetworkAccess: bool, allowLocalNetworkAccess: bool,
textModeBanner: str, textModeBanner: str,
accessKeys: {}, systemLanguage: str) -> str: accessKeys: {}, systemLanguage: str,
sharedItemsFederatedDomains: []) -> str:
"""Show the bookmarks as html """Show the bookmarks as html
""" """
manuallyApproveFollowers = \ manuallyApproveFollowers = \
@ -1043,7 +1053,8 @@ def htmlBookmarks(cssCache: {}, defaultTimeline: str,
iconsAsButtons, rssIconAtTop, publishButtonAtTop, iconsAsButtons, rssIconAtTop, publishButtonAtTop,
authorized, None, theme, peertubeInstances, authorized, None, theme, peertubeInstances,
allowLocalNetworkAccess, textModeBanner, allowLocalNetworkAccess, textModeBanner,
accessKeys, systemLanguage) accessKeys, systemLanguage,
sharedItemsFederatedDomains)
def htmlInboxDMs(cssCache: {}, defaultTimeline: str, def htmlInboxDMs(cssCache: {}, defaultTimeline: str,
@ -1066,7 +1077,8 @@ def htmlInboxDMs(cssCache: {}, defaultTimeline: str,
peertubeInstances: [], peertubeInstances: [],
allowLocalNetworkAccess: bool, allowLocalNetworkAccess: bool,
textModeBanner: str, textModeBanner: str,
accessKeys: {}, systemLanguage: str) -> str: accessKeys: {}, systemLanguage: str,
sharedItemsFederatedDomains: []) -> str:
"""Show the DM timeline as html """Show the DM timeline as html
""" """
return htmlTimeline(cssCache, defaultTimeline, return htmlTimeline(cssCache, defaultTimeline,
@ -1083,7 +1095,8 @@ def htmlInboxDMs(cssCache: {}, defaultTimeline: str,
iconsAsButtons, rssIconAtTop, publishButtonAtTop, iconsAsButtons, rssIconAtTop, publishButtonAtTop,
authorized, None, theme, peertubeInstances, authorized, None, theme, peertubeInstances,
allowLocalNetworkAccess, textModeBanner, allowLocalNetworkAccess, textModeBanner,
accessKeys, systemLanguage) accessKeys, systemLanguage,
sharedItemsFederatedDomains)
def htmlInboxReplies(cssCache: {}, defaultTimeline: str, def htmlInboxReplies(cssCache: {}, defaultTimeline: str,
@ -1106,7 +1119,8 @@ def htmlInboxReplies(cssCache: {}, defaultTimeline: str,
peertubeInstances: [], peertubeInstances: [],
allowLocalNetworkAccess: bool, allowLocalNetworkAccess: bool,
textModeBanner: str, textModeBanner: str,
accessKeys: {}, systemLanguage: str) -> str: accessKeys: {}, systemLanguage: str,
sharedItemsFederatedDomains: []) -> str:
"""Show the replies timeline as html """Show the replies timeline as html
""" """
return htmlTimeline(cssCache, defaultTimeline, return htmlTimeline(cssCache, defaultTimeline,
@ -1124,7 +1138,8 @@ def htmlInboxReplies(cssCache: {}, defaultTimeline: str,
iconsAsButtons, rssIconAtTop, publishButtonAtTop, iconsAsButtons, rssIconAtTop, publishButtonAtTop,
authorized, None, theme, peertubeInstances, authorized, None, theme, peertubeInstances,
allowLocalNetworkAccess, textModeBanner, allowLocalNetworkAccess, textModeBanner,
accessKeys, systemLanguage) accessKeys, systemLanguage,
sharedItemsFederatedDomains)
def htmlInboxMedia(cssCache: {}, defaultTimeline: str, def htmlInboxMedia(cssCache: {}, defaultTimeline: str,
@ -1147,7 +1162,8 @@ def htmlInboxMedia(cssCache: {}, defaultTimeline: str,
peertubeInstances: [], peertubeInstances: [],
allowLocalNetworkAccess: bool, allowLocalNetworkAccess: bool,
textModeBanner: str, textModeBanner: str,
accessKeys: {}, systemLanguage: str) -> str: accessKeys: {}, systemLanguage: str,
sharedItemsFederatedDomains: []) -> str:
"""Show the media timeline as html """Show the media timeline as html
""" """
return htmlTimeline(cssCache, defaultTimeline, return htmlTimeline(cssCache, defaultTimeline,
@ -1165,7 +1181,8 @@ def htmlInboxMedia(cssCache: {}, defaultTimeline: str,
iconsAsButtons, rssIconAtTop, publishButtonAtTop, iconsAsButtons, rssIconAtTop, publishButtonAtTop,
authorized, None, theme, peertubeInstances, authorized, None, theme, peertubeInstances,
allowLocalNetworkAccess, textModeBanner, allowLocalNetworkAccess, textModeBanner,
accessKeys, systemLanguage) accessKeys, systemLanguage,
sharedItemsFederatedDomains)
def htmlInboxBlogs(cssCache: {}, defaultTimeline: str, def htmlInboxBlogs(cssCache: {}, defaultTimeline: str,
@ -1188,7 +1205,8 @@ def htmlInboxBlogs(cssCache: {}, defaultTimeline: str,
peertubeInstances: [], peertubeInstances: [],
allowLocalNetworkAccess: bool, allowLocalNetworkAccess: bool,
textModeBanner: str, textModeBanner: str,
accessKeys: {}, systemLanguage: str) -> str: accessKeys: {}, systemLanguage: str,
sharedItemsFederatedDomains: []) -> str:
"""Show the blogs timeline as html """Show the blogs timeline as html
""" """
return htmlTimeline(cssCache, defaultTimeline, return htmlTimeline(cssCache, defaultTimeline,
@ -1206,7 +1224,8 @@ def htmlInboxBlogs(cssCache: {}, defaultTimeline: str,
iconsAsButtons, rssIconAtTop, publishButtonAtTop, iconsAsButtons, rssIconAtTop, publishButtonAtTop,
authorized, None, theme, peertubeInstances, authorized, None, theme, peertubeInstances,
allowLocalNetworkAccess, textModeBanner, allowLocalNetworkAccess, textModeBanner,
accessKeys, systemLanguage) accessKeys, systemLanguage,
sharedItemsFederatedDomains)
def htmlInboxFeatures(cssCache: {}, defaultTimeline: str, def htmlInboxFeatures(cssCache: {}, defaultTimeline: str,
@ -1230,7 +1249,8 @@ def htmlInboxFeatures(cssCache: {}, defaultTimeline: str,
peertubeInstances: [], peertubeInstances: [],
allowLocalNetworkAccess: bool, allowLocalNetworkAccess: bool,
textModeBanner: str, textModeBanner: str,
accessKeys: {}, systemLanguage: str) -> str: accessKeys: {}, systemLanguage: str,
sharedItemsFederatedDomains: []) -> str:
"""Show the features timeline as html """Show the features timeline as html
""" """
return htmlTimeline(cssCache, defaultTimeline, return htmlTimeline(cssCache, defaultTimeline,
@ -1248,7 +1268,8 @@ def htmlInboxFeatures(cssCache: {}, defaultTimeline: str,
iconsAsButtons, rssIconAtTop, publishButtonAtTop, iconsAsButtons, rssIconAtTop, publishButtonAtTop,
authorized, None, theme, peertubeInstances, authorized, None, theme, peertubeInstances,
allowLocalNetworkAccess, textModeBanner, allowLocalNetworkAccess, textModeBanner,
accessKeys, systemLanguage) accessKeys, systemLanguage,
sharedItemsFederatedDomains)
def htmlInboxNews(cssCache: {}, defaultTimeline: str, def htmlInboxNews(cssCache: {}, defaultTimeline: str,
@ -1271,7 +1292,8 @@ def htmlInboxNews(cssCache: {}, defaultTimeline: str,
peertubeInstances: [], peertubeInstances: [],
allowLocalNetworkAccess: bool, allowLocalNetworkAccess: bool,
textModeBanner: str, textModeBanner: str,
accessKeys: {}, systemLanguage: str) -> str: accessKeys: {}, systemLanguage: str,
sharedItemsFederatedDomains: []) -> str:
"""Show the news timeline as html """Show the news timeline as html
""" """
return htmlTimeline(cssCache, defaultTimeline, return htmlTimeline(cssCache, defaultTimeline,
@ -1289,7 +1311,8 @@ def htmlInboxNews(cssCache: {}, defaultTimeline: str,
iconsAsButtons, rssIconAtTop, publishButtonAtTop, iconsAsButtons, rssIconAtTop, publishButtonAtTop,
authorized, None, theme, peertubeInstances, authorized, None, theme, peertubeInstances,
allowLocalNetworkAccess, textModeBanner, allowLocalNetworkAccess, textModeBanner,
accessKeys, systemLanguage) accessKeys, systemLanguage,
sharedItemsFederatedDomains)
def htmlOutbox(cssCache: {}, defaultTimeline: str, def htmlOutbox(cssCache: {}, defaultTimeline: str,
@ -1312,7 +1335,8 @@ def htmlOutbox(cssCache: {}, defaultTimeline: str,
peertubeInstances: [], peertubeInstances: [],
allowLocalNetworkAccess: bool, allowLocalNetworkAccess: bool,
textModeBanner: str, textModeBanner: str,
accessKeys: {}, systemLanguage: str) -> str: accessKeys: {}, systemLanguage: str,
sharedItemsFederatedDomains: []) -> str:
"""Show the Outbox as html """Show the Outbox as html
""" """
manuallyApproveFollowers = \ manuallyApproveFollowers = \
@ -1331,4 +1355,5 @@ def htmlOutbox(cssCache: {}, defaultTimeline: str,
iconsAsButtons, rssIconAtTop, publishButtonAtTop, iconsAsButtons, rssIconAtTop, publishButtonAtTop,
authorized, None, theme, peertubeInstances, authorized, None, theme, peertubeInstances,
allowLocalNetworkAccess, textModeBanner, allowLocalNetworkAccess, textModeBanner,
accessKeys, systemLanguage) accessKeys, systemLanguage,
sharedItemsFederatedDomains)

View File

@ -10,6 +10,7 @@ __module_group__ = "Web Interface"
import os import os
from collections import OrderedDict from collections import OrderedDict
from session import getJson from session import getJson
from utils import isAccountDir
from utils import removeHtml from utils import removeHtml
from utils import getImageExtensions from utils import getImageExtensions
from utils import getProtocolPrefixes from utils import getProtocolPrefixes
@ -331,7 +332,8 @@ def scheduledPostsExist(baseDir: str, nickname: str, domain: str) -> bool:
def sharesTimelineJson(actor: str, pageNumber: int, itemsPerPage: int, def sharesTimelineJson(actor: str, pageNumber: int, itemsPerPage: int,
baseDir: str, maxSharesPerAccount: int) -> ({}, bool): baseDir: str, maxSharesPerAccount: int,
sharedItemsFederatedDomains: []) -> ({}, bool):
"""Get a page on the shared items timeline as json """Get a page on the shared items timeline as json
maxSharesPerAccount helps to avoid one person dominating the timeline maxSharesPerAccount helps to avoid one person dominating the timeline
by sharing a large number of things by sharing a large number of things
@ -339,7 +341,7 @@ def sharesTimelineJson(actor: str, pageNumber: int, itemsPerPage: int,
allSharesJson = {} allSharesJson = {}
for subdir, dirs, files in os.walk(baseDir + '/accounts'): for subdir, dirs, files in os.walk(baseDir + '/accounts'):
for handle in dirs: for handle in dirs:
if '@' not in handle: if not isAccountDir(handle):
continue continue
accountDir = baseDir + '/accounts/' + handle accountDir = baseDir + '/accounts/' + handle
sharesFilename = accountDir + '/shares.json' sharesFilename = accountDir + '/shares.json'
@ -360,6 +362,30 @@ def sharesTimelineJson(actor: str, pageNumber: int, itemsPerPage: int,
if ctr >= maxSharesPerAccount: if ctr >= maxSharesPerAccount:
break break
break break
catalogsDir = baseDir + '/cache/catalogs'
if os.path.isdir(catalogsDir):
for subdir, dirs, files in os.walk(catalogsDir):
for f in files:
if '#' in f:
continue
if not f.endswith('.shares.json'):
continue
federatedDomain = f.split('.')[0]
if federatedDomain not in sharedItemsFederatedDomains:
continue
sharesFilename = catalogsDir + '/' + f
sharesJson = loadJson(sharesFilename)
if not sharesJson:
continue
ctr = 0
for itemID, item in sharesJson.items():
# assign owner to the item
item['actor'] = itemID.split('/shareditems/')[0]
allSharesJson[str(item['published'])] = item
ctr += 1
if ctr >= maxSharesPerAccount:
break
break
# sort the shared items in descending order of publication date # sort the shared items in descending order of publication date
sharesJson = OrderedDict(sorted(allSharesJson.items(), reverse=True)) sharesJson = OrderedDict(sorted(allSharesJson.items(), reverse=True))
lastPage = False lastPage = False