diff --git a/epicyon.py b/epicyon.py index 9590c433a..2f8bb5875 100644 --- a/epicyon.py +++ b/epicyon.py @@ -2314,6 +2314,10 @@ if args.followers: nickname = args.followers.split('/profile/')[1] nickname = nickname.replace('\n', '').replace('\r', '') domain = args.followers.split('/profile/')[0] + elif '/author/' in args.followers: + nickname = args.followers.split('/author/')[1] + nickname = nickname.replace('\n', '').replace('\r', '') + domain = args.followers.split('/author/')[0] elif '/channel/' in args.followers: nickname = args.followers.split('/channel/')[1] nickname = nickname.replace('\n', '').replace('\r', '') @@ -2401,6 +2405,7 @@ if args.followers: person_url = person_url.replace('/accounts/', '/actor/') person_url = person_url.replace('/channel/', '/actor/') person_url = person_url.replace('/profile/', '/actor/') + person_url = person_url.replace('/author/', '/actor/') person_url = person_url.replace('/u/', '/actor/') person_url = person_url.replace('/c/', '/actor/') if not person_url: diff --git a/inbox.py b/inbox.py index 87a6f16f3..f5cce538b 100644 --- a/inbox.py +++ b/inbox.py @@ -4068,7 +4068,8 @@ def _receive_follow_request(session, session_onion, session_i2p, return False if not has_users_path(message_json['actor']): if debug: - print('DEBUG: users/profile/accounts/channel missing from actor') + print('DEBUG: ' + + 'users/profile/author/accounts/channel missing from actor') return False domain, temp_port = get_domain_from_actor(message_json['actor']) from_port = port @@ -4090,7 +4091,7 @@ def _receive_follow_request(session, session_onion, session_i2p, message_json['to'] = message_json['object'] if not has_users_path(message_json['object']): if debug: - print('DEBUG: users/profile/channel/accounts ' + + print('DEBUG: users/profile/author/channel/accounts ' + 'not found within object') return False domain_to_follow, temp_port = get_domain_from_actor(message_json['object']) diff --git a/utils.py b/utils.py index e65cb083e..7a93dd934 100644 --- a/utils.py +++ b/utils.py @@ -1139,7 +1139,7 @@ def get_user_paths() -> []: e.g. /users/nickname, /channel/nickname """ return ('/users/', '/profile/', '/accounts/', '/channel/', '/u/', - '/c/', '/video-channels/') + '/c/', '/video-channels/', '/author/') def get_group_paths() -> []: @@ -1943,7 +1943,7 @@ def _get_reserved_words() -> str: 'activity', 'undo', 'pinned', 'actor', 'Actor', 'instance.actor', 'reply', 'replies', 'question', 'like', - 'likes', 'users', 'statuses', 'tags', + 'likes', 'users', 'statuses', 'tags', 'author', 'accounts', 'headers', 'channels', 'profile', 'u', 'c', 'updates', 'repeat', 'announce', diff --git a/webapp_post.py b/webapp_post.py index 0dfd1a2ef..61fbf0fae 100644 --- a/webapp_post.py +++ b/webapp_post.py @@ -565,7 +565,7 @@ def _get_announce_icon_html(is_announced: bool, timeline_post_bookmark: str, box_name: str, max_announce_count: int) -> str: - """Returns html for announce icon/button + """Returns html for announce icon/button at the bottom of the post """ announce_str = '' @@ -1438,7 +1438,7 @@ def individual_post_as_html(signing_priv_key_pem: str, allow_local_network_access: bool, theme_name: str, system_language: str, max_like_count: int, - showRepeats: bool, + show_repeats: bool, show_icons: bool, manually_approves_followers: bool, show_public_only: bool, @@ -1583,10 +1583,10 @@ def individual_post_as_html(signing_priv_key_pem: str, timeline_post_bookmark = timeline_post_bookmark.replace('/', '-') # If this is the inbox timeline then don't show the repeat icon on any DMs - show_repeat_icon = showRepeats + show_repeat_icon = show_repeats is_public_repeat = False post_is_dm = is_dm(post_json_object) - if showRepeats: + if show_repeats: if post_is_dm: show_repeat_icon = False else: @@ -1922,17 +1922,6 @@ def individual_post_as_html(signing_priv_key_pem: str, container_class_icons = 'containericons dm' container_class = 'container dm' - new_footer_str = \ - _get_footer_with_icons(show_icons, - container_class_icons, - reply_str, announce_str, - like_str, reaction_str, bookmark_str, - delete_str, mute_str, edit_str, - post_json_object, published_link, - time_class, published_str) - if new_footer_str: - footer_str = new_footer_str - # add any content warning from the cwlists directory add_cw_from_lists(post_json_object, cw_lists, translate, lists_enabled) @@ -1951,11 +1940,6 @@ def individual_post_as_html(signing_priv_key_pem: str, system_language: sensitive_str } - # add an extra line if there is a content warning, - # for better vertical spacing on mobile - if post_is_sensitive: - footer_str = '
' + footer_str - if not post_json_object['object'].get('summary'): post_json_object['object']['summary'] = '' post_json_object['object']['summaryMap'] = { @@ -1986,6 +1970,42 @@ def individual_post_as_html(signing_priv_key_pem: str, if not content_str: return '' + if content_str: + # does an emoji indicate a no boost preference? + # if so then don't show the repeat/announce icon + if ':boost_no:' in content_str or \ + ':noboost:' in content_str or \ + ':noboosts:' in content_str or \ + ':no_boost:' in content_str or \ + ':no_boosts:' in content_str or \ + ':boosts_no:' in content_str: + announce_str = '' + # does an emoji indicate a no replies preference? + # if so then don't show the reply icon + if ':reply_no:' in content_str or \ + ':noreply:' in content_str or \ + ':noreplies:' in content_str or \ + ':no_reply:' in content_str or \ + ':no_replies:' in content_str or \ + ':replies_no:' in content_str: + reply_str = '' + + new_footer_str = \ + _get_footer_with_icons(show_icons, + container_class_icons, + reply_str, announce_str, + like_str, reaction_str, bookmark_str, + delete_str, mute_str, edit_str, + post_json_object, published_link, + time_class, published_str) + if new_footer_str: + footer_str = new_footer_str + + # add an extra line if there is a content warning, + # for better vertical spacing on mobile + if post_is_sensitive: + footer_str = '
' + footer_str + summary_str = get_summary_from_post(post_json_object, system_language, languages_understood) is_patch = is_git_patch(base_dir, nickname, domain,