From ff0fbeafa3fb3b651541f149ca257129e675a8ae Mon Sep 17 00:00:00 2001 From: Manuel Cortez Date: Tue, 13 Jul 2021 17:22:20 -0500 Subject: [PATCH 1/7] Modified keystrokeEditor to allow undefined keystrokes --- doc/changelog.md | 3 ++- src/keystrokeEditor/constants.py | 3 ++- src/keystrokeEditor/keystrokeEditor.py | 15 ++++++++++++--- src/keystrokeEditor/wx_ui.py | 9 +++++++-- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/doc/changelog.md b/doc/changelog.md index 905e29af..e0b555bd 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -2,7 +2,8 @@ ## changes in this version -* 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. ([#389](https://github.com/manuelcortez/TWBlue/pull/389)) +* 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)) * Fixed an issue that made TWBlue to not show a dialog when attempting to show a profile for a suspended user. ([#387](https://github.com/manuelcortez/TWBlue/issues/387)) * Added support for Twitter audio and videos: Tweets which contains audio or videos will be detected as audio items, and you can playback those with the regular command to play audios. ([#384,](https://github.com/manuelcortez/TWBlue/pull/384)) diff --git a/src/keystrokeEditor/constants.py b/src/keystrokeEditor/constants.py index b14616bc..2d176ac1 100644 --- a/src/keystrokeEditor/constants.py +++ b/src/keystrokeEditor/constants.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -from __future__ import unicode_literals actions = { "up": _(u"Go up in the current buffer"), "down": _(u"Go down in the current buffer"), @@ -57,4 +56,6 @@ actions = { "audio": _(u"Try to play an audio file"), "update_buffer": _(u"Updates the buffer and retrieves possible lost items there."), "ocr_image": _(u"Extracts the text from a picture and displays the result in a dialog."), + "add_alias": _("Adds an alias to an user"), } + \ No newline at end of file diff --git a/src/keystrokeEditor/keystrokeEditor.py b/src/keystrokeEditor/keystrokeEditor.py index 720e1b1b..1af14b23 100644 --- a/src/keystrokeEditor/keystrokeEditor.py +++ b/src/keystrokeEditor/keystrokeEditor.py @@ -1,7 +1,4 @@ # -*- coding: utf-8 -*- -from __future__ import absolute_import -from __future__ import unicode_literals -from builtins import object import widgetUtils import config from . import wx_ui @@ -18,6 +15,7 @@ class KeystrokeEditor(object): self.hold_map = self.map.copy() self.dialog.put_keystrokes(constants.actions, self.map) widgetUtils.connect_event(self.dialog.edit, widgetUtils.BUTTON_PRESSED, self.edit_keystroke) + widgetUtils.connect_event(self.dialog.undefine, widgetUtils.BUTTON_PRESSED, self.undefine_keystroke) widgetUtils.connect_event(self.dialog.execute, widgetUtils.BUTTON_PRESSED, self.execute_action) self.dialog.get_response() @@ -33,6 +31,17 @@ class KeystrokeEditor(object): self.map[action] = new_keystroke self.dialog.put_keystrokes(constants.actions, self.map) + def undefine_keystroke(self, *args, **kwargs): + action = self.dialog.actions[self.dialog.get_action()] + keystroke = self.map.get(action) + if keystroke == None: + return + answer = self.dialog.undefine_keystroke_confirmation() + if answer == widgetUtils.YES: + self.map[action] = "" + self.changed = True + self.dialog.put_keystrokes(constants.actions, self.map) + def set_keystroke(self, keystroke, dialog): for i in keystroke.split("+"): if hasattr(dialog, i): diff --git a/src/keystrokeEditor/wx_ui.py b/src/keystrokeEditor/wx_ui.py index 51c03e69..ddb2e6a5 100644 --- a/src/keystrokeEditor/wx_ui.py +++ b/src/keystrokeEditor/wx_ui.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -from __future__ import unicode_literals import wx from multiplatform_widgets import widgets from wxUI.dialogs import baseDialog @@ -18,6 +17,7 @@ class keystrokeEditorDialog(baseDialog.BaseWXDialog): firstSizer.Add(self.keys.list, 0, wx.ALL, 5) self.edit = wx.Button(panel, -1, _(u"Edit")) self.edit.SetDefault() + self.undefine = wx.Button(panel, -1, _("Undefine keystroke")) self.execute = wx.Button(panel, -1, _(u"Execute action")) close = wx.Button(panel, wx.ID_CANCEL, _(u"Close")) secondSizer = wx.BoxSizer(wx.HORIZONTAL) @@ -37,13 +37,18 @@ class keystrokeEditorDialog(baseDialog.BaseWXDialog): continue action = actions[i] self.actions.append(i) - keystroke = keystrokes[i] + keystroke = keystrokes.get(i) + if keystroke == "": + keystroke = _("Undefined") self.keys.insert_item(False, *[action, keystroke]) self.keys.select_item(selection) def get_action(self): return self.keys.get_selected() + def undefine_keystroke_confirmation(self): + return wx.MessageDialog(self, _("Are you sure you want to undefine this keystroke?"), _("Undefine keystroke"), wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION).ShowModal() + class editKeystrokeDialog(baseDialog.BaseWXDialog): def __init__(self): super(editKeystrokeDialog, self).__init__(parent=None, id=-1, title=_(u"Editing keystroke")) From 582be54deaa8aa5f393e7a193fec23b669779c37 Mon Sep 17 00:00:00 2001 From: Manuel Cortez Date: Tue, 13 Jul 2021 17:25:48 -0500 Subject: [PATCH 2/7] Added add_alias action to keymaps as undefined --- src/keymaps/Chicken Nugget.keymap | 3 ++- src/keymaps/Qwitter.keymap | 3 ++- src/keymaps/Windows 10.keymap | 3 ++- src/keymaps/base.template | 3 ++- src/keymaps/default.keymap | 3 ++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/keymaps/Chicken Nugget.keymap b/src/keymaps/Chicken Nugget.keymap index c741ba5a..2f1888b0 100644 --- a/src/keymaps/Chicken Nugget.keymap +++ b/src/keymaps/Chicken Nugget.keymap @@ -34,4 +34,5 @@ configuration = string(default="control+win+o") accountConfiguration = string(default="control+win+shift+o") update_buffer = string(default="control+win+shift+u") ocr_image = string(default="win+alt+o") -open_in_browser = string(default="alt+control+win+return") \ No newline at end of file +open_in_browser = string(default="alt+control+win+return") +add_alias=string(default="") \ No newline at end of file diff --git a/src/keymaps/Qwitter.keymap b/src/keymaps/Qwitter.keymap index 21ae6160..e9736a5b 100644 --- a/src/keymaps/Qwitter.keymap +++ b/src/keymaps/Qwitter.keymap @@ -53,4 +53,5 @@ configuration = string(default="control+win+o") accountConfiguration = string(default="control+win+shift+o") update_buffer = string(default="control+win+shift+u") ocr_image = string(default="win+alt+o") -open_in_browser = string(default="alt+control+win+return") \ No newline at end of file +open_in_browser = string(default="alt+control+win+return") +add_alias=string(default="") \ No newline at end of file diff --git a/src/keymaps/Windows 10.keymap b/src/keymaps/Windows 10.keymap index e02e6278..70e79664 100644 --- a/src/keymaps/Windows 10.keymap +++ b/src/keymaps/Windows 10.keymap @@ -54,4 +54,5 @@ configuration = string(default="control+win+alt+o") accountConfiguration = string(default="control+win+shift+o") update_buffer = string(default="control+alt+shift+u") ocr_image = string(default="win+alt+o") -open_in_browser = string(default="alt+control+win+return") \ No newline at end of file +open_in_browser = string(default="alt+control+win+return") +add_alias=string(default="") \ No newline at end of file diff --git a/src/keymaps/base.template b/src/keymaps/base.template index 31784e42..f95ffcc1 100644 --- a/src/keymaps/base.template +++ b/src/keymaps/base.template @@ -55,4 +55,5 @@ list_manager = string(default="control+win+shift+l") configuration = string(default="control+win+o") accountConfiguration = string(default="control+win+shift+o") update_buffer = string(default="control+win+shift+u") -open_in_browser = string(default="alt+control+win+return") \ No newline at end of file +open_in_browser = string(default="alt+control+win+return") +add_alias=string(default="") \ No newline at end of file diff --git a/src/keymaps/default.keymap b/src/keymaps/default.keymap index f4dbb190..fa5157e0 100644 --- a/src/keymaps/default.keymap +++ b/src/keymaps/default.keymap @@ -56,4 +56,5 @@ configuration = string(default="control+win+o") accountConfiguration = string(default="control+win+shift+o") update_buffer = string(default="control+win+shift+u") ocr_image = string(default="win+alt+o") -open_in_browser = string(default="alt+control+win+return") \ No newline at end of file +open_in_browser = string(default="alt+control+win+return") +add_alias=string(default="") \ No newline at end of file From b2b9cd810fa5fd280b881dd85b4315d1dfb0cca3 Mon Sep 17 00:00:00 2001 From: Manuel Cortez Date: Tue, 13 Jul 2021 17:53:01 -0500 Subject: [PATCH 3/7] Fixed an issue when indefined keystrokes --- src/controller/mainController.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/controller/mainController.py b/src/controller/mainController.py index 99f77e28..0db1a6ca 100644 --- a/src/controller/mainController.py +++ b/src/controller/mainController.py @@ -1272,8 +1272,10 @@ class Controller(object): def register_invisible_keyboard_shorcuts(self, keymap): if config.changed_keymap: commonMessageDialogs.changed_keymap() + # Make sure we pass a keymap without undefined keystrokes. + new_keymap = {key: keymap[key] for key in keymap.keys() if keymap[key] != ""} self.keyboard_handler = WXKeyboardHandler(self.view) - self.keyboard_handler.register_keys(keymap) + self.keyboard_handler.register_keys(new_keymap) def unregister_invisible_keyboard_shorcuts(self, keymap): try: From 24d1ad093d94335d8d18c80838e2ceb90b4b264f Mon Sep 17 00:00:00 2001 From: Manuel Cortez Date: Fri, 16 Jul 2021 10:22:51 -0500 Subject: [PATCH 4/7] Streaming API: Ignore retweets if original tweet is present in a buffer --- src/controller/buffers/twitter/base.py | 2 +- src/sessions/twitter/session.py | 8 ++++---- src/sessions/twitter/utils.py | 10 +++++++--- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/controller/buffers/twitter/base.py b/src/controller/buffers/twitter/base.py index 5d3aca86..b7b535e1 100644 --- a/src/controller/buffers/twitter/base.py +++ b/src/controller/buffers/twitter/base.py @@ -237,7 +237,7 @@ class BaseBuffer(base.Buffer): items_db = self.session.db[self.name] self.session.add_users_from_results(items) for i in items: - if utils.is_allowed(i, self.session.settings, self.name) == True and utils.find_item(i.id, self.session.db[self.name]) == None: + if utils.is_allowed(i, self.session.settings, self.name) == True and utils.find_item(i, self.session.db[self.name]) == None: i = reduce.reduce_tweet(i) i = self.session.check_quoted_status(i) i = self.session.check_long_tweet(i) diff --git a/src/sessions/twitter/session.py b/src/sessions/twitter/session.py index ea0561e2..45089a23 100644 --- a/src/sessions/twitter/session.py +++ b/src/sessions/twitter/session.py @@ -51,7 +51,7 @@ class Session(base.baseSession): if i.id < last_id: log.error("Ignoring an older tweet... Last id: {0}, tweet id: {1}".format(last_id, i.id)) continue - if utils.find_item(i.id, self.db[name]) == None and utils.is_allowed(i, self.settings, name) == True: + if utils.find_item(i, self.db[name]) == None and utils.is_allowed(i, self.settings, name) == True: if i == False: continue reduced_object = reduce.reduce_tweet(i) reduced_object = self.check_quoted_status(reduced_object) @@ -72,7 +72,7 @@ class Session(base.baseSession): self.db[name] = [] objects = self.db[name] for i in data: - if utils.find_item(i.id, self.db[name]) == None: + if utils.find_item(i, self.db[name]) == None: if self.settings["general"]["reverse_timelines"] == False: objects.append(i) else: objects.insert(0, i) num = num+1 @@ -94,12 +94,12 @@ class Session(base.baseSession): for i in data: # Twitter returns sender_id as str, which must be converted to int in order to match to our user_id object. if int(i.message_create["sender_id"]) == self.db["user_id"]: - if "sent_direct_messages" in self.db and utils.find_item(i.id, self.db["sent_direct_messages"]) == None: + if "sent_direct_messages" in self.db and utils.find_item(i, self.db["sent_direct_messages"]) == None: if self.settings["general"]["reverse_timelines"] == False: sent_objects.append(i) else: sent_objects.insert(0, i) sent = sent+1 else: - if utils.find_item(i.id, self.db["direct_messages"]) == None: + if utils.find_item(i, self.db["direct_messages"]) == None: if self.settings["general"]["reverse_timelines"] == False: objects.append(i) else: objects.insert(0, i) incoming = incoming+1 diff --git a/src/sessions/twitter/utils.py b/src/sessions/twitter/utils.py index 24d498b4..70ebfb1e 100644 --- a/src/sessions/twitter/utils.py +++ b/src/sessions/twitter/utils.py @@ -60,9 +60,13 @@ def find_urls (tweet, twitter_media=False): urls.append(i) return urls -def find_item(id, listItem): - for i in range(0, len(listItem)): - if listItem[i].id == id: return i +def find_item(item, listItems): + for i in range(0, len(listItems)): + if listItems[i].id == item.id: + return i + # Check also retweets. + if hasattr(item, "retweeted_status") and item.retweeted_status.id == listItems[i].id: + return i return None def find_list(name, lists): From 9c680130f72084552e5a99b6aa7706fc410e5392 Mon Sep 17 00:00:00 2001 From: Jesus Date: Sat, 24 Jul 2021 06:24:08 +0200 Subject: [PATCH 5/7] Keypad para windows 11 --- src/keymaps/Windows11.keymap | 58 ++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/keymaps/Windows11.keymap diff --git a/src/keymaps/Windows11.keymap b/src/keymaps/Windows11.keymap new file mode 100644 index 00000000..727cb365 --- /dev/null +++ b/src/keymaps/Windows11.keymap @@ -0,0 +1,58 @@ +[info] +name = string(default="Windows 11") +desc = string(default="A keymap with remapped modifiers for Windows 11 compatibility.") +author = string(default="Bill Jesús ") + +[keymap] +up = string(default="control+alt+win+up") +down = string(default="control+alt+win+down") +left = string(default="control+alt+win+left") +right = string(default="control+alt+win+right") +next_account = string(default="control+alt+win+shift+right") +previous_account = string(default="control+alt+win+shift+left") +open_conversation = string(default="control+alt+win+c") +show_hide = string(default="control+win+w") +post_tweet = string(default="alt+win+n") +post_reply = string(default="control+win+r") +post_retweet = string(default="alt+win+shift+r") +send_dm = string(default="alt+win+shift+d") +toggle_like = string(default="control+alt+win+f") +follow = string(default="alt+win+shift+s") +user_details = string(default="alt+win+shift+n") +view_item = string(default="alt+win+v") +exit = string(default="alt+win+f4") +open_timeline = string(default="alt+win+i") +remove_buffer = string(default="alt+win+shift+i") +url = string(default="alt+win+return") +audio = string(default="alt+shift+win+return") +volume_up = string(default="control+alt+win+shift+up") +go_home = string(default="alt+win+home") +volume_down = string(default="control+alt+win+shift+down") +go_end = string(default="alt+win+end") +go_page_up = string(default="control+win+pageup") +go_page_down = string(default="control+win+pagedown") +update_profile = string(default="alt+win+p") +delete = string(default="alt+win+delete") +clear_buffer = string(default="alt+win+shift+delete") +repeat_item = string(default="alt+win+space") +copy_to_clipboard = string(default="alt+win+shift+c") +add_to_list = string(default="alt+win+a") +remove_from_list = string(default="alt+win+shift+a") +toggle_buffer_mute = string(default="alt+win+shift+m") +toggle_session_mute = string(default="control+alt+win+m") +toggle_autoread = string(default="alt+win+e") +search = string(default="alt+win+-") +edit_keystrokes = string(default="alt+win+k") +view_user_lists = string(default="alt+win+l") +get_more_items = string(default="alt+win+pageup") +reverse_geocode = string(default="control+win+g") +view_reverse_geocode = string(default="alt+win+shift+g") +get_trending_topics = string(default="control+win+t") +check_for_updates = string(default="alt+win+u") +list_manager = string(default="alt+win+shift+l") +configuration = string(default="control+win+alt+o") +accountConfiguration = string(default="control+win+shift+o") +update_buffer = string(default="control+alt+shift+u") +ocr_image = string(default="win+alt+o") +open_in_browser = string(default="alt+control+win+return") +add_alias=string(default="") \ No newline at end of file From 54938ecb6c51517e782099c2b9c4b044828d0164 Mon Sep 17 00:00:00 2001 From: Jesus Date: Mon, 26 Jul 2021 12:47:51 +0200 Subject: [PATCH 6/7] Fixed shortkuts --- src/keymaps/Windows11.keymap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/keymaps/Windows11.keymap b/src/keymaps/Windows11.keymap index 727cb365..22f7ab0c 100644 --- a/src/keymaps/Windows11.keymap +++ b/src/keymaps/Windows11.keymap @@ -26,9 +26,9 @@ remove_buffer = string(default="alt+win+shift+i") url = string(default="alt+win+return") audio = string(default="alt+shift+win+return") volume_up = string(default="control+alt+win+shift+up") -go_home = string(default="alt+win+home") +go_home = string(default="control+alt+win+home") volume_down = string(default="control+alt+win+shift+down") -go_end = string(default="alt+win+end") +go_end = string(default="control+alt+win+end") go_page_up = string(default="control+win+pageup") go_page_down = string(default="control+win+pagedown") update_profile = string(default="alt+win+p") From 576b5064c01bca1eddd499439d3cb294ba0c0857 Mon Sep 17 00:00:00 2001 From: Jesus Date: Wed, 28 Jul 2021 07:23:57 +0200 Subject: [PATCH 7/7] Added a fix. --- src/keymaps/Windows11.keymap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/keymaps/Windows11.keymap b/src/keymaps/Windows11.keymap index 22f7ab0c..57ca311e 100644 --- a/src/keymaps/Windows11.keymap +++ b/src/keymaps/Windows11.keymap @@ -34,7 +34,7 @@ go_page_down = string(default="control+win+pagedown") update_profile = string(default="alt+win+p") delete = string(default="alt+win+delete") clear_buffer = string(default="alt+win+shift+delete") -repeat_item = string(default="alt+win+space") +repeat_item = string(default="control+alt+win+space") copy_to_clipboard = string(default="alt+win+shift+c") add_to_list = string(default="alt+win+a") remove_from_list = string(default="alt+win+shift+a")