Mastodon: Implemented hide emojis for usernames.

This commit is contained in:
Manuel Cortez 2023-04-05 09:17:37 -06:00
parent 0764679164
commit 972b851b93
No known key found for this signature in database
GPG Key ID: 9E0735CA15EFE790
10 changed files with 79 additions and 86 deletions

View File

@ -7,7 +7,8 @@ During the development of the current TWBlue version, Twitter has cut out access
* TWBlue should be able to display variables within templates (for example, now it is possible to send a template inside a post's text). Before, it was removing $variables so it was difficult to show how to edit templates from the client. ([#515](https://github.com/MCV-Software/TWBlue/issues/515)) * TWBlue should be able to display variables within templates (for example, now it is possible to send a template inside a post's text). Before, it was removing $variables so it was difficult to show how to edit templates from the client. ([#515](https://github.com/MCV-Software/TWBlue/issues/515))
* Mastodon: * Mastodon:
* it is possible to add descriptions for all media available on Mastodon (audio, photos, video and Givs). ([#516](https://github.com/MCV-Software/TWBlue/issues/516)) * it is possible to add descriptions for all media available on Mastodon (audio, photos, video and Givs). ([#516](https://github.com/MCV-Software/TWBlue/issues/516))
* Added an experimetal feature to recover from connection errors. When making a post, if the post cannot be published due to any kind of error, TWBlue will bring up the dialog where the post was composed, so you can give the post a second chance or save the post's text. This feature should work for threads, posts with attachments, polls and replies. ([#527,](https://github.com/MCV-Software/TWBlue/issues/527) [#526,](https://github.com/MCV-Software/TWBlue/issues/526) [#377,](https://github.com/MCV-Software/TWBlue/issues/377) [#137,](https://github.com/MCV-Software/TWBlue/issues/137) [#108](https://github.com/MCV-Software/TWBlue/issues/108)) * Implemented "Hide emojis on usernames" in both GUI and invisible interface.
* Added an experimental feature to recover from connection errors. When making a post, if the post cannot be published due to any kind of error, TWBlue will bring up the dialog where the post was composed, so you can give the post a second chance or save the post's text. This feature should work for threads, posts with attachments, polls and replies. ([#527,](https://github.com/MCV-Software/TWBlue/issues/527) [#526,](https://github.com/MCV-Software/TWBlue/issues/526) [#377,](https://github.com/MCV-Software/TWBlue/issues/377) [#137,](https://github.com/MCV-Software/TWBlue/issues/137) [#108](https://github.com/MCV-Software/TWBlue/issues/108))
* Fixed an error on mentions buffer that was making TWBlue unable to load posts if there were mentions from a blocked or deleted account. * Fixed an error on mentions buffer that was making TWBlue unable to load posts if there were mentions from a blocked or deleted account.
## Changes on version 2023.2.6 ## Changes on version 2023.2.6

View File

@ -78,7 +78,7 @@ class BaseBuffer(base.Buffer):
safe = True safe = True
if self.session.settings["general"]["read_preferences_from_instance"]: if self.session.settings["general"]["read_preferences_from_instance"]:
safe = self.session.expand_spoilers == False safe = self.session.expand_spoilers == False
return self.compose_function(self.get_item(), self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)[1] return self.compose_function(self.get_item(), self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)[1]
def get_message(self): def get_message(self):
post = self.get_item() post = self.get_item()
@ -91,7 +91,7 @@ class BaseBuffer(base.Buffer):
template = template.replace("$safe_text", "$text") template = template.replace("$safe_text", "$text")
elif self.session.expand_spoilers == False and "$text" in template: elif self.session.expand_spoilers == False and "$text" in template:
template = template.replace("$text", "$safe_text") template = template.replace("$text", "$safe_text")
t = templates.render_post(post, template, relative_times=self.session.settings["general"]["relative_times"], offset_hours=self.session.db["utc_offset"]) t = templates.render_post(post, template, self.session.settings, relative_times=self.session.settings["general"]["relative_times"], offset_hours=self.session.db["utc_offset"])
return t return t
def start_stream(self, mandatory=False, play_sound=True, avoid_autoreading=False): def start_stream(self, mandatory=False, play_sound=True, avoid_autoreading=False):
@ -138,7 +138,7 @@ class BaseBuffer(base.Buffer):
safe = True safe = True
if self.session.settings["general"]["read_preferences_from_instance"]: if self.session.settings["general"]["read_preferences_from_instance"]:
safe = self.session.expand_spoilers == False safe = self.session.expand_spoilers == False
output.speak(" ".join(self.compose_function(post, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe))) output.speak(" ".join(self.compose_function(post, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)))
elif number_of_items > 1 and self.name in self.session.settings["other_buffers"]["autoread_buffers"] and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and self.session.settings["sound"]["session_mute"] == False: elif number_of_items > 1 and self.name in self.session.settings["other_buffers"]["autoread_buffers"] and self.name not in self.session.settings["other_buffers"]["muted_buffers"] and self.session.settings["sound"]["session_mute"] == False:
output.speak(_("{0} new posts in {1}.").format(number_of_items, self.get_buffer_name())) output.speak(_("{0} new posts in {1}.").format(number_of_items, self.get_buffer_name()))
@ -169,11 +169,11 @@ class BaseBuffer(base.Buffer):
safe = self.session.expand_spoilers == False safe = self.session.expand_spoilers == False
if self.session.settings["general"]["reverse_timelines"] == False: if self.session.settings["general"]["reverse_timelines"] == False:
for i in elements: for i in elements:
post = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe) post = self.compose_function(i, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)
self.buffer.list.insert_item(True, *post) self.buffer.list.insert_item(True, *post)
else: else:
for i in elements: for i in elements:
post = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe) post = self.compose_function(i, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)
self.buffer.list.insert_item(False, *post) self.buffer.list.insert_item(False, *post)
self.buffer.list.select_item(selection) self.buffer.list.select_item(selection)
output.speak(_(u"%s items retrieved") % (str(len(elements))), True) output.speak(_(u"%s items retrieved") % (str(len(elements))), True)
@ -207,20 +207,20 @@ class BaseBuffer(base.Buffer):
safe = self.session.expand_spoilers == False safe = self.session.expand_spoilers == False
if self.buffer.list.get_count() == 0: if self.buffer.list.get_count() == 0:
for i in list_to_use: for i in list_to_use:
post = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe) post = self.compose_function(i, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)
self.buffer.list.insert_item(False, *post) self.buffer.list.insert_item(False, *post)
self.buffer.set_position(self.session.settings["general"]["reverse_timelines"]) self.buffer.set_position(self.session.settings["general"]["reverse_timelines"])
elif self.buffer.list.get_count() > 0 and number_of_items > 0: elif self.buffer.list.get_count() > 0 and number_of_items > 0:
if self.session.settings["general"]["reverse_timelines"] == False: if self.session.settings["general"]["reverse_timelines"] == False:
items = list_to_use[len(list_to_use)-number_of_items:] items = list_to_use[len(list_to_use)-number_of_items:]
for i in items: for i in items:
post = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe) post = self.compose_function(i, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)
self.buffer.list.insert_item(False, *post) self.buffer.list.insert_item(False, *post)
else: else:
items = list_to_use[0:number_of_items] items = list_to_use[0:number_of_items]
items.reverse() items.reverse()
for i in items: for i in items:
post = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe) post = self.compose_function(i, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)
self.buffer.list.insert_item(True, *post) self.buffer.list.insert_item(True, *post)
log.debug("Now the list contains %d items " % (self.buffer.list.get_count(),)) log.debug("Now the list contains %d items " % (self.buffer.list.get_count(),))
@ -228,7 +228,7 @@ class BaseBuffer(base.Buffer):
safe = True safe = True
if self.session.settings["general"]["read_preferences_from_instance"]: if self.session.settings["general"]["read_preferences_from_instance"]:
safe = self.session.expand_spoilers == False safe = self.session.expand_spoilers == False
post = self.compose_function(item, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe) post = self.compose_function(item, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)
if self.session.settings["general"]["reverse_timelines"] == False: if self.session.settings["general"]["reverse_timelines"] == False:
self.buffer.list.insert_item(False, *post) self.buffer.list.insert_item(False, *post)
else: else:
@ -240,7 +240,7 @@ class BaseBuffer(base.Buffer):
safe = True safe = True
if self.session.settings["general"]["read_preferences_from_instance"]: if self.session.settings["general"]["read_preferences_from_instance"]:
safe = self.session.expand_spoilers == False safe = self.session.expand_spoilers == False
post = self.compose_function(item, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe) post = self.compose_function(item, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)
self.buffer.list.list.SetItem(position, 1, post[1]) self.buffer.list.list.SetItem(position, 1, post[1])
def bind_events(self): def bind_events(self):
@ -412,6 +412,7 @@ class BaseBuffer(base.Buffer):
item = self.get_item() item = self.get_item()
if item == None: if item == None:
return return
print(item)
urls = utils.get_media_urls(item) urls = utils.get_media_urls(item)
if len(urls) == 1: if len(urls) == 1:
url=urls[0] url=urls[0]

View File

@ -28,7 +28,7 @@ class ConversationListBuffer(BaseBuffer):
return self.session.db[self.name][index] return self.session.db[self.name][index]
def get_formatted_message(self): def get_formatted_message(self):
return self.compose_function(self.get_conversation(), self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"])[1] return self.compose_function(self.get_conversation(), self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"])[1]
def get_message(self): def get_message(self):
conversation = self.get_conversation() conversation = self.get_conversation()
@ -36,7 +36,7 @@ class ConversationListBuffer(BaseBuffer):
return return
template = self.session.settings["templates"]["conversation"] template = self.session.settings["templates"]["conversation"]
post_template = self.session.settings["templates"]["post"] post_template = self.session.settings["templates"]["post"]
t = templates.render_conversation(conversation=conversation, template=template, post_template=post_template, relative_times=self.session.settings["general"]["relative_times"], offset_hours=self.session.db["utc_offset"]) t = templates.render_conversation(conversation=conversation, template=template, post_template=post_template, settings=self.session.settings, relative_times=self.session.settings["general"]["relative_times"], offset_hours=self.session.db["utc_offset"])
return t return t
def start_stream(self, mandatory=False, play_sound=True, avoid_autoreading=False): def start_stream(self, mandatory=False, play_sound=True, avoid_autoreading=False):
@ -89,11 +89,11 @@ class ConversationListBuffer(BaseBuffer):
log.debug("Retrieved %d items from cursored search in function %s." % (len(elements), self.function)) log.debug("Retrieved %d items from cursored search in function %s." % (len(elements), self.function))
if self.session.settings["general"]["reverse_timelines"] == False: if self.session.settings["general"]["reverse_timelines"] == False:
for i in elements: for i in elements:
conversation = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"]) conversation = self.compose_function(i, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"])
self.buffer.list.insert_item(True, *conversation) self.buffer.list.insert_item(True, *conversation)
else: else:
for i in elements: for i in elements:
conversation = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"]) conversation = self.compose_function(i, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"])
self.buffer.list.insert_item(False, *conversation) self.buffer.list.insert_item(False, *conversation)
self.buffer.list.select_item(selection) self.buffer.list.select_item(selection)
output.speak(_(u"%s items retrieved") % (str(len(elements))), True) output.speak(_(u"%s items retrieved") % (str(len(elements))), True)

View File

@ -69,11 +69,11 @@ class MentionsBuffer(BaseBuffer):
safe = self.session.expand_spoilers == False safe = self.session.expand_spoilers == False
if self.session.settings["general"]["reverse_timelines"] == False: if self.session.settings["general"]["reverse_timelines"] == False:
for i in elements: for i in elements:
post = self.compose_function(i.status, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe) post = self.compose_function(i.status, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)
self.buffer.list.insert_item(True, *post) self.buffer.list.insert_item(True, *post)
else: else:
for i in elements: for i in elements:
post = self.compose_function(i.status, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe) post = self.compose_function(i.status, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)
self.buffer.list.insert_item(False, *post) self.buffer.list.insert_item(False, *post)
self.buffer.list.select_item(selection) self.buffer.list.select_item(selection)
output.speak(_(u"%s items retrieved") % (str(len(elements))), True) output.speak(_(u"%s items retrieved") % (str(len(elements))), True)
@ -88,20 +88,20 @@ class MentionsBuffer(BaseBuffer):
safe = self.session.expand_spoilers == False safe = self.session.expand_spoilers == False
if self.buffer.list.get_count() == 0: if self.buffer.list.get_count() == 0:
for i in list_to_use: for i in list_to_use:
post = self.compose_function(i.status, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe) post = self.compose_function(i.status, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)
self.buffer.list.insert_item(False, *post) self.buffer.list.insert_item(False, *post)
self.buffer.set_position(self.session.settings["general"]["reverse_timelines"]) self.buffer.set_position(self.session.settings["general"]["reverse_timelines"])
elif self.buffer.list.get_count() > 0 and number_of_items > 0: elif self.buffer.list.get_count() > 0 and number_of_items > 0:
if self.session.settings["general"]["reverse_timelines"] == False: if self.session.settings["general"]["reverse_timelines"] == False:
items = list_to_use[len(list_to_use)-number_of_items:] items = list_to_use[len(list_to_use)-number_of_items:]
for i in items: for i in items:
post = self.compose_function(i.status, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe) post = self.compose_function(i.status, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)
self.buffer.list.insert_item(False, *post) self.buffer.list.insert_item(False, *post)
else: else:
items = list_to_use[0:number_of_items] items = list_to_use[0:number_of_items]
items.reverse() items.reverse()
for i in items: for i in items:
post = self.compose_function(i.status, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe) post = self.compose_function(i.status, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)
self.buffer.list.insert_item(True, *post) self.buffer.list.insert_item(True, *post)
log.debug("Now the list contains %d items " % (self.buffer.list.get_count(),)) log.debug("Now the list contains %d items " % (self.buffer.list.get_count(),))
@ -109,7 +109,7 @@ class MentionsBuffer(BaseBuffer):
safe = True safe = True
if self.session.settings["general"]["read_preferences_from_instance"]: if self.session.settings["general"]["read_preferences_from_instance"]:
safe = self.session.expand_spoilers == False safe = self.session.expand_spoilers == False
post = self.compose_function(item.status, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe) post = self.compose_function(item.status, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"], safe=safe)
if self.session.settings["general"]["reverse_timelines"] == False: if self.session.settings["general"]["reverse_timelines"] == False:
self.buffer.list.insert_item(False, *post) self.buffer.list.insert_item(False, *post)
else: else:

View File

@ -18,7 +18,7 @@ class NotificationsBuffer(BaseBuffer):
return return
template = self.session.settings["templates"]["notification"] template = self.session.settings["templates"]["notification"]
post_template = self.session.settings["templates"]["post"] post_template = self.session.settings["templates"]["post"]
t = templates.render_notification(notification, template, post_template, relative_times=self.session.settings["general"]["relative_times"], offset_hours=self.session.db["utc_offset"]) t = templates.render_notification(notification, template, post_template, self.session.settings, relative_times=self.session.settings["general"]["relative_times"], offset_hours=self.session.db["utc_offset"])
return t return t
def create_buffer(self, parent, name): def create_buffer(self, parent, name):

View File

@ -22,7 +22,7 @@ class UserBuffer(BaseBuffer):
if user == None: if user == None:
return return
template = self.session.settings["templates"]["person"] template = self.session.settings["templates"]["person"]
t = templates.render_user(user=user, template=template, relative_times=self.session.settings["general"]["relative_times"], offset_hours=self.session.db["utc_offset"]) t = templates.render_user(user=user, template=template, settings=self.session.settings, relative_times=self.session.settings["general"]["relative_times"], offset_hours=self.session.db["utc_offset"])
return t return t
def bind_events(self): def bind_events(self):
@ -123,11 +123,11 @@ class UserBuffer(BaseBuffer):
log.debug("Retrieved %d items from cursored search in function %s." % (len(elements), self.function)) log.debug("Retrieved %d items from cursored search in function %s." % (len(elements), self.function))
if self.session.settings["general"]["reverse_timelines"] == False: if self.session.settings["general"]["reverse_timelines"] == False:
for i in elements: for i in elements:
post = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"]) post = self.compose_function(i, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"])
self.buffer.list.insert_item(True, *post) self.buffer.list.insert_item(True, *post)
else: else:
for i in elements: for i in elements:
post = self.compose_function(i, self.session.db, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"]) post = self.compose_function(i, self.session.db, self.session.settings, self.session.settings["general"]["relative_times"], self.session.settings["general"]["show_screen_names"])
self.buffer.list.insert_item(False, *post) self.buffer.list.insert_item(False, *post)
self.buffer.list.select_item(selection) self.buffer.list.select_item(selection)
output.speak(_(u"%s items retrieved") % (str(len(elements))), True) output.speak(_(u"%s items retrieved") % (str(len(elements))), True)

View File

@ -3,11 +3,9 @@ import arrow
import languageHandler import languageHandler
from . import utils, templates from . import utils, templates
def compose_post(post, db, relative_times, show_screen_names, safe=True): def compose_post(post, db, settings, relative_times, show_screen_names, safe=True):
if show_screen_names == False: if show_screen_names == False:
user = post.account.get("display_name") user = utils.get_user_alias(post.account, settings)
if user == "":
user = post.account.get("username")
else: else:
user = post.account.get("acct") user = post.account.get("acct")
original_date = arrow.get(post.created_at) original_date = arrow.get(post.created_at)
@ -27,34 +25,30 @@ def compose_post(post, db, relative_times, show_screen_names, safe=True):
source = "" source = ""
return [user+", ", text, ts+", ", source] return [user+", ", text, ts+", ", source]
def compose_user(user, db, relative_times=True, show_screen_names=False, safe=False): def compose_user(user, db, settings, relative_times=True, show_screen_names=False, safe=False):
original_date = arrow.get(user.created_at) original_date = arrow.get(user.created_at)
if relative_times: if relative_times:
ts = original_date.humanize(locale=languageHandler.curLang[:2]) ts = original_date.humanize(locale=languageHandler.curLang[:2])
else: else:
ts = original_date.shift(hours=db["utc_offset"]).format(_("dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.curLang[:2]) ts = original_date.shift(hours=db["utc_offset"]).format(_("dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.curLang[:2])
name = user.display_name name = utils.get_user_alias(user, settings)
if name == "":
name = user.get("username")
return [_("%s (@%s). %s followers, %s following, %s posts. Joined %s") % (name, user.acct, user.followers_count, user.following_count, user.statuses_count, ts)] return [_("%s (@%s). %s followers, %s following, %s posts. Joined %s") % (name, user.acct, user.followers_count, user.following_count, user.statuses_count, ts)]
def compose_conversation(conversation, db, relative_times, show_screen_names, safe=False): def compose_conversation(conversation, db, settings, relative_times, show_screen_names, safe=False):
users = [] users = []
for account in conversation.accounts: for account in conversation.accounts:
if account.display_name != "": if account.display_name != "":
users.append(account.display_name) users.append(utils.get_user_alias(account, settings))
else: else:
users.append(account.username) users.append(account.username)
users = ", ".join(users) users = ", ".join(users)
last_post = compose_post(conversation.last_status, db, relative_times, show_screen_names) last_post = compose_post(conversation.last_status, db, settings, relative_times, show_screen_names)
text = _("Last message from {}: {}").format(last_post[0], last_post[1]) text = _("Last message from {}: {}").format(last_post[0], last_post[1])
return [users, text, last_post[-2], last_post[-1]] return [users, text, last_post[-2], last_post[-1]]
def compose_notification(notification, db, relative_times, show_screen_names, safe=False): def compose_notification(notification, db, settings, relative_times, show_screen_names, safe=False):
if show_screen_names == False: if show_screen_names == False:
user = notification.account.get("display_name") user = utils.get_user_alias(notification.account, settings)
if user == "":
user = notification.account.get("username")
else: else:
user = notification.account.get("acct") user = notification.account.get("acct")
original_date = arrow.get(notification.created_at) original_date = arrow.get(notification.created_at)
@ -64,19 +58,19 @@ def compose_notification(notification, db, relative_times, show_screen_names, sa
ts = original_date.shift(hours=db["utc_offset"]).format(_("dddd, MMMM D, YYYY H:m"), locale=languageHandler.curLang[:2]) ts = original_date.shift(hours=db["utc_offset"]).format(_("dddd, MMMM D, YYYY H:m"), locale=languageHandler.curLang[:2])
text = "Unknown: %r" % (notification) text = "Unknown: %r" % (notification)
if notification.type == "status": if notification.type == "status":
text = _("{username} has posted: {status}").format(username=user, status=",".join(compose_post(notification.status, db, relative_times, show_screen_names, safe=safe))) text = _("{username} has posted: {status}").format(username=user, status=",".join(compose_post(notification.status, db, settings, relative_times, show_screen_names, safe=safe)))
elif notification.type == "mention": elif notification.type == "mention":
text = _("{username} has mentioned you: {status}").format(username=user, status=",".join(compose_post(notification.status, db, relative_times, show_screen_names, safe=safe))) text = _("{username} has mentioned you: {status}").format(username=user, status=",".join(compose_post(notification.status, db, settings, relative_times, show_screen_names, safe=safe)))
elif notification.type == "reblog": elif notification.type == "reblog":
text = _("{username} has boosted: {status}").format(username=user, status=",".join(compose_post(notification.status, db, relative_times, show_screen_names, safe=safe))) text = _("{username} has boosted: {status}").format(username=user, status=",".join(compose_post(notification.status, db, settings, relative_times, show_screen_names, safe=safe)))
elif notification.type == "favourite": elif notification.type == "favourite":
text = _("{username} has added to favorites: {status}").format(username=user, status=",".join(compose_post(notification.status, db, relative_times, show_screen_names, safe=safe))) text = _("{username} has added to favorites: {status}").format(username=user, status=",".join(compose_post(notification.status, db, settings, relative_times, show_screen_names, safe=safe)))
elif notification.type == "follow": elif notification.type == "follow":
text = _("{username} has followed you.").format(username=user) text = _("{username} has followed you.").format(username=user)
elif notification.type == "admin.sign_up": elif notification.type == "admin.sign_up":
text = _("{username} has joined the instance.").format(username=user) text = _("{username} has joined the instance.").format(username=user)
elif notification.type == "poll": elif notification.type == "poll":
text = _("A poll in which you have voted has expired: {status}").format(status=",".join(compose_post(notification.status, db, relative_times, show_screen_names, safe=safe))) text = _("A poll in which you have voted has expired: {status}").format(status=",".join(compose_post(notification.status, db, settings, relative_times, show_screen_names, safe=safe)))
elif notification.type == "follow_request": elif notification.type == "follow_request":
text = _("{username} wants to follow you.").format(username=user) text = _("{username} wants to follow you.").format(username=user)
return [user, text, ts] return [user, text, ts]

View File

@ -123,25 +123,6 @@ class Session(base.baseSession):
### ToDo: Use a function to retrieve all muted users. ### ToDo: Use a function to retrieve all muted users.
self.db["muted_users"] = self.api.mutes() self.db["muted_users"] = self.api.mutes()
def get_user_alias(self, user):
if user.display_name == None or user.display_name == "":
display_name = user.username
else:
display_name = user.display_name
aliases = self.settings.get("user-aliases")
if aliases == None:
log.error("Aliases are not defined for this config spec.")
return self.demoji_user(display_name)
user_alias = aliases.get(user.id)
if user_alias != None:
return user_alias
return self.demoji_user(display_name)
def demoji_user(self, name):
if self.settings["general"]["hide_emojis"] == True:
return demoji.replace(name, "")
return name
def order_buffer(self, name, data, ignore_older=False): def order_buffer(self, name, data, ignore_older=False):
num = 0 num = 0
last_id = None last_id = None

View File

@ -45,7 +45,7 @@ def process_image_descriptions(media_attachments):
idescriptions = idescriptions + _("Media description: {}").format(image) + "\n" idescriptions = idescriptions + _("Media description: {}").format(image) + "\n"
return idescriptions return idescriptions
def render_post(post, template, relative_times=False, offset_hours=0): def render_post(post, template, settings, relative_times=False, offset_hours=0):
""" Renders any given post according to the passed template. """ Renders any given post according to the passed template.
Available data for posts will be stored in the following variables: Available data for posts will be stored in the following variables:
$date: Creation date. $date: Creation date.
@ -63,9 +63,7 @@ def render_post(post, template, relative_times=False, offset_hours=0):
created_at = process_date(post.created_at, relative_times, offset_hours) created_at = process_date(post.created_at, relative_times, offset_hours)
available_data.update(date=created_at) available_data.update(date=created_at)
# user. # user.
display_name = post.account.display_name display_name = utils.get_user_alias(post.account, settings)
if display_name == "":
display_name = post.account.username
available_data.update(display_name=display_name, screen_name=post.account.acct) available_data.update(display_name=display_name, screen_name=post.account.acct)
# Source client from where tweet was originated. # Source client from where tweet was originated.
source = "" source = ""
@ -90,7 +88,7 @@ def render_post(post, template, relative_times=False, offset_hours=0):
result = Template(_(template)).safe_substitute(**available_data) result = Template(_(template)).safe_substitute(**available_data)
return result return result
def render_user(user, template, relative_times=True, offset_hours=0): def render_user(user, template, settings, relative_times=True, offset_hours=0):
""" Renders persons by using the provided template. """ Renders persons by using the provided template.
Available data will be stored in the following variables: Available data will be stored in the following variables:
$display_name: The name of the user, as theyve defined it. Not necessarily a persons name. Typically capped at 50 characters, but subject to change. $display_name: The name of the user, as theyve defined it. Not necessarily a persons name. Typically capped at 50 characters, but subject to change.
@ -102,9 +100,7 @@ def render_user(user, template, relative_times=True, offset_hours=0):
$created_at: The date and time that the user account was created on Twitter. $created_at: The date and time that the user account was created on Twitter.
""" """
global person_variables global person_variables
display_name = user.display_name display_name = utils.get_user_alias(user, settings)
if display_name == "":
display_name = user.username
available_data = dict(display_name=display_name, screen_name=user.acct, followers=user.followers_count, following=user.following_count, posts=user.statuses_count) available_data = dict(display_name=display_name, screen_name=user.acct, followers=user.followers_count, following=user.following_count, posts=user.statuses_count)
# Nullable values. # Nullable values.
nullables = ["description"] nullables = ["description"]
@ -116,20 +112,20 @@ def render_user(user, template, relative_times=True, offset_hours=0):
result = Template(_(template)).safe_substitute(**available_data) result = Template(_(template)).safe_substitute(**available_data)
return result return result
def render_conversation(conversation, template, post_template, relative_times=False, offset_hours=0): def render_conversation(conversation, template, settings, post_template, relative_times=False, offset_hours=0):
users = [] users = []
for account in conversation.accounts: for account in conversation.accounts:
if account.display_name != "": if account.display_name != "":
users.append(account.display_name) users.append(utils.get_user_alias(account, settings))
else: else:
users.append(account.username) users.append(account.username)
users = ", ".join(users) users = ", ".join(users)
last_post = render_post(conversation.last_status, post_template, relative_times=relative_times, offset_hours=offset_hours) last_post = render_post(conversation.last_status, post_template, settings, relative_times=relative_times, offset_hours=offset_hours)
available_data = dict(users=users, last_post=last_post) available_data = dict(users=users, last_post=last_post)
result = Template(_(template)).safe_substitute(**available_data) result = Template(_(template)).safe_substitute(**available_data)
return result return result
def render_notification(notification, template, post_template, relative_times=False, offset_hours=0): def render_notification(notification, template, post_template, settings, relative_times=False, offset_hours=0):
""" Renders any given notification according to the passed template. """ Renders any given notification according to the passed template.
Available data for notifications will be stored in the following variables: Available data for notifications will be stored in the following variables:
$date: Creation date. $date: Creation date.
@ -142,29 +138,27 @@ def render_notification(notification, template, post_template, relative_times=Fa
created_at = process_date(notification.created_at, relative_times, offset_hours) created_at = process_date(notification.created_at, relative_times, offset_hours)
available_data.update(date=created_at) available_data.update(date=created_at)
# user. # user.
display_name = notification.account.display_name display_name = utils.get_user_alias(notification.account, settings)
if display_name == "":
display_name = notification.account.username
available_data.update(display_name=display_name, screen_name=notification.account.acct) available_data.update(display_name=display_name, screen_name=notification.account.acct)
text = "Unknown: %r" % (notification) text = "Unknown: %r" % (notification)
# Remove date from status, so it won't be rendered twice. # Remove date from status, so it won't be rendered twice.
post_template = post_template.replace("$date", "") post_template = post_template.replace("$date", "")
if notification.type == "status": if notification.type == "status":
text = _("has posted: {status}").format(status=render_post(notification.status, post_template, relative_times, offset_hours)) text = _("has posted: {status}").format(status=render_post(notification.status, post_template, settings, relative_times, offset_hours))
elif notification.type == "mention": elif notification.type == "mention":
text = _("has mentioned you: {status}").format(status=render_post(notification.status, post_template, relative_times, offset_hours)) text = _("has mentioned you: {status}").format(status=render_post(notification.status, post_template, settings, relative_times, offset_hours))
elif notification.type == "reblog": elif notification.type == "reblog":
text = _("has boosted: {status}").format(status=render_post(notification.status, post_template, relative_times, offset_hours)) text = _("has boosted: {status}").format(status=render_post(notification.status, post_template, settings, relative_times, offset_hours))
elif notification.type == "favourite": elif notification.type == "favourite":
text = _("has added to favorites: {status}").format(status=render_post(notification.status, post_template, relative_times, offset_hours)) text = _("has added to favorites: {status}").format(status=render_post(notification.status, post_template, settings, relative_times, offset_hours))
elif notification.type == "update": elif notification.type == "update":
text = _("has updated a status: {status}").format(status=render_post(notification.status, post_template, relative_times, offset_hours)) text = _("has updated a status: {status}").format(status=render_post(notification.status, post_template, settings, relative_times, offset_hours))
elif notification.type == "follow": elif notification.type == "follow":
text = _("has followed you.") text = _("has followed you.")
elif notification.type == "admin.sign_up": elif notification.type == "admin.sign_up":
text = _("has joined the instance.") text = _("has joined the instance.")
elif notification.type == "poll": elif notification.type == "poll":
text = _("A poll in which you have voted has expired: {status}").format(status=render_post(notification.status, post_template, relative_times, offset_hours)) text = _("A poll in which you have voted has expired: {status}").format(status=render_post(notification.status, post_template, settings, relative_times, offset_hours))
elif notification.type == "follow_request": elif notification.type == "follow_request":
text = _("wants to follow you.") text = _("wants to follow you.")
available_data.update(text=text) available_data.update(text=text)

View File

@ -1,4 +1,5 @@
import re import re
import demoji
from html.parser import HTMLParser from html.parser import HTMLParser
url_re = re.compile('<a\s*href=[\'|"](.*?)[\'"].*?>') url_re = re.compile('<a\s*href=[\'|"](.*?)[\'"].*?>')
@ -69,3 +70,24 @@ def find_urls(post, include_tags=False):
if url.lower().endswith("/tags/"+tag["name"]): if url.lower().endswith("/tags/"+tag["name"]):
urls.remove(url) urls.remove(url)
return urls return urls
def get_user_alias(user, settings):
if user.display_name == None or user.display_name == "":
display_name = user.username
else:
display_name = user.display_name
aliases = settings.get("user-aliases")
if aliases == None:
return demoji_user(display_name, settings)
user_alias = aliases.get(user.id)
if user_alias != None:
return user_alias
return demoji_user(display_name, settings)
def demoji_user(name, settings):
if settings["general"]["hide_emojis"] == True:
user = demoji.replace(name, "")
# Take care of Mastodon instance emojis.
user = re.sub(r":(.*?):", "", user)
return user
return name