__filename__ = "conversation.py" __author__ = "Bob Mottram" __license__ = "AGPL3+" __version__ = "1.4.0" __maintainer__ = "Bob Mottram" __email__ = "bob@libreserver.org" __status__ = "Production" __module_group__ = "Timeline" import os from conversation import download_conversation_posts from utils import get_config_param from utils import get_nickname_from_actor from utils import get_domain_from_actor from utils import is_public_post from blocking import is_blocked from webapp_utils import html_header_with_external_style from webapp_utils import html_post_separator from webapp_utils import html_footer from webapp_post import individual_post_as_html def html_conversation_view(authorized: bool, post_id: str, translate: {}, base_dir: str, http_prefix: str, nickname: str, domain: str, project_version: str, recent_posts_cache: {}, max_recent_posts: int, session, cached_webfingers, person_cache: {}, port: int, yt_replace_domain: str, twitter_replacement_domain: str, show_published_date_only: bool, peertube_instances: [], allow_local_network_access: bool, theme_name: str, system_language: str, max_like_count: int, signing_priv_key_pem: str, cw_lists: {}, lists_enabled: str, timezone: str, bold_reading: bool, dogwhistles: {}, access_keys: {}, min_images_for_accounts: [], debug: bool, buy_sites: {}, blocked_cache: []) -> str: """Show a page containing a conversation thread """ conv_posts = \ download_conversation_posts(authorized, session, http_prefix, base_dir, nickname, domain, post_id, debug) if not conv_posts: return None css_filename = base_dir + '/epicyon-profile.css' if os.path.isfile(base_dir + '/epicyon.css'): css_filename = base_dir + '/epicyon.css' instance_title = \ get_config_param(base_dir, 'instanceTitle') conv_str = \ html_header_with_external_style(css_filename, instance_title, None) separator_str = html_post_separator(base_dir, None) text_mode_separator = '

\n' minimize_all_images = False if nickname in min_images_for_accounts: minimize_all_images = True for post_json_object in conv_posts: show_individual_post_icons = True # if not authorized then only show public posts if not authorized: show_individual_post_icons = False if not is_public_post(post_json_object): continue from_actor = post_json_object['object']['attributedTo'] from_nickname = get_nickname_from_actor(from_actor) from_domain, _ = get_domain_from_actor(from_actor) # don't show icons on posts from blocked accounts/instances if from_nickname and from_domain: if is_blocked(base_dir, nickname, domain, from_nickname, from_domain, blocked_cache): show_individual_post_icons = False allow_deletion = False post_str = \ individual_post_as_html(signing_priv_key_pem, True, recent_posts_cache, max_recent_posts, translate, None, base_dir, session, cached_webfingers, person_cache, nickname, domain, port, post_json_object, None, True, allow_deletion, http_prefix, project_version, 'search', yt_replace_domain, twitter_replacement_domain, show_published_date_only, peertube_instances, allow_local_network_access, theme_name, system_language, max_like_count, show_individual_post_icons, show_individual_post_icons, False, False, False, False, cw_lists, lists_enabled, timezone, False, bold_reading, dogwhistles, minimize_all_images, None, buy_sites) if post_str: conv_str += text_mode_separator + separator_str + post_str conv_str += text_mode_separator + html_footer() return conv_str