diff --git a/doc/changelog.md b/doc/changelog.md index e0b555bd..a68f71c6 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -2,6 +2,7 @@ ## changes in this version +* When reading a tweet, if the tweet contains more than 2 consecutive mentions, TWBlue will announce how many more users the tweet includes, as opposed to read every user in the conversation. You still can display the tweet to read all users. * Added user aliases to TWBlue. This feature allows you to rename user's display names on Twitter, so the next time you'll read an user it will be announced as you configured. For adding an alias to an user, select the "add alias" option in the user menu, located in the menu bar. This feature works only if you have set display screen names unchecked. Users are displayed with their display name in people buffers only. This action is supported in all keymaps, although it is undefined by default. ([#389](https://github.com/manuelcortez/TWBlue/pull/389)) * It is possible to undefine keystrokes in the current keymap in TWBlue. This allows you, for example, to redefine keystrokes completely. * Added a limited version of the Twitter's Streaming API: The Streaming API will work only for tweets, and will receive tweets only by people you follow. Protected users are not possible to be streamed. It is possible that during high tweet traffic, the Stream might get disconnected at times, but TWBlue should be capable of detecting this problem and reconnecting the stream again. ([#385](https://github.com/manuelcortez/TWBlue/pull/385)) diff --git a/src/sessions/twitter/compose.py b/src/sessions/twitter/compose.py index b6ceb4ae..1b761390 100644 --- a/src/sessions/twitter/compose.py +++ b/src/sessions/twitter/compose.py @@ -45,9 +45,9 @@ def compose_tweet(tweet, db, relative_times, show_screen_names=False, session=No else: value = "text" if hasattr(tweet, "retweeted_status") and value != "message": - text = StripChars(getattr(tweet.retweeted_status, value)) + text = utils.clean_mentions(StripChars(getattr(tweet.retweeted_status, value))) else: - text = StripChars(getattr(tweet, value)) + text = utils.clean_mentions(StripChars(getattr(tweet, value))) if show_screen_names: user = session.get_user(tweet.user).screen_name else: @@ -111,7 +111,7 @@ def compose_quoted_tweet(quoted_tweet, original_tweet, show_screen_names=False, value = "full_text" else: value = "text" - text = StripChars(getattr(quoted_tweet, value)) + text = utils.clean_mentions(StripChars(getattr(quoted_tweet, value))) if show_screen_names: quoting_user = session.get_user(quoted_tweet.user).screen_name else: @@ -124,9 +124,9 @@ def compose_quoted_tweet(quoted_tweet, original_tweet, show_screen_names=False, if hasattr(original_tweet, "message"): original_text = original_tweet.message elif hasattr(original_tweet, "full_text"): - original_text = StripChars(original_tweet.full_text) + original_text = utils.clean_mentions(StripChars(original_tweet.full_text)) else: - original_text = StripChars(original_tweet.text) + original_text = utils.clean_mentions(StripChars(original_tweet.text)) quoted_tweet.message = _(u"{0}. Quoted tweet from @{1}: {2}").format( text, original_user, original_text) quoted_tweet = tweets.clear_url(quoted_tweet) if hasattr(original_tweet, "entities") and original_tweet.entities.get("urls"): diff --git a/src/sessions/twitter/utils.py b/src/sessions/twitter/utils.py index 70ebfb1e..05c4c52c 100644 --- a/src/sessions/twitter/utils.py +++ b/src/sessions/twitter/utils.py @@ -244,3 +244,20 @@ def expand_urls(text, entities): if url["url"] in text: text = text.replace(url["url"], url["expanded_url"]) return text + +def clean_mentions(text): + new_text = text + mentionned_people = [u for u in re.finditer("(?<=^|(?<=[^a-zA-Z0-9-\.]))@([A-Za-z0-9_]+)", text)] + if len(mentionned_people) <= 2: + return text + end = -2 + total_users = 0 + for user in mentionned_people: + if abs(user.start()-end) < 3: + new_text = new_text.replace(user.group(0), "") + total_users = total_users+1 + end = user.end() + if total_users < 1: + return text + new_text = _("{user_1}, {user_2} and {all_users} more: {text}").format(user_1=mentionned_people[0].group(0), user_2=mentionned_people[1].group(0), all_users=total_users-2, text=new_text) + return new_text \ No newline at end of file