diff --git a/inbox.py b/inbox.py index d66615953..abca8ca0f 100644 --- a/inbox.py +++ b/inbox.py @@ -2282,7 +2282,7 @@ def _receive_announce(recent_posts_cache: {}, nickname, domain, domain_full, post_json_object, person_cache, translate, lookup_actor, - theme_name) + theme_name, system_language) try: with open(post_filename + '.tts', 'w+') as ttsfile: ttsfile.write('\n') @@ -4120,7 +4120,8 @@ def _inbox_after_initial(server, inbox_start_time, update_speaker(base_dir, http_prefix, nickname, domain, domain_full, post_json_object, person_cache, - translate, None, theme_name) + translate, None, theme_name, + system_language) fitness_performance(inbox_start_time, server.fitness, 'INBOX', 'update_speaker', diff --git a/speaker.py b/speaker.py index b35a2cd0c..c1f670e15 100644 --- a/speaker.py +++ b/speaker.py @@ -11,6 +11,7 @@ import os import html import random import urllib.parse +from utils import get_cached_post_filename from utils import remove_id_ending from utils import is_dm from utils import is_reply @@ -301,7 +302,7 @@ def _speaker_endpoint_json(display_name: str, summary: str, return speaker_json -def _ssm_lheader(system_language: str, instance_title: str) -> str: +def _ssml_header(system_language: str) -> str: """Returns a header for an SSML document """ return '\n' + \ @@ -312,14 +313,13 @@ def _ssm_lheader(system_language: str, instance_title: str) -> str: ' version="1.1">\n' + \ ' \n' + \ ' ' + \ - instance_title + ' inbox\n' + \ + 'inbox\n' + \ ' \n' def _speaker_endpoint_ssml(display_name: str, summary: str, content: str, image_description: str, links: [], language: str, - instance_title: str, gender: str) -> str: """Returns an SSML endpoint for the TTS speaker https://en.wikipedia.org/wiki/Speech_Synthesis_Markup_Language @@ -342,7 +342,7 @@ def _speaker_endpoint_ssml(display_name: str, summary: str, content = _add_ssm_lemphasis(content) voice_params = 'name="' + display_name + '" gender="' + gender + '"' - return _ssm_lheader(lang_short, instance_title) + \ + return _ssml_header(lang_short) + \ '

\n' + \ ' \n' + \ ' \n' + \ @@ -356,7 +356,6 @@ def _speaker_endpoint_ssml(display_name: str, summary: str, def get_ssml_box(base_dir: str, path: str, domain: str, system_language: str, - instance_title: str, box_name: str) -> str: """Returns SSML for the given timeline """ @@ -379,7 +378,7 @@ def get_ssml_box(base_dir: str, path: str, speaker_json['imageDescription'], speaker_json['detectedLinks'], system_language, - instance_title, gender) + gender) def speakable_text(base_dir: str, content: str, translate: {}) -> (str, []): @@ -544,7 +543,8 @@ def update_speaker(base_dir: str, http_prefix: str, nickname: str, domain: str, domain_full: str, post_json_object: {}, person_cache: {}, translate: {}, announcing_actor: str, - theme_name: str) -> None: + theme_name: str, + system_language: str) -> None: """ Generates a json file which can be used for TTS announcement of incoming inbox posts """ @@ -554,5 +554,30 @@ def update_speaker(base_dir: str, http_prefix: str, post_json_object, person_cache, translate, announcing_actor, theme_name) - speaker_filename = acct_dir(base_dir, nickname, domain) + '/speaker.json' + account_dir = acct_dir(base_dir, nickname, domain) + speaker_filename = account_dir + '/speaker.json' save_json(speaker_json, speaker_filename) + + # save the ssml + cached_ssml_filename = \ + get_cached_post_filename(base_dir, nickname, + domain, post_json_object) + if not cached_ssml_filename: + return + cached_ssml_filename = cached_ssml_filename.replace('.html', '.ssml') + gender = None + if speaker_json.get('gender'): + gender = speaker_json['gender'] + ssml_str = \ + _speaker_endpoint_ssml(speaker_json['name'], + speaker_json['summary'], + speaker_json['say'], + speaker_json['imageDescription'], + speaker_json['detectedLinks'], + system_language, + gender) + try: + with open(cached_ssml_filename, 'w+') as fp_ssml: + fp_ssml.write(ssml_str) + except OSError: + print('EX: unable to write ssml ' + cached_ssml_filename) diff --git a/utils.py b/utils.py index bc75b1e10..91979df56 100644 --- a/utils.py +++ b/utils.py @@ -1744,6 +1744,14 @@ def delete_cached_html(base_dir: str, nickname: str, domain: str, print('EX: delete_cached_html ' + 'unable to delete cached post file ' + str(cached_post_filename)) + cached_post_filename = cached_post_filename.replace('.html', '.ssml') + if os.path.isfile(cached_post_filename): + try: + os.remove(cached_post_filename) + except OSError: + print('EX: delete_cached_html ' + + 'unable to delete cached ssml post file ' + + str(cached_post_filename)) def _delete_hashtags_on_post(base_dir: str, post_json_object: {}) -> None: diff --git a/webapp_post.py b/webapp_post.py index a84fddf9c..314a2e104 100644 --- a/webapp_post.py +++ b/webapp_post.py @@ -1698,7 +1698,7 @@ def individual_post_as_html(signing_priv_key_pem: str, nickname, domain, domain_full, post_json_object, person_cache, translate, post_json_object['actor'], - theme_name) + theme_name, system_language) with open(announce_filename + '.tts', 'w+') as ttsfile: ttsfile.write('\n')