From abf4cb0df1e270fffe78c23d78e051ed911de767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Pav=C3=B3n=20Abi=C3=A1n?= Date: Thu, 5 Feb 2026 09:31:50 +0100 Subject: [PATCH] =?UTF-8?q?Bugs=20y=20restaurar=20mastodon=20a=20su=20esta?= =?UTF-8?q?do=20original,=20que=20se=20toc=C3=B3=20sin=20querer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/buffers/blueski/base.py | 27 ++++++++++++++++------- src/controller/buffers/blueski/chat.py | 19 +++++++++++----- src/controller/mastodon/messages.py | 4 ++-- src/controller/mastodon/templateEditor.py | 4 ++-- src/sessions/mastodon/session.py | 4 ++-- 5 files changed, 39 insertions(+), 19 deletions(-) diff --git a/src/controller/buffers/blueski/base.py b/src/controller/buffers/blueski/base.py index 33710bab..000df279 100644 --- a/src/controller/buffers/blueski/base.py +++ b/src/controller/buffers/blueski/base.py @@ -954,9 +954,14 @@ class BaseBuffer(base.Buffer): return post.get("uri") if it.get("uri"): return it.get("uri") - for key in ("id", "convoId", "convo_id", "messageId", "message_id", "msgId", "msg_id"): + for key in ("id", "cid", "rev", "convoId", "convo_id", "messageId", "message_id", "msgId", "msg_id"): if it.get(key): return it.get(key) + nested = it.get("message") or it.get("record") + if isinstance(nested, dict): + for key in ("id", "cid", "rev", "messageId", "message_id", "msgId", "msg_id"): + if nested.get(key): + return nested.get(key) if it.get("did"): return it.get("did") if it.get("handle"): @@ -965,27 +970,33 @@ class BaseBuffer(base.Buffer): if isinstance(author, dict): return author.get("did") or author.get("handle") # Chat message fallback - sent_at = it.get("sentAt") or it.get("sent_at") - sender = it.get("sender") or {} + sent_at = it.get("sentAt") or it.get("sent_at") or it.get("createdAt") or it.get("created_at") + sender = it.get("sender") or (nested.get("sender") if isinstance(nested, dict) else {}) or {} sender_did = sender.get("did") if isinstance(sender, dict) else None - text = it.get("text") + text = it.get("text") or (nested.get("text") if isinstance(nested, dict) else None) if sent_at or sender_did or text: return (sent_at, sender_did, text) return None post = getattr(it, "post", None) if post is not None: return getattr(post, "uri", None) - for attr in ("uri", "id", "convoId", "convo_id", "messageId", "message_id", "msgId", "msg_id", "did", "handle"): + for attr in ("uri", "id", "cid", "rev", "convoId", "convo_id", "messageId", "message_id", "msgId", "msg_id", "did", "handle"): val = getattr(it, attr, None) if val: return val + nested = getattr(it, "message", None) or getattr(it, "record", None) + if nested is not None: + for attr in ("id", "cid", "rev", "messageId", "message_id", "msgId", "msg_id"): + val = getattr(nested, attr, None) + if val: + return val author = getattr(it, "author", None) if author is not None: return getattr(author, "did", None) or getattr(author, "handle", None) - sent_at = getattr(it, "sentAt", None) or getattr(it, "sent_at", None) - sender = getattr(it, "sender", None) + sent_at = getattr(it, "sentAt", None) or getattr(it, "sent_at", None) or getattr(it, "createdAt", None) or getattr(it, "created_at", None) + sender = getattr(it, "sender", None) or (getattr(nested, "sender", None) if nested is not None else None) sender_did = getattr(sender, "did", None) if sender is not None else None - text = getattr(it, "text", None) + text = getattr(it, "text", None) or (getattr(nested, "text", None) if nested is not None else None) if sent_at or sender_did or text: return (sent_at, sender_did, text) return None diff --git a/src/controller/buffers/blueski/chat.py b/src/controller/buffers/blueski/chat.py index 692861b3..b10adc67 100644 --- a/src/controller/buffers/blueski/chat.py +++ b/src/controller/buffers/blueski/chat.py @@ -92,15 +92,22 @@ class ConversationListBuffer(BaseBuffer): return obj.get(key, default) return getattr(obj, key, default) - for attr in ("id", "messageId", "message_id", "msgId", "msg_id"): + for attr in ("id", "messageId", "message_id", "msgId", "msg_id", "cid", "rev"): val = g(last_msg, attr) if val: return val - sent_at = g(last_msg, "sentAt") or g(last_msg, "sent_at") - sender = g(last_msg, "sender") or {} + nested = g(last_msg, "message") or g(last_msg, "record") + if nested: + for attr in ("id", "messageId", "message_id", "msgId", "msg_id", "cid", "rev"): + val = g(nested, attr) + if val: + return val + + sent_at = g(last_msg, "sentAt") or g(last_msg, "sent_at") or g(last_msg, "createdAt") or g(last_msg, "created_at") + sender = g(last_msg, "sender") or (g(nested, "sender") if nested else {}) or {} sender_did = g(sender, "did") - text = g(last_msg, "text") + text = g(last_msg, "text") or (g(nested, "text") if nested else None) if sent_at or sender_did or text: return (sent_at, sender_did, text) return None @@ -210,11 +217,13 @@ class ConversationListBuffer(BaseBuffer): new_db = [] new_count = 0 + first_load = len(self.session.db[self.name]) == 0 for convo in items: key = self.get_convo_id(convo) or self._get_members_key(convo) new_db.append(convo) if key is None: - new_count += 1 + if first_load: + new_count += 1 continue if key not in existing: new_count += 1 diff --git a/src/controller/mastodon/messages.py b/src/controller/mastodon/messages.py index 5a4648bb..a949cffc 100644 --- a/src/controller/mastodon/messages.py +++ b/src/controller/mastodon/messages.py @@ -21,7 +21,7 @@ def character_count(post_text, post_cw, character_limit=500): # We will use text for counting character limit only. full_text = post_text+post_cw # find remote users as Mastodon doesn't count the domain in char limit. - users = re.findall(r"@[\w\.-]+@[\w\.-]+", full_text) + users = re.findall("@[\w\.-]+@[\w\.-]+", full_text) for user in users: domain = user.split("@")[-1] full_text = full_text.replace("@"+domain, "") @@ -456,4 +456,4 @@ class text(messages.basicMessage): self.message = postDialogs.viewText(title=title, text=text, *args, **kwargs) self.message.text.SetInsertionPoint(len(self.message.text.GetValue())) widgetUtils.connect_event(self.message.spellcheck, widgetUtils.BUTTON_PRESSED, self.spellcheck) - widgetUtils.connect_event(self.message.translateButton, widgetUtils.BUTTON_PRESSED, self.translate) \ No newline at end of file + widgetUtils.connect_event(self.message.translateButton, widgetUtils.BUTTON_PRESSED, self.translate) diff --git a/src/controller/mastodon/templateEditor.py b/src/controller/mastodon/templateEditor.py index df49ee6c..b01e590c 100644 --- a/src/controller/mastodon/templateEditor.py +++ b/src/controller/mastodon/templateEditor.py @@ -20,7 +20,7 @@ class EditTemplate(object): self.template: str = template def validate_template(self, template: str) -> bool: - used_variables: List[str] = re.findall(r"\$\w+", template) + used_variables: List[str] = re.findall("\$\w+", template) validated: bool = True for var in used_variables: if var[1:] not in self.variables: @@ -39,4 +39,4 @@ class EditTemplate(object): else: return dialog.template.GetValue() else: - return "" \ No newline at end of file + return "" diff --git a/src/sessions/mastodon/session.py b/src/sessions/mastodon/session.py index b874955a..38afb900 100644 --- a/src/sessions/mastodon/session.py +++ b/src/sessions/mastodon/session.py @@ -44,7 +44,7 @@ class Session(base.baseSession): if self.settings["mastodon"]["access_token"] != None and self.settings["mastodon"]["instance"] != None: try: log.debug("Logging in to Mastodon instance {}...".format(self.settings["mastodon"]["instance"])) - self.api = mastodon.Mastodon(access_token=self.settings["mastodon"]["access_token"], api_base_url=self.settings["mastodon"]["instance"], mastodon_version=MASTODON_VERSION, user_agent="TWBlue/{}".format(application.version), version_check_mode=self.version_check_mode, request_timeout=30) + self.api = mastodon.Mastodon(access_token=self.settings["mastodon"]["access_token"], api_base_url=self.settings["mastodon"]["instance"], mastodon_version=MASTODON_VERSION, user_agent="TWBlue/{}".format(application.version), version_check_mode=self.version_check_mode) if verify_credentials == True: credentials = self.api.account_verify_credentials() self.db["user_name"] = credentials["username"] @@ -458,4 +458,4 @@ class Session(base.baseSession): # Now, add notification to its buffer. num = self.order_buffer("notifications", [notification]) if num > 0: - pub.sendMessage("mastodon.new_item", session_name=self.get_name(), item=notification, _buffers=["notifications"]) \ No newline at end of file + pub.sendMessage("mastodon.new_item", session_name=self.get_name(), item=notification, _buffers=["notifications"])