From 1a9e8f21fd0cb72da79b30c6b28c5a1c21c8fbb9 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 17 Nov 2022 10:49:33 +0000 Subject: [PATCH 01/11] Tidying --- daemon.py | 110 +++++++++++++++++++----------------------------------- 1 file changed, 38 insertions(+), 72 deletions(-) diff --git a/daemon.py b/daemon.py index b45e22221..7a1b8b835 100644 --- a/daemon.py +++ b/daemon.py @@ -439,6 +439,32 @@ SHARES_PER_PAGE = 12 class PubServer(BaseHTTPRequestHandler): protocol_version = 'HTTP/1.1' + def _update_edited_post(self, message_json: {}, + edited_published: str, + edited_postid: str) -> None: + """When an edited post is created this assigns + a published and updated date to it, and uses + the previous id + """ + edited_updated = \ + message_json['object']['published'] + if edited_published: + message_json['published'] = \ + edited_published + message_json['object']['published'] = \ + edited_published + message_json['id'] = \ + edited_postid + '/activity' + message_json['object']['id'] = \ + edited_postid + message_json['object']['url'] = \ + edited_postid + message_json['updated'] = \ + edited_updated + message_json['object']['updated'] = \ + edited_updated + message_json['type'] = 'Update' + def _convert_domains(self, calling_domain, referer_domain, msg_str: str) -> str: """Convert domains to onion or i2p, depending upon who is asking @@ -19448,24 +19474,9 @@ class PubServer(BaseHTTPRequestHandler): self.server.translate) if message_json: if edited_postid: - edited_updated = \ - message_json['object']['published'] - if edited_published: - message_json['published'] = \ - edited_published - message_json['object']['published'] = \ - edited_published - message_json['id'] = \ - edited_postid + '/activity' - message_json['object']['id'] = \ - edited_postid - message_json['object']['url'] = \ - edited_postid - message_json['updated'] = \ - edited_updated - message_json['object']['updated'] = \ - edited_updated - message_json['type'] = 'Update' + self._update_edited_post(message_json, + edited_published, + edited_postid) print('DEBUG: sending edited public post ' + str(message_json)) if fields['schedulePost']: @@ -19725,24 +19736,9 @@ class PubServer(BaseHTTPRequestHandler): self.server.translate) if message_json: if edited_postid: - edited_updated = \ - message_json['object']['published'] - if edited_published: - message_json['published'] = \ - edited_published - message_json['object']['published'] = \ - edited_published - message_json['id'] = \ - edited_postid + '/activity' - message_json['object']['id'] = \ - edited_postid - message_json['object']['url'] = \ - edited_postid - message_json['updated'] = \ - edited_updated - message_json['object']['updated'] = \ - edited_updated - message_json['type'] = 'Update' + self._update_edited_post(message_json, + edited_published, + edited_postid) print('DEBUG: sending edited unlisted post ' + str(message_json)) @@ -19808,24 +19804,9 @@ class PubServer(BaseHTTPRequestHandler): self.server.translate) if message_json: if edited_postid: - edited_updated = \ - message_json['object']['published'] - if edited_published: - message_json['published'] = \ - edited_published - message_json['object']['published'] = \ - edited_published - message_json['id'] = \ - edited_postid + '/activity' - message_json['object']['id'] = \ - edited_postid - message_json['object']['url'] = \ - edited_postid - message_json['updated'] = \ - edited_updated - message_json['object']['updated'] = \ - edited_updated - message_json['type'] = 'Update' + self._update_edited_post(message_json, + edited_published, + edited_postid) print('DEBUG: sending edited followers post ' + str(message_json)) @@ -19905,24 +19886,9 @@ class PubServer(BaseHTTPRequestHandler): print('DEBUG: posting DM edited_postid ' + str(edited_postid)) if edited_postid: - edited_updated = \ - message_json['object']['published'] - if edited_published: - message_json['published'] = \ - edited_published - message_json['object']['published'] = \ - edited_published - message_json['id'] = \ - edited_postid + '/activity' - message_json['object']['id'] = \ - edited_postid - message_json['object']['url'] = \ - edited_postid - message_json['updated'] = \ - edited_updated - message_json['object']['updated'] = \ - edited_updated - message_json['type'] = 'Update' + self._update_edited_post(message_json, + edited_published, + edited_postid) print('DEBUG: sending edited dm post ' + str(message_json)) From c298d28cf28d0bfab8bb3745b76abf564163f17f Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 17 Nov 2022 11:35:17 +0000 Subject: [PATCH 02/11] When a post is edited remove the previous cached html so that the user interface updates --- daemon.py | 55 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/daemon.py b/daemon.py index 7a1b8b835..87130cd1a 100644 --- a/daemon.py +++ b/daemon.py @@ -439,13 +439,32 @@ SHARES_PER_PAGE = 12 class PubServer(BaseHTTPRequestHandler): protocol_version = 'HTTP/1.1' - def _update_edited_post(self, message_json: {}, + def _update_edited_post(self, base_dir: str, + nickname: str, domain: str, + message_json: {}, edited_published: str, - edited_postid: str) -> None: + edited_postid: str, + recent_posts_cache: {}) -> None: """When an edited post is created this assigns a published and updated date to it, and uses the previous id """ + # ensure that the cached post is removed if it exists, + # so that it then will be recreated + cached_post_filename = \ + get_cached_post_filename(base_dir, nickname, domain, + message_json) + if cached_post_filename: + if os.path.isfile(cached_post_filename): + try: + os.remove(cached_post_filename) + except OSError: + print('EX: _update_edited_post ' + + 'unable to delete ' + + cached_post_filename) + # remove from memory cache + remove_post_from_cache(message_json, recent_posts_cache) + edited_updated = \ message_json['object']['published'] if edited_published: @@ -19474,9 +19493,13 @@ class PubServer(BaseHTTPRequestHandler): self.server.translate) if message_json: if edited_postid: - self._update_edited_post(message_json, + recent_posts_cache = self.server.recent_posts_cache + self._update_edited_post(self.server.base_dir, + nickname, self.server.domain, + message_json, edited_published, - edited_postid) + edited_postid, + recent_posts_cache) print('DEBUG: sending edited public post ' + str(message_json)) if fields['schedulePost']: @@ -19736,9 +19759,13 @@ class PubServer(BaseHTTPRequestHandler): self.server.translate) if message_json: if edited_postid: - self._update_edited_post(message_json, + recent_posts_cache = self.server.recent_posts_cache + self._update_edited_post(self.server.base_dir, + nickname, self.server.domain, + message_json, edited_published, - edited_postid) + edited_postid, + recent_posts_cache) print('DEBUG: sending edited unlisted post ' + str(message_json)) @@ -19804,9 +19831,13 @@ class PubServer(BaseHTTPRequestHandler): self.server.translate) if message_json: if edited_postid: - self._update_edited_post(message_json, + recent_posts_cache = self.server.recent_posts_cache + self._update_edited_post(self.server.base_dir, + nickname, self.server.domain, + message_json, edited_published, - edited_postid) + edited_postid, + recent_posts_cache) print('DEBUG: sending edited followers post ' + str(message_json)) @@ -19886,9 +19917,13 @@ class PubServer(BaseHTTPRequestHandler): print('DEBUG: posting DM edited_postid ' + str(edited_postid)) if edited_postid: - self._update_edited_post(message_json, + recent_posts_cache = self.server.recent_posts_cache + self._update_edited_post(self.server.base_dir, + nickname, self.server.domain, + message_json, edited_published, - edited_postid) + edited_postid, + recent_posts_cache) print('DEBUG: sending edited dm post ' + str(message_json)) From 6d5a9eb127ba1fb3f29c90f868f5bb7ab2aaa97c Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 17 Nov 2022 12:00:19 +0000 Subject: [PATCH 03/11] Remove from cache after chaning id --- daemon.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/daemon.py b/daemon.py index 87130cd1a..4d879df02 100644 --- a/daemon.py +++ b/daemon.py @@ -449,22 +449,6 @@ class PubServer(BaseHTTPRequestHandler): a published and updated date to it, and uses the previous id """ - # ensure that the cached post is removed if it exists, - # so that it then will be recreated - cached_post_filename = \ - get_cached_post_filename(base_dir, nickname, domain, - message_json) - if cached_post_filename: - if os.path.isfile(cached_post_filename): - try: - os.remove(cached_post_filename) - except OSError: - print('EX: _update_edited_post ' + - 'unable to delete ' + - cached_post_filename) - # remove from memory cache - remove_post_from_cache(message_json, recent_posts_cache) - edited_updated = \ message_json['object']['published'] if edited_published: @@ -484,6 +468,22 @@ class PubServer(BaseHTTPRequestHandler): edited_updated message_json['type'] = 'Update' + # ensure that the cached post is removed if it exists, + # so that it then will be recreated + cached_post_filename = \ + get_cached_post_filename(base_dir, nickname, domain, + message_json) + if cached_post_filename: + if os.path.isfile(cached_post_filename): + try: + os.remove(cached_post_filename) + except OSError: + print('EX: _update_edited_post ' + + 'unable to delete ' + + cached_post_filename) + # remove from memory cache + remove_post_from_cache(message_json, recent_posts_cache) + def _convert_domains(self, calling_domain, referer_domain, msg_str: str) -> str: """Convert domains to onion or i2p, depending upon who is asking From ef84f2a399298082d498337458fb34101b1b58c6 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 17 Nov 2022 17:14:14 +0000 Subject: [PATCH 04/11] Update index after edit --- daemon.py | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/daemon.py b/daemon.py index 4d879df02..e74efabe1 100644 --- a/daemon.py +++ b/daemon.py @@ -444,7 +444,8 @@ class PubServer(BaseHTTPRequestHandler): message_json: {}, edited_published: str, edited_postid: str, - recent_posts_cache: {}) -> None: + recent_posts_cache: {}, + box_name: str) -> None: """When an edited post is created this assigns a published and updated date to it, and uses the previous id @@ -483,6 +484,21 @@ class PubServer(BaseHTTPRequestHandler): cached_post_filename) # remove from memory cache remove_post_from_cache(message_json, recent_posts_cache) + # update the index + id_str = edited_postid.split('/')[-1] + index_filename = \ + acct_dir(base_dir, nickname, domain) + '/' + box_name + '.index' + if not text_in_file(id_str, index_filename): + try: + with open(index_filename, 'r+', + encoding='utf-8') as fp_index: + content = fp_index.read() + if id_str + '\n' not in content: + fp_index.seek(0, 0) + fp_index.write(id_str + '\n' + content) + except OSError as ex: + print('WARN: Failed to write index after edit ' + + index_filename + ' ' + str(ex)) def _convert_domains(self, calling_domain, referer_domain, msg_str: str) -> str: @@ -19499,7 +19515,8 @@ class PubServer(BaseHTTPRequestHandler): message_json, edited_published, edited_postid, - recent_posts_cache) + recent_posts_cache, + 'outbox') print('DEBUG: sending edited public post ' + str(message_json)) if fields['schedulePost']: @@ -19765,7 +19782,8 @@ class PubServer(BaseHTTPRequestHandler): message_json, edited_published, edited_postid, - recent_posts_cache) + recent_posts_cache, + 'outbox') print('DEBUG: sending edited unlisted post ' + str(message_json)) @@ -19837,7 +19855,8 @@ class PubServer(BaseHTTPRequestHandler): message_json, edited_published, edited_postid, - recent_posts_cache) + recent_posts_cache, + 'outbox') print('DEBUG: sending edited followers post ' + str(message_json)) @@ -19923,7 +19942,8 @@ class PubServer(BaseHTTPRequestHandler): message_json, edited_published, edited_postid, - recent_posts_cache) + recent_posts_cache, + 'outbox') print('DEBUG: sending edited dm post ' + str(message_json)) From 595b32a2bf3902825f2b0dc4d853cd7483a98beb Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 17 Nov 2022 17:40:23 +0000 Subject: [PATCH 05/11] Simplify --- daemon.py | 33 +++------------------------------ 1 file changed, 3 insertions(+), 30 deletions(-) diff --git a/daemon.py b/daemon.py index e74efabe1..d7a7bae83 100644 --- a/daemon.py +++ b/daemon.py @@ -469,36 +469,9 @@ class PubServer(BaseHTTPRequestHandler): edited_updated message_json['type'] = 'Update' - # ensure that the cached post is removed if it exists, - # so that it then will be recreated - cached_post_filename = \ - get_cached_post_filename(base_dir, nickname, domain, - message_json) - if cached_post_filename: - if os.path.isfile(cached_post_filename): - try: - os.remove(cached_post_filename) - except OSError: - print('EX: _update_edited_post ' + - 'unable to delete ' + - cached_post_filename) - # remove from memory cache - remove_post_from_cache(message_json, recent_posts_cache) - # update the index - id_str = edited_postid.split('/')[-1] - index_filename = \ - acct_dir(base_dir, nickname, domain) + '/' + box_name + '.index' - if not text_in_file(id_str, index_filename): - try: - with open(index_filename, 'r+', - encoding='utf-8') as fp_index: - content = fp_index.read() - if id_str + '\n' not in content: - fp_index.seek(0, 0) - fp_index.write(id_str + '\n' + content) - except OSError as ex: - print('WARN: Failed to write index after edit ' + - index_filename + ' ' + str(ex)) + # update memory cache + if recent_posts_cache['html'].get(edited_postid): + del recent_posts_cache['html'][edited_postid] def _convert_domains(self, calling_domain, referer_domain, msg_str: str) -> str: From 0859de93ca2558a33014ffb99fdc35ae45e711aa Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 17 Nov 2022 17:46:55 +0000 Subject: [PATCH 06/11] Update index --- daemon.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/daemon.py b/daemon.py index d7a7bae83..61548d1bc 100644 --- a/daemon.py +++ b/daemon.py @@ -473,6 +473,22 @@ class PubServer(BaseHTTPRequestHandler): if recent_posts_cache['html'].get(edited_postid): del recent_posts_cache['html'][edited_postid] + # update the index + id_str = edited_postid.split('/')[-1] + index_filename = \ + acct_dir(base_dir, nickname, domain) + '/' + box_name + '.index' + if not text_in_file(id_str, index_filename): + try: + with open(index_filename, 'r+', + encoding='utf-8') as fp_index: + content = fp_index.read() + if id_str + '\n' not in content: + fp_index.seek(0, 0) + fp_index.write(id_str + '\n' + content) + except OSError as ex: + print('WARN: Failed to write index after edit ' + + index_filename + ' ' + str(ex)) + def _convert_domains(self, calling_domain, referer_domain, msg_str: str) -> str: """Convert domains to onion or i2p, depending upon who is asking From 2653902825407d5ce8da0ccf0dcc3e4cb286ef62 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 17 Nov 2022 19:08:21 +0000 Subject: [PATCH 07/11] Receiving edited posts --- daemon.py | 198 +++++++++++++++++++++++++++++++++++++++++++++++++++--- inbox.py | 74 ++++++++++---------- 2 files changed, 227 insertions(+), 45 deletions(-) diff --git a/daemon.py b/daemon.py index 61548d1bc..772e8c061 100644 --- a/daemon.py +++ b/daemon.py @@ -114,6 +114,7 @@ from inbox import run_inbox_queue from inbox import run_inbox_queue_watchdog from inbox import save_post_to_inbox_queue from inbox import populate_replies +from inbox import receive_edit_to_post from follow import follower_approval_active from follow import is_following_actor from follow import get_following_feed @@ -445,7 +446,23 @@ class PubServer(BaseHTTPRequestHandler): edited_published: str, edited_postid: str, recent_posts_cache: {}, - box_name: str) -> None: + box_name: str, + max_mentions: int, max_emoji: int, + allow_local_network_access: bool, + debug: bool, + system_language: str, http_prefix: str, + domain_full: str, person_cache: {}, + signing_priv_key_pem: str, + max_recent_posts: int, translate: {}, + session, cached_webfingers: {}, port: int, + allow_deletion: bool, + yt_replace_domain: str, + twitter_replacement_domain: str, + show_published_date_only: bool, + peertube_instances: [], + theme_name: str, max_like_count: int, + cw_lists: {}, dogwhistles: {}, + min_images_for_accounts: []) -> None: """When an edited post is created this assigns a published and updated date to it, and uses the previous id @@ -469,9 +486,30 @@ class PubServer(BaseHTTPRequestHandler): edited_updated message_json['type'] = 'Update' - # update memory cache - if recent_posts_cache['html'].get(edited_postid): - del recent_posts_cache['html'][edited_postid] + message_json2 = message_json.copy() + receive_edit_to_post(recent_posts_cache, + message_json2, + base_dir, + nickname, domain, + max_mentions, max_emoji, + allow_local_network_access, + debug, + system_language, http_prefix, + domain_full, person_cache, + signing_priv_key_pem, + max_recent_posts, + translate, + session, + cached_webfingers, + port, + allow_deletion, + yt_replace_domain, + twitter_replacement_domain, + show_published_date_only, + peertube_instances, + theme_name, max_like_count, + cw_lists, dogwhistles, + min_images_for_accounts) # update the index id_str = edited_postid.split('/')[-1] @@ -19499,13 +19537,49 @@ class PubServer(BaseHTTPRequestHandler): if message_json: if edited_postid: recent_posts_cache = self.server.recent_posts_cache + allow_local_network_access = \ + self.server.allow_local_network_access + signing_priv_key_pem = \ + self.server.signing_priv_key_pem + twitter_replacement_domain = \ + self.server.twitter_replacement_domain + show_published_date_only = \ + self.server.show_published_date_only + min_images_for_accounts = \ + self.server.min_images_for_accounts + peertube_instances = \ + self.server.peertube_instances self._update_edited_post(self.server.base_dir, nickname, self.server.domain, message_json, edited_published, edited_postid, recent_posts_cache, - 'outbox') + 'outbox', + self.server.max_mentions, + self.server.max_emoji, + allow_local_network_access, + self.server.debug, + self.server.system_language, + self.server.http_prefix, + self.server.domain_full, + self.server.person_cache, + signing_priv_key_pem, + self.server.max_recent_posts, + self.server.translate, + curr_session, + self.server.cached_webfingers, + self.server.port, + self.server.allow_deletion, + self.server.yt_replace_domain, + twitter_replacement_domain, + show_published_date_only, + peertube_instances, + self.server.theme_name, + self.server.max_like_count, + self.server.cw_lists, + self.server.dogwhistles, + min_images_for_accounts) print('DEBUG: sending edited public post ' + str(message_json)) if fields['schedulePost']: @@ -19766,13 +19840,49 @@ class PubServer(BaseHTTPRequestHandler): if message_json: if edited_postid: recent_posts_cache = self.server.recent_posts_cache + allow_local_network_access = \ + self.server.allow_local_network_access + signing_priv_key_pem = \ + self.server.signing_priv_key_pem + twitter_replacement_domain = \ + self.server.twitter_replacement_domain + show_published_date_only = \ + self.server.show_published_date_only + min_images_for_accounts = \ + self.server.min_images_for_accounts + peertube_instances = \ + self.server.peertube_instances self._update_edited_post(self.server.base_dir, nickname, self.server.domain, message_json, edited_published, edited_postid, recent_posts_cache, - 'outbox') + 'outbox', + self.server.max_mentions, + self.server.max_emoji, + allow_local_network_access, + self.server.debug, + self.server.system_language, + self.server.http_prefix, + self.server.domain_full, + self.server.person_cache, + signing_priv_key_pem, + self.server.max_recent_posts, + self.server.translate, + curr_session, + self.server.cached_webfingers, + self.server.port, + self.server.allow_deletion, + self.server.yt_replace_domain, + twitter_replacement_domain, + show_published_date_only, + peertube_instances, + self.server.theme_name, + self.server.max_like_count, + self.server.cw_lists, + self.server.dogwhistles, + min_images_for_accounts) print('DEBUG: sending edited unlisted post ' + str(message_json)) @@ -19839,13 +19949,49 @@ class PubServer(BaseHTTPRequestHandler): if message_json: if edited_postid: recent_posts_cache = self.server.recent_posts_cache + allow_local_network_access = \ + self.server.allow_local_network_access + signing_priv_key_pem = \ + self.server.signing_priv_key_pem + twitter_replacement_domain = \ + self.server.twitter_replacement_domain + show_published_date_only = \ + self.server.show_published_date_only + min_images_for_accounts = \ + self.server.min_images_for_accounts + peertube_instances = \ + self.server.peertube_instances self._update_edited_post(self.server.base_dir, nickname, self.server.domain, message_json, edited_published, edited_postid, recent_posts_cache, - 'outbox') + 'outbox', + self.server.max_mentions, + self.server.max_emoji, + allow_local_network_access, + self.server.debug, + self.server.system_language, + self.server.http_prefix, + self.server.domain_full, + self.server.person_cache, + signing_priv_key_pem, + self.server.max_recent_posts, + self.server.translate, + curr_session, + self.server.cached_webfingers, + self.server.port, + self.server.allow_deletion, + self.server.yt_replace_domain, + twitter_replacement_domain, + show_published_date_only, + peertube_instances, + self.server.theme_name, + self.server.max_like_count, + self.server.cw_lists, + self.server.dogwhistles, + min_images_for_accounts) print('DEBUG: sending edited followers post ' + str(message_json)) @@ -19926,13 +20072,49 @@ class PubServer(BaseHTTPRequestHandler): str(edited_postid)) if edited_postid: recent_posts_cache = self.server.recent_posts_cache + allow_local_network_access = \ + self.server.allow_local_network_access + signing_priv_key_pem = \ + self.server.signing_priv_key_pem + twitter_replacement_domain = \ + self.server.twitter_replacement_domain + show_published_date_only = \ + self.server.show_published_date_only + min_images_for_accounts = \ + self.server.min_images_for_accounts + peertube_instances = \ + self.server.peertube_instances self._update_edited_post(self.server.base_dir, nickname, self.server.domain, message_json, edited_published, edited_postid, recent_posts_cache, - 'outbox') + 'outbox', + self.server.max_mentions, + self.server.max_emoji, + allow_local_network_access, + self.server.debug, + self.server.system_language, + self.server.http_prefix, + self.server.domain_full, + self.server.person_cache, + signing_priv_key_pem, + self.server.max_recent_posts, + self.server.translate, + curr_session, + self.server.cached_webfingers, + self.server.port, + self.server.allow_deletion, + self.server.yt_replace_domain, + twitter_replacement_domain, + show_published_date_only, + peertube_instances, + self.server.theme_name, + self.server.max_like_count, + self.server.cw_lists, + self.server.dogwhistles, + min_images_for_accounts) print('DEBUG: sending edited dm post ' + str(message_json)) diff --git a/inbox.py b/inbox.py index 0862f269e..813b1b709 100644 --- a/inbox.py +++ b/inbox.py @@ -1137,25 +1137,25 @@ def _receive_update_to_question(recent_posts_cache: {}, message_json: {}, remove_post_from_cache(message_json, recent_posts_cache) -def _receive_edit_to_post(recent_posts_cache: {}, message_json: {}, - base_dir: str, - nickname: str, domain: str, - max_mentions: int, max_emoji: int, - allow_local_network_access: bool, - debug: bool, - system_language: str, http_prefix: str, - domain_full: str, person_cache: {}, - signing_priv_key_pem: str, - max_recent_posts: int, translate: {}, - session, cached_webfingers: {}, port: int, - allow_deletion: bool, - yt_replace_domain: str, - twitter_replacement_domain: str, - show_published_date_only: bool, - peertube_instances: [], - theme_name: str, max_like_count: int, - cw_lists: {}, dogwhistles: {}, - min_images_for_accounts: []) -> bool: +def receive_edit_to_post(recent_posts_cache: {}, message_json: {}, + base_dir: str, + nickname: str, domain: str, + max_mentions: int, max_emoji: int, + allow_local_network_access: bool, + debug: bool, + system_language: str, http_prefix: str, + domain_full: str, person_cache: {}, + signing_priv_key_pem: str, + max_recent_posts: int, translate: {}, + session, cached_webfingers: {}, port: int, + allow_deletion: bool, + yt_replace_domain: str, + twitter_replacement_domain: str, + show_published_date_only: bool, + peertube_instances: [], + theme_name: str, max_like_count: int, + cw_lists: {}, dogwhistles: {}, + min_images_for_accounts: []) -> bool: """A post was edited """ if not has_object_dict(message_json): @@ -1205,7 +1205,7 @@ def _receive_edit_to_post(recent_posts_cache: {}, message_json: {}, # has the content changed? if post_json_object['object']['content'] == \ message_json['object']['content']: - # same content + # same content. Has the summary changed? if 'summary' in post_json_object['object'] and \ 'summary' in message_json['object']: if post_json_object['object']['summary'] == \ @@ -1329,23 +1329,23 @@ def _receive_update_activity(recent_posts_cache: {}, session, base_dir: str, elif message_json['object']['type'] == 'Note': if message_json['object'].get('id'): domain_full = get_full_domain(domain, port) - if _receive_edit_to_post(recent_posts_cache, message_json, - base_dir, nickname, domain, - max_mentions, max_emoji, - allow_local_network_access, - debug, system_language, http_prefix, - domain_full, person_cache, - signing_priv_key_pem, - max_recent_posts, translate, - session, cached_webfingers, port, - allow_deletion, - yt_replace_domain, - twitter_replacement_domain, - show_published_date_only, - peertube_instances, - theme_name, max_like_count, - cw_lists, dogwhistles, - min_images_for_accounts): + if receive_edit_to_post(recent_posts_cache, message_json, + base_dir, nickname, domain, + max_mentions, max_emoji, + allow_local_network_access, + debug, system_language, http_prefix, + domain_full, person_cache, + signing_priv_key_pem, + max_recent_posts, translate, + session, cached_webfingers, port, + allow_deletion, + yt_replace_domain, + twitter_replacement_domain, + show_published_date_only, + peertube_instances, + theme_name, max_like_count, + cw_lists, dogwhistles, + min_images_for_accounts): print('EDITPOST: received ' + message_json['object']['id']) return True else: From 9f02bd6f99fde783fb0c6772b60ec56b692c8782 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 17 Nov 2022 19:13:46 +0000 Subject: [PATCH 08/11] Set max mentions --- daemon.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/daemon.py b/daemon.py index 772e8c061..aabddd30a 100644 --- a/daemon.py +++ b/daemon.py @@ -22204,6 +22204,8 @@ def run_daemon(map_format: str, create_initial_last_seen(base_dir, http_prefix) + httpd.max_mentions = max_mentions + print('THREAD: Creating inbox queue') httpd.thrInboxQueue = \ thread_with_trace(target=run_inbox_queue, From b4770612cd6bb3f6f923104f2f74551c58fbb0d2 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 17 Nov 2022 19:17:09 +0000 Subject: [PATCH 09/11] Set max emoji --- daemon.py | 1 + 1 file changed, 1 insertion(+) diff --git a/daemon.py b/daemon.py index aabddd30a..53a545e3f 100644 --- a/daemon.py +++ b/daemon.py @@ -22205,6 +22205,7 @@ def run_daemon(map_format: str, create_initial_last_seen(base_dir, http_prefix) httpd.max_mentions = max_mentions + httpd.max_emoji = max_emoji print('THREAD: Creating inbox queue') httpd.thrInboxQueue = \ From 91298ab291313b8b356458a0e66fd6d9cae7cde5 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 17 Nov 2022 19:52:20 +0000 Subject: [PATCH 10/11] Update --- outbox.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/outbox.py b/outbox.py index 9e86b8112..bfbe96172 100644 --- a/outbox.py +++ b/outbox.py @@ -414,7 +414,8 @@ def post_message_to_outbox(session, translate: {}, post_id = None if debug: print('DEBUG: save_post_to_box') - if message_json['type'] != 'Upgrade': + + if message_json['type'] != 'Update': outbox_name = 'outbox' store_hash_tags(base_dir, post_to_nickname, domain, From c65be9094b27d0f33de5d6b13543013961168d05 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 17 Nov 2022 20:10:30 +0000 Subject: [PATCH 11/11] Sending updates via outbox --- outbox.py | 266 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 137 insertions(+), 129 deletions(-) diff --git a/outbox.py b/outbox.py index bfbe96172..4132a808f 100644 --- a/outbox.py +++ b/outbox.py @@ -415,148 +415,156 @@ def post_message_to_outbox(session, translate: {}, if debug: print('DEBUG: save_post_to_box') - if message_json['type'] != 'Update': - outbox_name = 'outbox' + is_edited_post = False + if message_json['type'] == 'Update' and \ + message_json['object']['type'] == 'Note': + is_edited_post = True + message_json['type'] = 'Create' - store_hash_tags(base_dir, post_to_nickname, domain, - http_prefix, domain_full, - message_json, translate) + outbox_name = 'outbox' - # if this is a blog post or an event then save to its own box - if message_json['type'] == 'Create': - if has_object_dict(message_json): - if message_json['object'].get('type'): - if message_json['object']['type'] == 'Article': - outbox_name = 'tlblogs' + store_hash_tags(base_dir, post_to_nickname, domain, + http_prefix, domain_full, + message_json, translate) - saved_filename = \ - save_post_to_box(base_dir, - http_prefix, - post_id, - post_to_nickname, domain_full, - message_json, outbox_name) - if not saved_filename: - print('WARN: post not saved to outbox ' + outbox_name) - return False + # if this is a blog post or an event then save to its own box + if message_json['type'] == 'Create': + if has_object_dict(message_json): + if message_json['object'].get('type'): + if message_json['object']['type'] == 'Article': + outbox_name = 'tlblogs' - update_speaker(base_dir, http_prefix, - post_to_nickname, domain, domain_full, - message_json, person_cache, - translate, message_json['actor'], - theme, system_language, - outbox_name) + saved_filename = \ + save_post_to_box(base_dir, + http_prefix, + post_id, + post_to_nickname, domain_full, + message_json, outbox_name) + if not saved_filename: + print('WARN: post not saved to outbox ' + outbox_name) + return False - # save all instance blogs to the news actor - if post_to_nickname != 'news' and outbox_name == 'tlblogs': - if '/' in saved_filename: - if is_featured_writer(base_dir, post_to_nickname, domain): - saved_post_id = saved_filename.split('/')[-1] - blogs_dir = \ - base_dir + '/accounts/news@' + domain + '/tlblogs' - if not os.path.isdir(blogs_dir): - os.mkdir(blogs_dir) - copyfile(saved_filename, blogs_dir + '/' + saved_post_id) - inbox_update_index('tlblogs', base_dir, - 'news@' + domain, - saved_filename, debug) + update_speaker(base_dir, http_prefix, + post_to_nickname, domain, domain_full, + message_json, person_cache, + translate, message_json['actor'], + theme, system_language, + outbox_name) - # clear the citations file if it exists - citations_filename = \ - base_dir + '/accounts/' + \ - post_to_nickname + '@' + domain + '/.citations.txt' - if os.path.isfile(citations_filename): - try: - os.remove(citations_filename) - except OSError: - print('EX: post_message_to_outbox unable to delete ' + - citations_filename) + # save all instance blogs to the news actor + if post_to_nickname != 'news' and outbox_name == 'tlblogs': + if '/' in saved_filename: + if is_featured_writer(base_dir, post_to_nickname, domain): + saved_post_id = saved_filename.split('/')[-1] + blogs_dir = \ + base_dir + '/accounts/news@' + domain + '/tlblogs' + if not os.path.isdir(blogs_dir): + os.mkdir(blogs_dir) + copyfile(saved_filename, blogs_dir + '/' + saved_post_id) + inbox_update_index('tlblogs', base_dir, + 'news@' + domain, + saved_filename, debug) - # The following activity types get added to the index files - indexed_activities = ( - 'Create', 'Question', 'Note', 'EncryptedMessage', 'Article', - 'Patch', 'Announce', 'ChatMessage' - ) - if message_json['type'] in indexed_activities: - indexes = [outbox_name, "inbox"] - self_actor = \ - local_actor_url(http_prefix, post_to_nickname, domain_full) - for box_name_index in indexes: - if not box_name_index: - continue + # clear the citations file if it exists + citations_filename = \ + base_dir + '/accounts/' + \ + post_to_nickname + '@' + domain + '/.citations.txt' + if os.path.isfile(citations_filename): + try: + os.remove(citations_filename) + except OSError: + print('EX: post_message_to_outbox unable to delete ' + + citations_filename) - # should this also go to the media timeline? - if box_name_index == 'inbox': - if is_image_media(session, base_dir, http_prefix, - post_to_nickname, domain, - message_json, - yt_replace_domain, - twitter_replacement_domain, - allow_local_network_access, - recent_posts_cache, debug, - system_language, - domain_full, person_cache, - signing_priv_key_pem, - bold_reading): - inbox_update_index('tlmedia', base_dir, - post_to_nickname + '@' + domain, - saved_filename, debug) + # The following activity types get added to the index files + indexed_activities = ( + 'Create', 'Question', 'Note', 'EncryptedMessage', 'Article', + 'Patch', 'Announce', 'ChatMessage' + ) + if message_json['type'] in indexed_activities: + indexes = [outbox_name, "inbox"] + self_actor = \ + local_actor_url(http_prefix, post_to_nickname, domain_full) + for box_name_index in indexes: + if not box_name_index: + continue - if box_name_index == 'inbox' and outbox_name == 'tlblogs': - continue - - # avoid duplicates of the message if already going - # back to the inbox of the same account - if self_actor not in message_json['to']: - # show sent post within the inbox, - # as is the typical convention - inbox_update_index(box_name_index, base_dir, + # should this also go to the media timeline? + if box_name_index == 'inbox': + if is_image_media(session, base_dir, http_prefix, + post_to_nickname, domain, + message_json, + yt_replace_domain, + twitter_replacement_domain, + allow_local_network_access, + recent_posts_cache, debug, + system_language, + domain_full, person_cache, + signing_priv_key_pem, + bold_reading): + inbox_update_index('tlmedia', base_dir, post_to_nickname + '@' + domain, saved_filename, debug) - # regenerate the html - use_cache_only = False - page_number = 1 - show_individual_post_icons = True - manually_approve_followers = \ - follower_approval_active(base_dir, - post_to_nickname, domain) - timezone = \ - get_account_timezone(base_dir, + if box_name_index == 'inbox' and outbox_name == 'tlblogs': + continue + + # avoid duplicates of the message if already going + # back to the inbox of the same account + if self_actor not in message_json['to']: + # show sent post within the inbox, + # as is the typical convention + inbox_update_index(box_name_index, base_dir, + post_to_nickname + '@' + domain, + saved_filename, debug) + + # regenerate the html + use_cache_only = False + page_number = 1 + show_individual_post_icons = True + manually_approve_followers = \ + follower_approval_active(base_dir, post_to_nickname, domain) - mitm = False - if os.path.isfile(saved_filename.replace('.json', '') + - '.mitm'): - mitm = True - minimize_all_images = False - if post_to_nickname in min_images_for_accounts: - minimize_all_images = True - individual_post_as_html(signing_priv_key_pem, - False, recent_posts_cache, - max_recent_posts, - translate, page_number, - base_dir, session, - cached_webfingers, - person_cache, - post_to_nickname, domain, port, - message_json, None, True, - allow_deletion, - http_prefix, __version__, - box_name_index, - yt_replace_domain, - twitter_replacement_domain, - show_published_date_only, - peertube_instances, - allow_local_network_access, - theme, system_language, - max_like_count, - box_name_index != 'dm', - show_individual_post_icons, - manually_approve_followers, - False, True, use_cache_only, - cw_lists, lists_enabled, - timezone, mitm, - bold_reading, dogwhistles, - minimize_all_images) + timezone = \ + get_account_timezone(base_dir, + post_to_nickname, domain) + mitm = False + if os.path.isfile(saved_filename.replace('.json', '') + + '.mitm'): + mitm = True + minimize_all_images = False + if post_to_nickname in min_images_for_accounts: + minimize_all_images = True + individual_post_as_html(signing_priv_key_pem, + False, recent_posts_cache, + max_recent_posts, + translate, page_number, + base_dir, session, + cached_webfingers, + person_cache, + post_to_nickname, domain, port, + message_json, None, True, + allow_deletion, + http_prefix, __version__, + box_name_index, + yt_replace_domain, + twitter_replacement_domain, + show_published_date_only, + peertube_instances, + allow_local_network_access, + theme, system_language, + max_like_count, + box_name_index != 'dm', + show_individual_post_icons, + manually_approve_followers, + False, True, use_cache_only, + cw_lists, lists_enabled, + timezone, mitm, + bold_reading, dogwhistles, + minimize_all_images) + + if is_edited_post: + message_json['type'] = 'Update' if outbox_announce(recent_posts_cache, base_dir, message_json, debug):