Handle ssml files in outbox

merge-requests/30/head
Bob Mottram 2022-05-12 12:56:45 +01:00
parent 3bc6d13022
commit bdf61e0a60
5 changed files with 38 additions and 12 deletions

View File

@ -11086,9 +11086,14 @@ class PubServer(BaseHTTPRequestHandler):
if ssml_getreq: if ssml_getreq:
ssml_filename = \ ssml_filename = \
acct_dir(base_dir, nickname, domain) + '/postcache/' + \ acct_dir(base_dir, nickname, domain) + '/outbox/' + \
http_prefix + ':##' + domain_full + '#users#' + nickname + \ http_prefix + ':##' + domain_full + '#users#' + nickname + \
'#statuses#' + status_number + '.ssml' '#statuses#' + status_number + '.ssml'
if not os.path.isfile(ssml_filename):
ssml_filename = \
acct_dir(base_dir, nickname, domain) + '/postcache/' + \
http_prefix + ':##' + domain_full + '#users#' + \
nickname + '#statuses#' + status_number + '.ssml'
if not os.path.isfile(ssml_filename): if not os.path.isfile(ssml_filename):
self._404() self._404()
return True return True
@ -11425,9 +11430,14 @@ class PubServer(BaseHTTPRequestHandler):
if ssml_getreq: if ssml_getreq:
ssml_filename = \ ssml_filename = \
acct_dir(base_dir, nickname, domain) + '/postcache/' + \ acct_dir(base_dir, nickname, domain) + '/outbox/' + \
http_prefix + ':##' + domain_full + '#users#' + nickname + \ http_prefix + ':##' + domain_full + '#users#' + nickname + \
'#statuses#' + status_number + '.ssml' '#statuses#' + status_number + '.ssml'
if not os.path.isfile(ssml_filename):
ssml_filename = \
acct_dir(base_dir, nickname, domain) + '/postcache/' + \
http_prefix + ':##' + domain_full + '#users#' + \
nickname + '#statuses#' + status_number + '.ssml'
if not os.path.isfile(ssml_filename): if not os.path.isfile(ssml_filename):
self._404() self._404()
return True return True

View File

@ -2282,7 +2282,8 @@ def _receive_announce(recent_posts_cache: {},
nickname, domain, domain_full, nickname, domain, domain_full,
post_json_object, person_cache, post_json_object, person_cache,
translate, lookup_actor, translate, lookup_actor,
theme_name, system_language) theme_name, system_language,
'inbox')
try: try:
with open(post_filename + '.tts', 'w+') as ttsfile: with open(post_filename + '.tts', 'w+') as ttsfile:
ttsfile.write('\n') ttsfile.write('\n')
@ -4121,7 +4122,7 @@ def _inbox_after_initial(server, inbox_start_time,
nickname, domain, domain_full, nickname, domain, domain_full,
post_json_object, person_cache, post_json_object, person_cache,
translate, None, theme_name, translate, None, theme_name,
system_language) system_language, boxname)
fitness_performance(inbox_start_time, fitness_performance(inbox_start_time,
server.fitness, server.fitness,
'INBOX', 'update_speaker', 'INBOX', 'update_speaker',

View File

@ -302,7 +302,7 @@ def _speaker_endpoint_json(display_name: str, summary: str,
return speaker_json return speaker_json
def _ssml_header(system_language: str) -> str: def _ssml_header(system_language: str, box_name: str) -> str:
"""Returns a header for an SSML document """Returns a header for an SSML document
""" """
return '<?xml version="1.0"?>\n' + \ return '<?xml version="1.0"?>\n' + \
@ -313,14 +313,14 @@ def _ssml_header(system_language: str) -> str:
' version="1.1">\n' + \ ' version="1.1">\n' + \
' <metadata>\n' + \ ' <metadata>\n' + \
' <dc:title xml:lang="' + system_language + '">' + \ ' <dc:title xml:lang="' + system_language + '">' + \
'inbox</dc:title>\n' + \ box_name + '</dc:title>\n' + \
' </metadata>\n' ' </metadata>\n'
def _speaker_endpoint_ssml(display_name: str, summary: str, def _speaker_endpoint_ssml(display_name: str, summary: str,
content: str, image_description: str, content: str, image_description: str,
links: [], language: str, links: [], language: str,
gender: str) -> str: gender: str, box_name: str) -> str:
"""Returns an SSML endpoint for the TTS speaker """Returns an SSML endpoint for the TTS speaker
https://en.wikipedia.org/wiki/Speech_Synthesis_Markup_Language https://en.wikipedia.org/wiki/Speech_Synthesis_Markup_Language
https://www.w3.org/TR/speech-synthesis/ https://www.w3.org/TR/speech-synthesis/
@ -342,7 +342,7 @@ def _speaker_endpoint_ssml(display_name: str, summary: str,
content = _add_ssm_lemphasis(content) content = _add_ssm_lemphasis(content)
voice_params = 'name="' + display_name + '" gender="' + gender + '"' voice_params = 'name="' + display_name + '" gender="' + gender + '"'
return _ssml_header(lang_short) + \ return _ssml_header(lang_short, box_name) + \
' <p>\n' + \ ' <p>\n' + \
' <s xml:lang="' + language + '">\n' + \ ' <s xml:lang="' + language + '">\n' + \
' <voice ' + voice_params + '>\n' + \ ' <voice ' + voice_params + '>\n' + \
@ -378,7 +378,7 @@ def get_ssml_box(base_dir: str, path: str,
speaker_json['imageDescription'], speaker_json['imageDescription'],
speaker_json['detectedLinks'], speaker_json['detectedLinks'],
system_language, system_language,
gender) gender, box_name)
def speakable_text(base_dir: str, content: str, translate: {}) -> (str, []): def speakable_text(base_dir: str, content: str, translate: {}) -> (str, []):
@ -544,7 +544,7 @@ def update_speaker(base_dir: str, http_prefix: str,
post_json_object: {}, person_cache: {}, post_json_object: {}, person_cache: {},
translate: {}, announcing_actor: str, translate: {}, announcing_actor: str,
theme_name: str, theme_name: str,
system_language: str) -> None: system_language: str, box_name: str) -> None:
""" Generates a json file which can be used for TTS announcement """ Generates a json file which can be used for TTS announcement
of incoming inbox posts of incoming inbox posts
""" """
@ -565,6 +565,9 @@ def update_speaker(base_dir: str, http_prefix: str,
if not cached_ssml_filename: if not cached_ssml_filename:
return return
cached_ssml_filename = cached_ssml_filename.replace('.html', '.ssml') cached_ssml_filename = cached_ssml_filename.replace('.html', '.ssml')
if box_name == 'outbox':
cached_ssml_filename = \
cached_ssml_filename.replace('/postcache/', '/outbox/')
gender = None gender = None
if speaker_json.get('gender'): if speaker_json.get('gender'):
gender = speaker_json['gender'] gender = speaker_json['gender']
@ -575,7 +578,7 @@ def update_speaker(base_dir: str, http_prefix: str,
speaker_json['imageDescription'], speaker_json['imageDescription'],
speaker_json['detectedLinks'], speaker_json['detectedLinks'],
system_language, system_language,
gender) gender, box_name)
try: try:
with open(cached_ssml_filename, 'w+') as fp_ssml: with open(cached_ssml_filename, 'w+') as fp_ssml:
fp_ssml.write(ssml_str) fp_ssml.write(ssml_str)

View File

@ -1744,6 +1744,7 @@ def delete_cached_html(base_dir: str, nickname: str, domain: str,
print('EX: delete_cached_html ' + print('EX: delete_cached_html ' +
'unable to delete cached post file ' + 'unable to delete cached post file ' +
str(cached_post_filename)) str(cached_post_filename))
cached_post_filename = cached_post_filename.replace('.html', '.ssml') cached_post_filename = cached_post_filename.replace('.html', '.ssml')
if os.path.isfile(cached_post_filename): if os.path.isfile(cached_post_filename):
try: try:
@ -1753,6 +1754,16 @@ def delete_cached_html(base_dir: str, nickname: str, domain: str,
'unable to delete cached ssml post file ' + 'unable to delete cached ssml post file ' +
str(cached_post_filename)) str(cached_post_filename))
cached_post_filename = \
cached_post_filename.replace('/postcache/', '/outbox/')
if os.path.isfile(cached_post_filename):
try:
os.remove(cached_post_filename)
except OSError:
print('EX: delete_cached_html ' +
'unable to delete cached outbox ssml post file ' +
str(cached_post_filename))
def _delete_hashtags_on_post(base_dir: str, post_json_object: {}) -> None: def _delete_hashtags_on_post(base_dir: str, post_json_object: {}) -> None:
"""Removes hashtags when a post is deleted """Removes hashtags when a post is deleted

View File

@ -1698,7 +1698,8 @@ def individual_post_as_html(signing_priv_key_pem: str,
nickname, domain, domain_full, nickname, domain, domain_full,
post_json_object, person_cache, post_json_object, person_cache,
translate, post_json_object['actor'], translate, post_json_object['actor'],
theme_name, system_language) theme_name, system_language,
box_name)
with open(announce_filename + '.tts', 'w+') as ttsfile: with open(announce_filename + '.tts', 'w+') as ttsfile:
ttsfile.write('\n') ttsfile.write('\n')