Include federated shared items within shares timeline

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

View File

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

View File

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

View File

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

View File

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

View File

@ -316,6 +316,8 @@ def htmlSearchSharedItems(cssCache: {}, translate: {},
if currPage <= pageNumber and 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]

View File

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

View File

@ -10,6 +10,7 @@ __module_group__ = "Web Interface"
import os
from collections import OrderedDict
from session import getJson
from utils import isAccountDir
from utils import removeHtml
from utils import getImageExtensions
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,
baseDir: str, maxSharesPerAccount: int) -> ({}, bool):
baseDir: str, maxSharesPerAccount: int,
sharedItemsFederatedDomains: []) -> ({}, bool):
"""Get a page on the shared items timeline as json
maxSharesPerAccount helps to avoid one person dominating the timeline
by sharing a large number of things
@ -339,7 +341,7 @@ def sharesTimelineJson(actor: str, pageNumber: int, itemsPerPage: int,
allSharesJson = {}
for subdir, dirs, files in os.walk(baseDir + '/accounts'):
for handle in dirs:
if '@' not in handle:
if not isAccountDir(handle):
continue
accountDir = baseDir + '/accounts/' + handle
sharesFilename = accountDir + '/shares.json'
@ -360,6 +362,30 @@ def sharesTimelineJson(actor: str, pageNumber: int, itemsPerPage: int,
if ctr >= maxSharesPerAccount:
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
sharesJson = OrderedDict(sorted(allSharesJson.items(), reverse=True))
lastPage = False