Support for thread id

main
Bob Mottram 2024-10-06 17:22:13 +01:00
parent 9a548f32a6
commit de123048f4
17 changed files with 183 additions and 78 deletions

View File

@ -1241,12 +1241,12 @@ def mute_post(base_dir: str, nickname: str, domain: str, port: int,
if post_json_obj.get('conversation'): if post_json_obj.get('conversation'):
mute_conversation(base_dir, nickname, domain, mute_conversation(base_dir, nickname, domain,
post_json_obj['conversation']) post_json_obj['conversation'])
elif post_json_obj.get('thread'):
mute_conversation(base_dir, nickname, domain,
post_json_obj['thread'])
elif post_json_obj.get('context'): elif post_json_obj.get('context'):
mute_conversation(base_dir, nickname, domain, mute_conversation(base_dir, nickname, domain,
post_json_obj['context']) post_json_obj['context'])
elif post_json_obj.get('thread'):
mute_conversation(base_dir, nickname, domain,
post_json_obj['thread'])
# does this post have ignores on it from differenent actors? # does this post have ignores on it from differenent actors?
if not post_json_obj.get('ignores'): if not post_json_obj.get('ignores'):
@ -1390,12 +1390,12 @@ def unmute_post(base_dir: str, nickname: str, domain: str, port: int,
if post_json_obj.get('conversation'): if post_json_obj.get('conversation'):
unmute_conversation(base_dir, nickname, domain, unmute_conversation(base_dir, nickname, domain,
post_json_obj['conversation']) post_json_obj['conversation'])
elif post_json_obj.get('thread'):
unmute_conversation(base_dir, nickname, domain,
post_json_obj['thread'])
elif post_json_obj.get('context'): elif post_json_obj.get('context'):
unmute_conversation(base_dir, nickname, domain, unmute_conversation(base_dir, nickname, domain,
post_json_obj['context']) post_json_obj['context'])
elif post_json_obj.get('thread'):
unmute_conversation(base_dir, nickname, domain,
post_json_obj['thread'])
if post_json_obj.get('ignores'): if post_json_obj.get('ignores'):
domain_full = get_full_domain(domain, port) domain_full = get_full_domain(domain, port)

View File

@ -42,10 +42,10 @@ def _get_conversation_filename(base_dir: str, nickname: str, domain: str,
os.mkdir(conversation_dir) os.mkdir(conversation_dir)
if post_json_object['object'].get('conversation'): if post_json_object['object'].get('conversation'):
conversation_id = post_json_object['object']['conversation'] conversation_id = post_json_object['object']['conversation']
elif post_json_object['object'].get('thread'): elif post_json_object['object'].get('context'):
conversation_id = post_json_object['object']['thread']
else:
conversation_id = post_json_object['object']['context'] conversation_id = post_json_object['object']['context']
else:
conversation_id = post_json_object['object']['thread']
if not isinstance(conversation_id, str): if not isinstance(conversation_id, str):
return None return None
conversation_id = conversation_id.replace('/', '#') conversation_id = conversation_id.replace('/', '#')

View File

@ -4011,11 +4011,16 @@ def daemon_http_get(self) -> None:
reply_category = '' reply_category = ''
share_description = None share_description = None
conversation_id = None conversation_id = None
convthread_id = None
if html_getreq: if html_getreq:
if '?conversationId=' in self.path: if '?conversationId=' in self.path:
conversation_id = self.path.split('?conversationId=')[1] conversation_id = self.path.split('?conversationId=')[1]
if '?' in conversation_id: if '?' in conversation_id:
conversation_id = conversation_id.split('?')[0] conversation_id = conversation_id.split('?')[0]
if '?convthreadId=' in self.path:
convthread_id = self.path.split('?convthreadId=')[1]
if '?' in convthread_id:
convthread_id = convthread_id.split('?')[0]
# public reply # public reply
if '?replyto=' in self.path: if '?replyto=' in self.path:
in_reply_to_url = self.path.split('?replyto=')[1] in_reply_to_url = self.path.split('?replyto=')[1]
@ -4306,6 +4311,7 @@ def daemon_http_get(self) -> None:
self.server.domain_full, self.server.domain_full,
getreq_start_time, getreq_start_time,
cookie, no_drop_down, conversation_id, cookie, no_drop_down, conversation_id,
convthread_id,
curr_session, curr_session,
self.server.default_reply_interval_hrs, self.server.default_reply_interval_hrs,
self.server.debug, self.server.debug,

View File

@ -360,6 +360,7 @@ def show_new_post(self, edit_post_params: {},
domain: str, domain_full: str, domain: str, domain_full: str,
getreq_start_time, cookie, getreq_start_time, cookie,
no_drop_down: bool, conversation_id: str, no_drop_down: bool, conversation_id: str,
convthread_id: str,
curr_session, default_reply_interval_hrs: int, curr_session, default_reply_interval_hrs: int,
debug: bool, access_keys: {}, debug: bool, access_keys: {},
key_shortcuts: {}, system_language: str, key_shortcuts: {}, system_language: str,
@ -480,7 +481,7 @@ def show_new_post(self, edit_post_params: {},
theme_name, theme_name,
no_drop_down, access_keys, no_drop_down, access_keys,
custom_submit_text, custom_submit_text,
conversation_id, conversation_id, convthread_id,
recent_posts_cache, recent_posts_cache,
max_recent_posts, max_recent_posts,
curr_session, curr_session,

View File

@ -932,6 +932,7 @@ def _person_options_dm(self, options_confirm_params: str,
custom_submit_text = get_config_param(base_dir, 'customSubmitText') custom_submit_text = get_config_param(base_dir, 'customSubmitText')
conversation_id = None conversation_id = None
convthread_id = None
reply_is_chat = False reply_is_chat = False
bold_reading = False bold_reading = False
@ -964,7 +965,7 @@ def _person_options_dm(self, options_confirm_params: str,
theme_name, theme_name,
True, access_keys, True, access_keys,
custom_submit_text, custom_submit_text,
conversation_id, conversation_id, convthread_id,
recent_posts_cache, recent_posts_cache,
max_recent_posts, max_recent_posts,
curr_session, curr_session,
@ -1165,6 +1166,7 @@ def _person_options_report(self, options_confirm_params: str,
custom_submit_text = get_config_param(base_dir, 'customSubmitText') custom_submit_text = get_config_param(base_dir, 'customSubmitText')
conversation_id = None conversation_id = None
convthread_id = None
reply_is_chat = False reply_is_chat = False
bold_reading = False bold_reading = False
@ -1196,7 +1198,7 @@ def _person_options_report(self, options_confirm_params: str,
theme_name, theme_name,
True, access_keys, True, access_keys,
custom_submit_text, custom_submit_text,
conversation_id, conversation_id, convthread_id,
recent_posts_cache, recent_posts_cache,
max_recent_posts, max_recent_posts,
curr_session, curr_session,

View File

@ -220,6 +220,7 @@ def _send_reply_to_question(self, base_dir: str,
event_end_time = None event_end_time = None
location = None location = None
conversation_id = None conversation_id = None
convthread_id = None
buy_url = '' buy_url = ''
chat_url = '' chat_url = ''
city = get_spoofed_city(city_name, base_dir, nickname, domain) city = get_spoofed_city(city_name, base_dir, nickname, domain)
@ -251,7 +252,7 @@ def _send_reply_to_question(self, base_dir: str,
event_end_time, event_end_time,
location, location,
system_language, system_language,
conversation_id, conversation_id, convthread_id,
low_bandwidth, low_bandwidth,
dm_license_url, dm_license_url,
content_license_url, '', content_license_url, '',

View File

@ -130,6 +130,10 @@ def _receive_new_post_process_newpost(self, fields: {},
if fields.get('conversationId'): if fields.get('conversationId'):
conversation_id = fields['conversationId'] conversation_id = fields['conversationId']
convthread_id = None
if fields.get('convthreadId'):
convthread_id = fields['convthreadId']
languages_understood = \ languages_understood = \
get_understood_languages(base_dir, http_prefix, get_understood_languages(base_dir, http_prefix,
nickname, domain_full, nickname, domain_full,
@ -165,7 +169,7 @@ def _receive_new_post_process_newpost(self, fields: {},
fields['eventEndTime'], fields['eventEndTime'],
fields['location'], False, fields['location'], False,
fields['languagesDropdown'], fields['languagesDropdown'],
conversation_id, conversation_id, convthread_id,
low_bandwidth, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
@ -286,6 +290,9 @@ def _receive_new_post_process_newblog(self, fields: {},
conversation_id = None conversation_id = None
if fields.get('conversationId'): if fields.get('conversationId'):
conversation_id = fields['conversationId'] conversation_id = fields['conversationId']
convthread_id = None
if fields.get('convthreadId'):
convthread_id = fields['convthreadId']
languages_understood = \ languages_understood = \
get_understood_languages(base_dir, http_prefix, get_understood_languages(base_dir, http_prefix,
nickname, domain_full, nickname, domain_full,
@ -318,7 +325,7 @@ def _receive_new_post_process_newblog(self, fields: {},
fields['eventEndTime'], fields['eventEndTime'],
fields['location'], fields['location'],
fields['languagesDropdown'], fields['languagesDropdown'],
conversation_id, conversation_id, convthread_id,
low_bandwidth, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
@ -518,6 +525,10 @@ def _receive_new_post_process_newunlisted(self, fields: {},
if fields.get('conversationId'): if fields.get('conversationId'):
conversation_id = fields['conversationId'] conversation_id = fields['conversationId']
convthread_id = None
if fields.get('convthreadId'):
convthread_id = fields['convthreadId']
languages_understood = \ languages_understood = \
get_understood_languages(base_dir, http_prefix, nickname, get_understood_languages(base_dir, http_prefix, nickname,
domain_full, person_cache) domain_full, person_cache)
@ -552,7 +563,7 @@ def _receive_new_post_process_newunlisted(self, fields: {},
fields['eventEndTime'], fields['eventEndTime'],
fields['location'], fields['location'],
fields['languagesDropdown'], fields['languagesDropdown'],
conversation_id, conversation_id, convthread_id,
low_bandwidth, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
@ -668,6 +679,10 @@ def _receive_new_post_process_newfollowers(self, fields: {},
if fields.get('conversationId'): if fields.get('conversationId'):
conversation_id = fields['conversationId'] conversation_id = fields['conversationId']
convthread_id = None
if fields.get('convthreadId'):
convthread_id = fields['convthreadId']
mentions_message = mentions_str + fields['message'] mentions_message = mentions_str + fields['message']
languages_understood = \ languages_understood = \
get_understood_languages(base_dir, http_prefix, get_understood_languages(base_dir, http_prefix,
@ -705,7 +720,7 @@ def _receive_new_post_process_newfollowers(self, fields: {},
fields['eventEndTime'], fields['eventEndTime'],
fields['location'], fields['location'],
fields['languagesDropdown'], fields['languagesDropdown'],
conversation_id, conversation_id, convthread_id,
low_bandwidth, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_license_url,
@ -827,6 +842,10 @@ def _receive_new_post_process_newdm(self, fields: {},
if fields.get('conversationId'): if fields.get('conversationId'):
conversation_id = fields['conversationId'] conversation_id = fields['conversationId']
convthread_id = None
if fields.get('convthreadId'):
convthread_id = fields['convthreadId']
languages_understood = \ languages_understood = \
get_understood_languages(base_dir, http_prefix, get_understood_languages(base_dir, http_prefix,
nickname, domain_full, nickname, domain_full,
@ -871,7 +890,7 @@ def _receive_new_post_process_newdm(self, fields: {},
fields['eventEndTime'], fields['eventEndTime'],
fields['location'], fields['location'],
fields['languagesDropdown'], fields['languagesDropdown'],
conversation_id, conversation_id, convthread_id,
low_bandwidth, low_bandwidth,
dm_license_url, dm_license_url,
media_license_url, media_license_url,
@ -993,6 +1012,7 @@ def _receive_new_post_process_newreminder(self, fields: {}, nickname: str,
client_to_server = False client_to_server = False
comments_enabled = False comments_enabled = False
conversation_id = None conversation_id = None
convthread_id = None
mentions_message = mentions_str + fields['message'] mentions_message = mentions_str + fields['message']
languages_understood = \ languages_understood = \
get_understood_languages(base_dir, http_prefix, get_understood_languages(base_dir, http_prefix,
@ -1024,7 +1044,7 @@ def _receive_new_post_process_newreminder(self, fields: {}, nickname: str,
fields['eventEndTime'], fields['eventEndTime'],
fields['location'], fields['location'],
fields['languagesDropdown'], fields['languagesDropdown'],
conversation_id, conversation_id, convthread_id,
low_bandwidth, low_bandwidth,
dm_license_url, dm_license_url,
media_license_url, media_license_url,
@ -1314,6 +1334,7 @@ def _receive_new_post_process_newreading(self, fields: {},
if fields.get('videoTranscript'): if fields.get('videoTranscript'):
video_transcript = fields['videoTranscript'] video_transcript = fields['videoTranscript']
conversation_id = None conversation_id = None
convthread_id = None
languages_understood = \ languages_understood = \
get_understood_languages(base_dir, http_prefix, get_understood_languages(base_dir, http_prefix,
nickname, domain_full, nickname, domain_full,
@ -1341,7 +1362,7 @@ def _receive_new_post_process_newreading(self, fields: {},
fields['eventEndTime'], fields['eventEndTime'],
fields['location'], False, fields['location'], False,
fields['languagesDropdown'], fields['languagesDropdown'],
conversation_id, conversation_id, convthread_id,
low_bandwidth, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,

View File

@ -516,7 +516,7 @@ def _desktop_reply_to_post(session, post_id: str,
debug: bool, subject: str, debug: bool, subject: str,
screenreader: str, system_language: str, screenreader: str, system_language: str,
languages_understood: [], languages_understood: [],
espeak, conversation_id: str, espeak, conversation_id: str, convthread_id: str,
low_bandwidth: bool, low_bandwidth: bool,
content_license_url: str, content_license_url: str,
media_license_url: str, media_creator: str, media_license_url: str, media_creator: str,
@ -592,7 +592,7 @@ def _desktop_reply_to_post(session, post_id: str,
event_date, event_time, event_end_time, location, event_date, event_time, event_end_time, location,
translate, buy_url, chat_url, auto_cw_cache, translate, buy_url, chat_url, auto_cw_cache,
debug, post_id, post_id, debug, post_id, post_id,
conversation_id, subject) == 0: conversation_id, convthread_id, subject) == 0:
say_str = translate['Sent'] say_str = translate['Sent']
else: else:
say_str = translate['Post failed'] say_str = translate['Post failed']
@ -614,6 +614,7 @@ def _desktop_new_post(session,
"""Use the desktop client to create a new post """Use the desktop client to create a new post
""" """
conversation_id = None conversation_id = None
convthread_id = None
say_str = translate['Create a new post'] say_str = translate['Create a new post']
_say_command(say_str, say_str, screenreader, system_language, espeak) _say_command(say_str, say_str, screenreader, system_language, espeak)
say_str = translate['Type your post, then press Enter'] + '.' say_str = translate['Type your post, then press Enter'] + '.'
@ -673,7 +674,7 @@ def _desktop_new_post(session,
event_date, event_time, event_end_time, location, event_date, event_time, event_end_time, location,
translate, buy_url, chat_url, auto_cw_cache, translate, buy_url, chat_url, auto_cw_cache,
debug, None, None, debug, None, None,
conversation_id, subject) == 0: conversation_id, convthread_id, subject) == 0:
say_str = translate['Sent'] say_str = translate['Sent']
else: else:
say_str = translate['Post failed'] say_str = translate['Post failed']
@ -1378,6 +1379,7 @@ def _desktop_new_dm_base(session, to_handle: str,
"""Use the desktop client to create a new direct message """Use the desktop client to create a new direct message
""" """
conversation_id = None conversation_id = None
convthread_id = None
to_port = port to_port = port
if '://' in to_handle: if '://' in to_handle:
to_nickname = get_nickname_from_actor(to_handle) to_nickname = get_nickname_from_actor(to_handle)
@ -1489,7 +1491,7 @@ def _desktop_new_dm_base(session, to_handle: str,
event_date, event_time, event_end_time, location, event_date, event_time, event_end_time, location,
translate, buy_url, chat_url, auto_cw_cache, translate, buy_url, chat_url, auto_cw_cache,
debug, None, None, debug, None, None,
conversation_id, subject) == 0: conversation_id, convthread_id, subject) == 0:
say_str = translate['Sent'] say_str = translate['Sent']
else: else:
say_str = translate['Post failed'] say_str = translate['Post failed']
@ -1964,18 +1966,19 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
if post_json_object['object'].get('summary'): if post_json_object['object'].get('summary'):
subject = post_json_object['object']['summary'] subject = post_json_object['object']['summary']
conversation_id = None conversation_id = None
convthread_id = None
# Due to lack of AP specification maintenance, # Due to lack of AP specification maintenance,
# a conversation can also be referred to as a # a conversation can also be referred to as a
# thread or (confusingly) "context" # thread or (confusingly) "context"
if post_json_object['object'].get('conversation'): if post_json_object['object'].get('conversation'):
conversation_id = \ conversation_id = \
post_json_object['object']['conversation'] post_json_object['object']['conversation']
elif post_json_object['object'].get('thread'):
conversation_id = \
post_json_object['object']['thread']
elif post_json_object['object'].get('context'): elif post_json_object['object'].get('context'):
conversation_id = \ conversation_id = \
post_json_object['object']['context'] post_json_object['object']['context']
if post_json_object['object'].get('thread'):
convthread_id = \
post_json_object['object']['thread']
session_reply = create_session(proxy_type) session_reply = create_session(proxy_type)
_desktop_reply_to_post(session_reply, post_id, _desktop_reply_to_post(session_reply, post_id,
base_dir, nickname, base_dir, nickname,
@ -1988,6 +1991,7 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
system_language, system_language,
languages_understood, languages_understood,
espeak, conversation_id, espeak, conversation_id,
convthread_id,
low_bandwidth, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_license_url,

View File

@ -203,6 +203,10 @@ def _command_options() -> None:
default=None, default=None,
help='Conversation Id which can be added ' + help='Conversation Id which can be added ' +
'when sending a post') 'when sending a post')
parser.add_argument('--convthreadId', dest='convthreadId', type=str,
default=None,
help='Conversation thread Id which can be added ' +
'when sending a post')
parser.add_argument('--libretranslateApiKey', parser.add_argument('--libretranslateApiKey',
dest='libretranslateApiKey', type=str, dest='libretranslateApiKey', type=str,
default=None, default=None,
@ -1866,7 +1870,8 @@ def _command_options() -> None:
argb.eventDate, argb.eventTime, argb.eventEndTime, argb.eventDate, argb.eventTime, argb.eventEndTime,
argb.eventLocation, translate, argb.buyUrl, argb.eventLocation, translate, argb.buyUrl,
argb.chatUrl, auto_cw_cache, argb.debug, argb.chatUrl, auto_cw_cache, argb.debug,
reply_to, reply_to, argb.conversationId, subject) reply_to, reply_to, argb.conversationId,
argb.convthreadId, subject)
for _ in range(10): for _ in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -3635,6 +3640,7 @@ def _command_options() -> None:
test_location = None test_location = None
test_is_article = False test_is_article = False
conversation_id = None conversation_id = None
convthread_id = None
low_bandwidth = False low_bandwidth = False
languages_understood = [argb.language] languages_understood = [argb.language]
translate = {} translate = {}
@ -3656,6 +3662,7 @@ def _command_options() -> None:
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, argb.language, conversation_id, test_is_article, argb.language, conversation_id,
convthread_id,
low_bandwidth, argb.content_license_url, low_bandwidth, argb.content_license_url,
argb.media_license_url, argb.media_creator, argb.media_license_url, argb.media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -3673,6 +3680,7 @@ def _command_options() -> None:
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, argb.language, conversation_id, test_is_article, argb.language, conversation_id,
convthread_id,
low_bandwidth, argb.content_license_url, low_bandwidth, argb.content_license_url,
argb.media_license_url, argb.media_creator, argb.media_license_url, argb.media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -3690,6 +3698,7 @@ def _command_options() -> None:
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, argb.language, conversation_id, test_is_article, argb.language, conversation_id,
convthread_id,
low_bandwidth, argb.content_license_url, low_bandwidth, argb.content_license_url,
argb.media_license_url, argb.media_creator, argb.media_license_url, argb.media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -3707,6 +3716,7 @@ def _command_options() -> None:
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, argb.language, conversation_id, test_is_article, argb.language, conversation_id,
convthread_id,
low_bandwidth, argb.content_license_url, low_bandwidth, argb.content_license_url,
argb.media_license_url, argb.media_creator, argb.media_license_url, argb.media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -3725,6 +3735,7 @@ def _command_options() -> None:
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, argb.language, conversation_id, test_is_article, argb.language, conversation_id,
convthread_id,
low_bandwidth, argb.content_license_url, low_bandwidth, argb.content_license_url,
argb.media_license_url, argb.media_creator, argb.media_license_url, argb.media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -3742,6 +3753,7 @@ def _command_options() -> None:
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, argb.language, conversation_id, test_is_article, argb.language, conversation_id,
convthread_id,
low_bandwidth, argb.content_license_url, low_bandwidth, argb.content_license_url,
argb.media_license_url, argb.media_creator, argb.media_license_url, argb.media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -3759,6 +3771,7 @@ def _command_options() -> None:
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, argb.language, conversation_id, test_is_article, argb.language, conversation_id,
convthread_id,
low_bandwidth, argb.content_license_url, low_bandwidth, argb.content_license_url,
argb.media_license_url, argb.media_creator, argb.media_license_url, argb.media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -3776,6 +3789,7 @@ def _command_options() -> None:
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, argb.language, conversation_id, test_is_article, argb.language, conversation_id,
convthread_id,
low_bandwidth, argb.content_license_url, low_bandwidth, argb.content_license_url,
argb.media_license_url, argb.media_creator, argb.media_license_url, argb.media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,

View File

@ -1346,6 +1346,7 @@ def _bounce_dm(sender_post_id: str, session, http_prefix: str,
event_end_time = None event_end_time = None
location = None location = None
conversation_id = None conversation_id = None
convthread_id = None
low_bandwidth = False low_bandwidth = False
buy_url = '' buy_url = ''
chat_url = '' chat_url = ''
@ -1361,6 +1362,7 @@ def _bounce_dm(sender_post_id: str, session, http_prefix: str,
subject, debug, schedule_post, subject, debug, schedule_post,
event_date, event_time, event_end_time, event_date, event_time, event_end_time,
location, system_language, conversation_id, location, system_language, conversation_id,
convthread_id,
low_bandwidth, dm_license_url, low_bandwidth, dm_license_url,
dm_license_url, '', dm_license_url, '',
languages_understood, bounce_is_chat, languages_understood, bounce_is_chat,
@ -1537,10 +1539,10 @@ def _create_reply_notification_file(base_dir: str, nickname: str, domain: str,
conversation_id = None conversation_id = None
if post_json_object['object'].get('conversation'): if post_json_object['object'].get('conversation'):
conversation_id = post_json_object['object']['conversation'] conversation_id = post_json_object['object']['conversation']
elif post_json_object['object'].get('thread'):
conversation_id = post_json_object['object']['thread']
elif post_json_object['object'].get('context'): elif post_json_object['object'].get('context'):
conversation_id = post_json_object['object']['context'] conversation_id = post_json_object['object']['context']
elif post_json_object['object'].get('thread'):
conversation_id = post_json_object['object']['thread']
in_reply_to = get_reply_to(post_json_object['object']) in_reply_to = get_reply_to(post_json_object['object'])
if not in_reply_to: if not in_reply_to:

View File

@ -96,7 +96,8 @@ def meta_data_node_info(base_dir: str,
"postFormats": ["text/plain", "text/html", "postFormats": ["text/plain", "text/html",
"text/markdown", "text/x.misskeymarkdown"], "text/markdown", "text/x.misskeymarkdown"],
"FEPs": ["c648", "521a", "8fcf", "4ccd", "c118", "fffd", "FEPs": ["c648", "521a", "8fcf", "4ccd", "c118", "fffd",
"1970", "0837", "7628", "2677", "5e53", "c16b"] "1970", "0837", "7628", "2677", "5e53", "c16b",
"5e53"]
} }
} }
return nodeinfo return nodeinfo

View File

@ -660,6 +660,7 @@ def _convert_rss_to_activitypub(base_dir: str, http_prefix: str,
video_transcript = None video_transcript = None
city = 'London, England' city = 'London, England'
conversation_id = None conversation_id = None
convthread_id = None
languages_understood = [system_language] languages_understood = [system_language]
buy_url = '' buy_url = ''
chat_url = '' chat_url = ''
@ -670,7 +671,7 @@ def _convert_rss_to_activitypub(base_dir: str, http_prefix: str,
attach_image_filename, media_type, attach_image_filename, media_type,
image_description, video_transcript, image_description, video_transcript,
city, rss_title, system_language, city, rss_title, system_language,
conversation_id, low_bandwidth, conversation_id, convthread_id, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, languages_understood, translate,

View File

@ -1265,8 +1265,8 @@ def _create_post_s2s(base_dir: str, nickname: str, domain: str, port: int,
video_transcript: str, city: str, video_transcript: str, city: str,
post_object_type: str, summary: str, post_object_type: str, summary: str,
in_reply_to_atom_uri: str, system_language: str, in_reply_to_atom_uri: str, system_language: str,
conversation_id: str, low_bandwidth: bool, conversation_id: str, convthread_id: str,
content_license_url: str, low_bandwidth: bool, content_license_url: str,
media_license_url: str, media_creator: str, media_license_url: str, media_creator: str,
buy_url: str, chat_url: str, translate: {}) -> {}: buy_url: str, chat_url: str, translate: {}) -> {}:
"""Creates a new server-to-server post """Creates a new server-to-server post
@ -1335,6 +1335,11 @@ def _create_post_s2s(base_dir: str, nickname: str, domain: str, port: int,
} }
} }
# https://codeberg.org/fediverse/fep/src/branch/main/fep/76ea/fep-76ea.md
if convthread_id:
if isinstance(convthread_id, str):
new_post['object']['thread'] = convthread_id
# pixelfed/friendica style location representation # pixelfed/friendica style location representation
location = get_location_dict_from_tags(tags) location = get_location_dict_from_tags(tags)
if location: if location:
@ -1376,7 +1381,8 @@ def _create_post_c2s(base_dir: str, nickname: str, domain: str, port: int,
video_transcript: str, city: str, video_transcript: str, city: str,
post_object_type: str, summary: str, post_object_type: str, summary: str,
in_reply_to_atom_uri: str, system_language: str, in_reply_to_atom_uri: str, system_language: str,
conversation_id: str, low_bandwidth: str, conversation_id: str, convthread_id: str,
low_bandwidth: str,
content_license_url: str, media_license_url: str, content_license_url: str, media_license_url: str,
media_creator: str, buy_url: str, chat_url: str, media_creator: str, buy_url: str, chat_url: str,
translate: {}) -> {}: translate: {}) -> {}:
@ -1400,6 +1406,7 @@ def _create_post_c2s(base_dir: str, nickname: str, domain: str, port: int,
'secGPC': '1', 'secGPC': '1',
'id': new_post_id, 'id': new_post_id,
'conversation': conversation_id, 'conversation': conversation_id,
'thread': convthread_id,
'context': conversation_id, 'context': conversation_id,
'type': post_object_type, 'type': post_object_type,
'summary': summary, 'summary': summary,
@ -1434,6 +1441,11 @@ def _create_post_c2s(base_dir: str, nickname: str, domain: str, port: int,
"crawlable": False "crawlable": False
} }
# https://codeberg.org/fediverse/fep/src/branch/main/fep/76ea/fep-76ea.md
if convthread_id:
if isinstance(convthread_id, str):
new_post['thread'] = convthread_id
# pixelfed/friendica style location representation # pixelfed/friendica style location representation
location = get_location_dict_from_tags(tags) location = get_location_dict_from_tags(tags)
if location: if location:
@ -1690,8 +1702,8 @@ def _create_post_base(base_dir: str,
anonymous_participation_enabled: bool, anonymous_participation_enabled: bool,
event_status: str, ticket_url: str, event_status: str, ticket_url: str,
system_language: str, system_language: str,
conversation_id: str, low_bandwidth: bool, conversation_id: str, convthread_id: str,
content_license_url: str, low_bandwidth: bool, content_license_url: str,
media_license_url: str, media_creator: str, media_license_url: str, media_creator: str,
languages_understood: [], translate: {}, languages_understood: [], translate: {},
buy_url: str, chat_url: str, buy_url: str, chat_url: str,
@ -1856,7 +1868,7 @@ def _create_post_base(base_dir: str,
video_transcript, city, video_transcript, city,
post_object_type, summary, post_object_type, summary,
in_reply_to_atom_uri, system_language, in_reply_to_atom_uri, system_language,
conversation_id, low_bandwidth, conversation_id, convthread_id, low_bandwidth,
content_license_url, media_license_url, content_license_url, media_license_url,
media_creator, buy_url, chat_url, media_creator, buy_url, chat_url,
translate) translate)
@ -1872,7 +1884,7 @@ def _create_post_base(base_dir: str,
video_transcript, city, video_transcript, city,
post_object_type, summary, post_object_type, summary,
in_reply_to_atom_uri, system_language, in_reply_to_atom_uri, system_language,
conversation_id, low_bandwidth, conversation_id, convthread_id, low_bandwidth,
content_license_url, media_license_url, content_license_url, media_license_url,
media_creator, buy_url, chat_url, media_creator, buy_url, chat_url,
translate) translate)
@ -2133,8 +2145,8 @@ def create_public_post(base_dir: str,
schedule_post: bool, schedule_post: bool,
event_date: str, event_time: str, event_end_time: str, event_date: str, event_time: str, event_end_time: str,
location: str, is_article: bool, system_language: str, location: str, is_article: bool, system_language: str,
conversation_id: str, low_bandwidth: bool, conversation_id: str, convthread_id: str,
content_license_url: str, low_bandwidth: bool, content_license_url: str,
media_license_url: str, media_creator: str, media_license_url: str, media_creator: str,
languages_understood: [], translate: {}, languages_understood: [], translate: {},
buy_url: str, chat_url: str, buy_url: str, chat_url: str,
@ -2170,7 +2182,7 @@ def create_public_post(base_dir: str,
replies_moderation_option, replies_moderation_option,
anonymous_participation_enabled, anonymous_participation_enabled,
event_status, ticket_url, system_language, event_status, ticket_url, system_language,
conversation_id, low_bandwidth, conversation_id, convthread_id, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, languages_understood, translate, buy_url,
@ -2191,8 +2203,8 @@ def create_reading_post(base_dir: str,
schedule_post: bool, schedule_post: bool,
event_date: str, event_time: str, event_end_time: str, event_date: str, event_time: str, event_end_time: str,
location: str, is_article: bool, system_language: str, location: str, is_article: bool, system_language: str,
conversation_id: str, low_bandwidth: bool, conversation_id: str, convthread_id: str,
content_license_url: str, low_bandwidth: bool, content_license_url: str,
media_license_url: str, media_creator: str, media_license_url: str, media_creator: str,
languages_understood: [], translate: {}, languages_understood: [], translate: {},
buy_url: str, chat_url: str, buy_url: str, chat_url: str,
@ -2232,7 +2244,7 @@ def create_reading_post(base_dir: str,
schedule_post, schedule_post,
event_date, event_time, event_end_time, event_date, event_time, event_end_time,
location, is_article, system_language, location, is_article, system_language,
conversation_id, low_bandwidth, conversation_id, convthread_id, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, languages_understood, translate,
@ -2291,8 +2303,8 @@ def create_blog_post(base_dir: str,
subject: str, schedule_post: bool, subject: str, schedule_post: bool,
event_date: str, event_time: str, event_end_time: str, event_date: str, event_time: str, event_end_time: str,
location: str, system_language: str, location: str, system_language: str,
conversation_id: str, low_bandwidth: bool, conversation_id: str, convthread_id: str,
content_license_url: str, low_bandwidth: bool, content_license_url: str,
media_license_url: str, media_creator: str, media_license_url: str, media_creator: str,
languages_understood: [], translate: {}, languages_understood: [], translate: {},
buy_url: str, chat_url: str) -> {}: buy_url: str, chat_url: str) -> {}:
@ -2307,7 +2319,8 @@ def create_blog_post(base_dir: str,
in_reply_to, in_reply_to_atom_uri, subject, in_reply_to, in_reply_to_atom_uri, subject,
schedule_post, schedule_post,
event_date, event_time, event_end_time, location, event_date, event_time, event_end_time, location,
True, system_language, conversation_id, True, system_language,
conversation_id, convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -2327,8 +2340,8 @@ def create_news_post(base_dir: str,
attach_image_filename: str, media_type: str, attach_image_filename: str, media_type: str,
image_description: str, video_transcript: str, city: str, image_description: str, video_transcript: str, city: str,
subject: str, system_language: str, subject: str, system_language: str,
conversation_id: str, low_bandwidth: bool, conversation_id: str, convthread_id: str,
content_license_url: str, low_bandwidth: bool, content_license_url: str,
media_license_url: str, media_creator: str, media_license_url: str, media_creator: str,
languages_understood: [], translate: {}, languages_understood: [], translate: {},
buy_url: str, chat_url: str) -> {}: buy_url: str, chat_url: str) -> {}:
@ -2351,7 +2364,8 @@ def create_news_post(base_dir: str,
in_reply_to, in_reply_to_atom_uri, subject, in_reply_to, in_reply_to_atom_uri, subject,
schedule_post, schedule_post,
event_date, event_time, event_end_time, location, event_date, event_time, event_end_time, location,
True, system_language, conversation_id, True, system_language,
conversation_id, convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -2389,6 +2403,7 @@ def create_question_post(base_dir: str,
maximum_attendee_capacity = replies_moderation_option = None maximum_attendee_capacity = replies_moderation_option = None
anonymous_participation_enabled = event_status = ticket_url = None anonymous_participation_enabled = event_status = ticket_url = None
conversation_id = None conversation_id = None
convthread_id = None
message_json = \ message_json = \
_create_post_base(base_dir, nickname, domain, port, _create_post_base(base_dir, nickname, domain, port,
'https://www.w3.org/ns/activitystreams#Public', 'https://www.w3.org/ns/activitystreams#Public',
@ -2406,7 +2421,8 @@ def create_question_post(base_dir: str,
replies_moderation_option, replies_moderation_option,
anonymous_participation_enabled, event_status, anonymous_participation_enabled, event_status,
ticket_url, system_language, ticket_url, system_language,
conversation_id, low_bandwidth, content_license_url, conversation_id, convthread_id, low_bandwidth,
content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, languages_understood, translate, buy_url,
chat_url, auto_cw_cache) chat_url, auto_cw_cache)
@ -2443,8 +2459,8 @@ def create_unlisted_post(base_dir: str,
subject: str, schedule_post: bool, subject: str, schedule_post: bool,
event_date: str, event_time: str, event_end_time: str, event_date: str, event_time: str, event_end_time: str,
location: str, system_language: str, location: str, system_language: str,
conversation_id: str, low_bandwidth: bool, conversation_id: str, convthread_id: str,
content_license_url: str, low_bandwidth: bool, content_license_url: str,
media_license_url: str, media_creator: str, media_license_url: str, media_creator: str,
languages_understood: [], translate: {}, languages_understood: [], translate: {},
buy_url: str, chat_url: str, buy_url: str, chat_url: str,
@ -2479,7 +2495,7 @@ def create_unlisted_post(base_dir: str,
anonymous_participation_enabled, anonymous_participation_enabled,
event_status, event_status,
ticket_url, system_language, ticket_url, system_language,
conversation_id, low_bandwidth, conversation_id, convthread_id, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, languages_understood, translate,
@ -2499,8 +2515,8 @@ def create_followers_only_post(base_dir: str,
event_date: str, event_date: str,
event_time: str, event_end_time: str, event_time: str, event_end_time: str,
location: str, system_language: str, location: str, system_language: str,
conversation_id: str, low_bandwidth: bool, conversation_id: str, convthread_id: str,
content_license_url: str, low_bandwidth: bool, content_license_url: str,
media_license_url: str, media_creator: str, media_license_url: str, media_creator: str,
languages_understood: [], languages_understood: [],
translate: {}, buy_url: str, translate: {}, buy_url: str,
@ -2533,7 +2549,7 @@ def create_followers_only_post(base_dir: str,
replies_moderation_option, replies_moderation_option,
anonymous_participation_enabled, anonymous_participation_enabled,
event_status, ticket_url, system_language, event_status, ticket_url, system_language,
conversation_id, low_bandwidth, conversation_id, convthread_id, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, languages_understood, translate,
@ -2591,8 +2607,8 @@ def create_direct_message_post(base_dir: str,
event_date: str, event_time: str, event_date: str, event_time: str,
event_end_time: str, event_end_time: str,
location: str, system_language: str, location: str, system_language: str,
conversation_id: str, low_bandwidth: bool, conversation_id: str, convthread_id: str,
content_license_url: str, low_bandwidth: bool, content_license_url: str,
media_license_url: str, media_creator: str, media_license_url: str, media_creator: str,
languages_understood: [], languages_understood: [],
dm_is_chat: bool, translate: {}, dm_is_chat: bool, translate: {},
@ -2633,7 +2649,7 @@ def create_direct_message_post(base_dir: str,
replies_moderation_option, replies_moderation_option,
anonymous_participation_enabled, anonymous_participation_enabled,
event_status, ticket_url, system_language, event_status, ticket_url, system_language,
conversation_id, low_bandwidth, conversation_id, convthread_id, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -2750,6 +2766,7 @@ def create_report_post(base_dir: str,
event_status = None event_status = None
ticket_url = None ticket_url = None
conversation_id = None conversation_id = None
convthread_id = None
for to_url in post_to: for to_url in post_to:
# who is this report going to? # who is this report going to?
to_nickname = to_url.split('/users/')[1] to_nickname = to_url.split('/users/')[1]
@ -2770,7 +2787,7 @@ def create_report_post(base_dir: str,
replies_moderation_option, replies_moderation_option,
anonymous_participation_enabled, anonymous_participation_enabled,
event_status, ticket_url, system_language, event_status, ticket_url, system_language,
conversation_id, low_bandwidth, conversation_id, convthread_id, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, languages_understood, translate,
@ -3004,6 +3021,7 @@ def send_post(signing_priv_key_pem: str, project_version: str,
""" """
with_digest = True with_digest = True
conversation_id = None conversation_id = None
convthread_id = None
if to_nickname == 'inbox': if to_nickname == 'inbox':
# shared inbox actor on @domain@domain # shared inbox actor on @domain@domain
@ -3080,7 +3098,7 @@ def send_post(signing_priv_key_pem: str, project_version: str,
replies_moderation_option, replies_moderation_option,
anonymous_participation_enabled, anonymous_participation_enabled,
event_status, ticket_url, system_language, event_status, ticket_url, system_language,
conversation_id, low_bandwidth, conversation_id, convthread_id, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, languages_understood,
@ -3206,7 +3224,8 @@ def send_post_via_server(signing_priv_key_pem: str, project_version: str,
buy_url: str, chat_url: str, auto_cw_cache: {}, buy_url: str, chat_url: str, auto_cw_cache: {},
debug: bool, in_reply_to: str, debug: bool, in_reply_to: str,
in_reply_to_atom_uri: str, in_reply_to_atom_uri: str,
conversation_id: str, subject: str) -> int: conversation_id: str, convthread_id: str,
subject: str) -> int:
"""Send a post via a proxy (c2s) """Send a post via a proxy (c2s)
""" """
if not session: if not session:
@ -3301,7 +3320,7 @@ def send_post_via_server(signing_priv_key_pem: str, project_version: str,
replies_moderation_option, replies_moderation_option,
anonymous_participation_enabled, anonymous_participation_enabled,
event_status, ticket_url, system_language, event_status, ticket_url, system_language,
conversation_id, low_bandwidth, conversation_id, convthread_id, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, languages_understood,

View File

@ -799,6 +799,7 @@ def create_server_alice(path: str, domain: str, port: int,
test_location = None test_location = None
test_is_article = False test_is_article = False
conversation_id = None conversation_id = None
convthread_id = None
translate = {} translate = {}
content_license_url = 'https://creativecommons.org/licenses/by-nc/4.0' content_license_url = 'https://creativecommons.org/licenses/by-nc/4.0'
media_license_url = 'https://creativecommons.org/licenses/by-nc/4.0' media_license_url = 'https://creativecommons.org/licenses/by-nc/4.0'
@ -821,6 +822,7 @@ def create_server_alice(path: str, domain: str, port: int,
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, system_language, conversation_id, test_is_article, system_language, conversation_id,
convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -839,6 +841,7 @@ def create_server_alice(path: str, domain: str, port: int,
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, system_language, conversation_id, test_is_article, system_language, conversation_id,
convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -858,6 +861,7 @@ def create_server_alice(path: str, domain: str, port: int,
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, system_language, conversation_id, test_is_article, system_language, conversation_id,
convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -990,6 +994,7 @@ def create_server_bob(path: str, domain: str, port: int,
test_location = None test_location = None
test_is_article = False test_is_article = False
conversation_id = None conversation_id = None
convthread_id = None
content_license_url = 'https://creativecommons.org/licenses/by-nc/4.0' content_license_url = 'https://creativecommons.org/licenses/by-nc/4.0'
media_license_url = 'https://creativecommons.org/licenses/by-nc/4.0' media_license_url = 'https://creativecommons.org/licenses/by-nc/4.0'
media_creator = 'Hamster' media_creator = 'Hamster'
@ -1012,6 +1017,7 @@ def create_server_bob(path: str, domain: str, port: int,
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, system_language, conversation_id, test_is_article, system_language, conversation_id,
convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -1031,6 +1037,7 @@ def create_server_bob(path: str, domain: str, port: int,
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, system_language, conversation_id, test_is_article, system_language, conversation_id,
convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -1049,6 +1056,7 @@ def create_server_bob(path: str, domain: str, port: int,
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, system_language, conversation_id, test_is_article, system_language, conversation_id,
convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -3080,6 +3088,7 @@ def _test_create_person_account(base_dir: str):
attach_image_filename = None attach_image_filename = None
media_type = None media_type = None
conversation_id = None conversation_id = None
convthread_id = None
low_bandwidth = True low_bandwidth = True
translate = {} translate = {}
content_license_url = 'https://creativecommons.org/licenses/by-nc/4.0' content_license_url = 'https://creativecommons.org/licenses/by-nc/4.0'
@ -3104,6 +3113,7 @@ def _test_create_person_account(base_dir: str):
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, system_language, conversation_id, test_is_article, system_language, conversation_id,
convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -3132,6 +3142,7 @@ def _test_create_person_account(base_dir: str):
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, system_language, conversation_id, test_is_article, system_language, conversation_id,
convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -3309,6 +3320,7 @@ def test_client_to_server(base_dir: str):
person_cache = {} person_cache = {}
password = 'alicepass' password = 'alicepass'
conversation_id = None conversation_id = None
convthread_id = None
alice_inbox_path = \ alice_inbox_path = \
data_dir(alice_dir) + '/alice@' + alice_domain + '/inbox' data_dir(alice_dir) + '/alice@' + alice_domain + '/inbox'
@ -3358,7 +3370,8 @@ def test_client_to_server(base_dir: str):
media_license_url, media_creator, media_license_url, media_creator,
event_date, event_time, event_end_time, location, event_date, event_time, event_end_time, location,
translate, buy_url, chat_url, auto_cw_cache, translate, buy_url, chat_url, auto_cw_cache,
True, None, None, conversation_id, None) True, None, None, conversation_id, convthread_id,
None)
print('send_result: ' + str(send_result)) print('send_result: ' + str(send_result))
for _ in range(30): for _ in range(30):
@ -4982,6 +4995,7 @@ def _test_reply_to_public_post(base_dir: str) -> None:
test_location = None test_location = None
test_is_article = False test_is_article = False
conversation_id = None conversation_id = None
convthread_id = None
low_bandwidth = True low_bandwidth = True
content_license_url = 'https://creativecommons.org/licenses/by-nc/4.0' content_license_url = 'https://creativecommons.org/licenses/by-nc/4.0'
media_license_url = 'https://creativecommons.org/licenses/by-nc/4.0' media_license_url = 'https://creativecommons.org/licenses/by-nc/4.0'
@ -5003,6 +5017,7 @@ def _test_reply_to_public_post(base_dir: str) -> None:
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, system_language, conversation_id, test_is_article, system_language, conversation_id,
convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -6026,6 +6041,7 @@ def _test_links_within_post(base_dir: str) -> None:
test_location = None test_location = None
test_is_article = False test_is_article = False
conversation_id = None conversation_id = None
convthread_id = None
low_bandwidth = True low_bandwidth = True
content_license_url = 'https://creativecommons.org/licenses/by-nc/4.0' content_license_url = 'https://creativecommons.org/licenses/by-nc/4.0'
media_license_url = 'https://creativecommons.org/licenses/by-nc/4.0' media_license_url = 'https://creativecommons.org/licenses/by-nc/4.0'
@ -6047,6 +6063,7 @@ def _test_links_within_post(base_dir: str) -> None:
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, system_language, conversation_id, test_is_article, system_language, conversation_id,
convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -6093,6 +6110,7 @@ def _test_links_within_post(base_dir: str) -> None:
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, system_language, conversation_id, test_is_article, system_language, conversation_id,
convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -6117,6 +6135,7 @@ def _test_links_within_post(base_dir: str) -> None:
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, system_language, conversation_id, test_is_article, system_language, conversation_id,
convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -7212,6 +7231,7 @@ def _test_can_replyto(base_dir: str) -> None:
test_location = None test_location = None
test_is_article = False test_is_article = False
conversation_id = None conversation_id = None
convthread_id = None
low_bandwidth = True low_bandwidth = True
content_license_url = 'https://creativecommons.org/licenses/by-nc/4.0' content_license_url = 'https://creativecommons.org/licenses/by-nc/4.0'
media_license_url = 'https://creativecommons.org/licenses/by-nc/4.0' media_license_url = 'https://creativecommons.org/licenses/by-nc/4.0'
@ -7233,6 +7253,7 @@ def _test_can_replyto(base_dir: str) -> None:
test_event_date, test_event_time, test_event_date, test_event_time,
test_event_end_time, test_location, test_event_end_time, test_location,
test_is_article, system_language, conversation_id, test_is_article, system_language, conversation_id,
convthread_id,
low_bandwidth, content_license_url, low_bandwidth, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
languages_understood, translate, buy_url, chat_url, languages_understood, translate, buy_url, chat_url,
@ -9044,7 +9065,7 @@ def _test_bridgy() -> None:
def _test_conversation_to_convthread() -> None: def _test_conversation_to_convthread() -> None:
print('conversation to thread') print('conversation to convthread')
domain = 'the.domain.of.last.resort' domain = 'the.domain.of.last.resort'
conversation_id = \ conversation_id = \
'tag:' + domain + \ 'tag:' + domain + \

View File

@ -2493,10 +2493,10 @@ def _delete_conversation_post(base_dir: str, nickname: str, domain: str,
acct_dir(base_dir, nickname, domain) + '/conversation' acct_dir(base_dir, nickname, domain) + '/conversation'
if post_json_object['object'].get('conversation'): if post_json_object['object'].get('conversation'):
conversation_id = post_json_object['object']['conversation'] conversation_id = post_json_object['object']['conversation']
elif post_json_object['object'].get('thread'): elif post_json_object['object'].get('context'):
conversation_id = post_json_object['object']['thread']
else:
conversation_id = post_json_object['object']['context'] conversation_id = post_json_object['object']['context']
else:
conversation_id = post_json_object['object']['thread']
if not isinstance(conversation_id, str): if not isinstance(conversation_id, str):
return False return False
conversation_id = conversation_id.replace('/', '#') conversation_id = conversation_id.replace('/', '#')

View File

@ -249,7 +249,7 @@ def html_new_post(edit_post_params: {},
default_timeline: str, newswire: {}, default_timeline: str, newswire: {},
theme: str, no_drop_down: bool, theme: str, no_drop_down: bool,
access_keys: {}, custom_submit_text: str, access_keys: {}, custom_submit_text: str,
conversation_id: str, conversation_id: str, convthread_id: str,
recent_posts_cache: {}, max_recent_posts: int, recent_posts_cache: {}, max_recent_posts: int,
session, cached_webfingers: {}, session, cached_webfingers: {},
person_cache: {}, port: int, person_cache: {}, port: int,
@ -300,11 +300,12 @@ def html_new_post(edit_post_params: {},
# be referred to as a thread or (confusingly) "context" # be referred to as a thread or (confusingly) "context"
if edited_post_json['object'].get('conversation'): if edited_post_json['object'].get('conversation'):
conversation_id = edited_post_json['object']['conversation'] conversation_id = edited_post_json['object']['conversation']
elif edited_post_json['object'].get('thread'):
conversation_id = edited_post_json['object']['thread']
elif edited_post_json['object'].get('context'): elif edited_post_json['object'].get('context'):
conversation_id = edited_post_json['object']['context'] conversation_id = edited_post_json['object']['context']
if edited_post_json['object'].get('thread'):
convthread_id = edited_post_json['object']['thread']
if edit_post_params.get('replyTo'): if edit_post_params.get('replyTo'):
in_reply_to = edit_post_params['replyTo'] in_reply_to = edit_post_params['replyTo']
if edit_post_params['scope'] == 'dm': if edit_post_params['scope'] == 'dm':
@ -1125,6 +1126,13 @@ def html_new_post(edit_post_params: {},
dropdown_unlisted_suffix += '?conversationId=' + conversation_id dropdown_unlisted_suffix += '?conversationId=' + conversation_id
dropdown_followers_suffix += '?conversationId=' + conversation_id dropdown_followers_suffix += '?conversationId=' + conversation_id
dropdown_dm_suffix += '?conversationId=' + conversation_id dropdown_dm_suffix += '?conversationId=' + conversation_id
if convthread_id and in_reply_to:
if isinstance(convthread_id, str):
dropdown_new_post_suffix += '?convthreadId=' + convthread_id
dropdown_new_blog_suffix += '?convthreadId=' + convthread_id
dropdown_unlisted_suffix += '?convthreadId=' + convthread_id
dropdown_followers_suffix += '?convthreadId=' + convthread_id
dropdown_dm_suffix += '?convthreadId=' + convthread_id
drop_down_content = '' drop_down_content = ''
if not report_url and not share_description: if not report_url and not share_description:

View File

@ -605,7 +605,7 @@ def _get_reply_icon_html(base_dir: str, nickname: str, domain: str,
show_icons: bool, comments_enabled: bool, show_icons: bool, comments_enabled: bool,
post_json_object: {}, page_number_param: str, post_json_object: {}, page_number_param: str,
translate: {}, system_language: str, translate: {}, system_language: str,
conversation_id: str) -> str: conversation_id: str, convthread_id: str) -> str:
"""Returns html for the reply icon/button """Returns html for the reply icon/button
""" """
reply_str = '' reply_str = ''
@ -655,6 +655,9 @@ def _get_reply_icon_html(base_dir: str, nickname: str, domain: str,
if conversation_id: if conversation_id:
if isinstance(conversation_id, str): if isinstance(conversation_id, str):
conversation_str = '?conversationId=' + conversation_id conversation_str = '?conversationId=' + conversation_id
if convthread_id:
if isinstance(convthread_id, str):
conversation_str = '?convthreadId=' + convthread_id
if is_public_reply: if is_public_reply:
actor_url = get_actor_from_post(post_json_object) actor_url = get_actor_from_post(post_json_object)
reply_str += \ reply_str += \
@ -2500,18 +2503,19 @@ def individual_post_as_html(signing_priv_key_pem: str,
comments_enabled = False comments_enabled = False
conversation_id = None conversation_id = None
convthread_id = None
if isinstance(post_json_object['object'], dict): if isinstance(post_json_object['object'], dict):
# Due to lack of AP specification maintenance, a conversation can also # Due to lack of AP specification maintenance, a conversation can also
# be referred to as a thread or (confusingly) "context" # be referred to as a thread or (confusingly) "context"
if 'conversation' in post_json_object['object']: if 'conversation' in post_json_object['object']:
if post_json_object['object']['conversation']: if post_json_object['object']['conversation']:
conversation_id = post_json_object['object']['conversation'] conversation_id = post_json_object['object']['conversation']
elif 'thread' in post_json_object['object']:
if post_json_object['object']['thread']:
conversation_id = post_json_object['object']['thread']
elif 'context' in post_json_object['object']: elif 'context' in post_json_object['object']:
if post_json_object['object']['context']: if post_json_object['object']['context']:
conversation_id = post_json_object['object']['context'] conversation_id = post_json_object['object']['context']
if 'thread' in post_json_object['object']:
if post_json_object['object']['thread']:
convthread_id = post_json_object['object']['thread']
public_reply = False public_reply = False
unlisted_reply = False unlisted_reply = False
@ -2525,7 +2529,7 @@ def individual_post_as_html(signing_priv_key_pem: str,
show_icons, comments_enabled, show_icons, comments_enabled,
post_json_object, page_number_param, post_json_object, page_number_param,
translate, system_language, translate, system_language,
conversation_id) conversation_id, convthread_id)
_log_post_timing(enable_timing_log, post_start_time, '10') _log_post_timing(enable_timing_log, post_start_time, '10')