Endpoint for TTS of posts arriving in the inbox

merge-requests/30/head
Bob Mottram 2021-03-01 15:24:12 +00:00
parent 6b3feec7aa
commit 58ab2b05d3
2 changed files with 67 additions and 0 deletions

View File

@ -5242,6 +5242,28 @@ class PubServer(BaseHTTPRequestHandler):
print('favicon not sent: ' + callingDomain) print('favicon not sent: ' + callingDomain)
self._404() self._404()
def _getSpeaker(self, callingDomain: str, path: str,
baseDir: str, domain: str, debug: bool) -> None:
"""Returns the speaker file used for TTS and
accessed via c2s
"""
nickname = path.split('/users/')[1]
if '/' in nickname:
nickname = nickname.split('/')[0]
speakerFilename = \
baseDir + '/accounts/' + nickname + '@' + domain + '/speaker.json'
if not os.path.isfile(speakerFilename):
self._404()
return
speakerJson = loadJson(speakerFilename)
msg = json.dumps(speakerJson,
ensure_ascii=False).encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
None, callingDomain)
self._write(msg)
def _getFonts(self, callingDomain: str, path: str, def _getFonts(self, callingDomain: str, path: str,
baseDir: str, debug: bool, baseDir: str, debug: bool,
GETstartTime, GETtimings: {}) -> None: GETstartTime, GETtimings: {}) -> None:
@ -10454,6 +10476,16 @@ class PubServer(BaseHTTPRequestHandler):
if '/users/' in self.path: if '/users/' in self.path:
usersInPath = True usersInPath = True
# authorized endpoint used for TTS of posts
# arriving in your inbox
if authorized and usersInPath and \
self.path.endswith('/speaker'):
self._getSpeaker(callingDomain, self.path,
self.server.baseDir,
self.server.domain,
self.server.debug)
return
# redirect to the welcome screen # redirect to the welcome screen
if htmlGET and authorized and usersInPath and \ if htmlGET and authorized and usersInPath and \
'/welcome' not in self.path: '/welcome' not in self.path:

View File

@ -11,6 +11,8 @@ import os
import datetime import datetime
import time import time
from linked_data_sig import verifyJsonSignature from linked_data_sig import verifyJsonSignature
from utils import getDisplayName
from utils import removeHtml
from utils import getConfigParam from utils import getConfigParam
from utils import hasUsersPath from utils import hasUsersPath
from utils import validPostDate from utils import validPostDate
@ -2134,6 +2136,36 @@ def _bounceDM(senderPostId: str, session, httpPrefix: str,
return True return True
def _updateSpeaker(baseDir: str, nickname: str, domain: str,
postJsonObject: {}, personCache: {}) -> None:
""" Generates a json file which can be used for TTS announcement
of incoming inbox posts
"""
if not postJsonObject.get('object'):
return
if not isinstance(postJsonObject['object'], dict):
return
if not postJsonObject['object'].get('content'):
return
if not isinstance(postJsonObject['object']['content'], str):
return
speakerFilename = \
baseDir + '/accounts/' + nickname + '@' + domain + '/speaker.json'
content = removeHtml(postJsonObject['object']['content'])
summary = ''
if postJsonObject['object'].get('summary'):
if isinstance(postJsonObject['object']['summary'], str):
summary = postJsonObject['object']['summary']
speakerName = \
getDisplayName(baseDir, postJsonObject['actor'], personCache)
speakerJson = {
"name": speakerName,
"summary": summary,
"say": content
}
saveJson(speakerJson, speakerFilename)
def _inboxAfterInitial(recentPostsCache: {}, maxRecentPosts: int, def _inboxAfterInitial(recentPostsCache: {}, maxRecentPosts: int,
session, keyId: str, handle: str, messageJson: {}, session, keyId: str, handle: str, messageJson: {},
baseDir: str, httpPrefix: str, sendThreads: [], baseDir: str, httpPrefix: str, sendThreads: [],
@ -2468,6 +2500,9 @@ def _inboxAfterInitial(recentPostsCache: {}, maxRecentPosts: int,
destinationFilename, debug): destinationFilename, debug):
print('ERROR: unable to update ' + boxname + ' index') print('ERROR: unable to update ' + boxname + ' index')
else: else:
if boxname == 'inbox':
_updateSpeaker(baseDir, nickname, domain,
postJsonObject, personCache)
if not unitTest: if not unitTest:
if debug: if debug:
print('Saving inbox post as html to cache') print('Saving inbox post as html to cache')