mirror of
https://github.com/MCV-Software/TWBlue.git
synced 2024-11-26 12:53:12 -06:00
fixed changelog in diverged commits
This commit is contained in:
commit
97286496fc
@ -2,9 +2,10 @@
|
|||||||
|
|
||||||
## changes in this version
|
## 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))
|
||||||
* There are some changes to the autocomplete users feature:
|
* There are some changes to the autocomplete users feature:
|
||||||
* Now users can search for twitter screen names or display names in the database.
|
* Now users can search for twitter screen names or display names in the database.
|
||||||
|
* 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))
|
* 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))
|
* 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))
|
* 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))
|
||||||
|
@ -237,7 +237,7 @@ class BaseBuffer(base.Buffer):
|
|||||||
items_db = self.session.db[self.name]
|
items_db = self.session.db[self.name]
|
||||||
self.session.add_users_from_results(items)
|
self.session.add_users_from_results(items)
|
||||||
for i in 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 = reduce.reduce_tweet(i)
|
||||||
i = self.session.check_quoted_status(i)
|
i = self.session.check_quoted_status(i)
|
||||||
i = self.session.check_long_tweet(i)
|
i = self.session.check_long_tweet(i)
|
||||||
|
@ -1272,8 +1272,10 @@ class Controller(object):
|
|||||||
def register_invisible_keyboard_shorcuts(self, keymap):
|
def register_invisible_keyboard_shorcuts(self, keymap):
|
||||||
if config.changed_keymap:
|
if config.changed_keymap:
|
||||||
commonMessageDialogs.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 = WXKeyboardHandler(self.view)
|
||||||
self.keyboard_handler.register_keys(keymap)
|
self.keyboard_handler.register_keys(new_keymap)
|
||||||
|
|
||||||
def unregister_invisible_keyboard_shorcuts(self, keymap):
|
def unregister_invisible_keyboard_shorcuts(self, keymap):
|
||||||
try:
|
try:
|
||||||
|
@ -35,3 +35,4 @@ accountConfiguration = string(default="control+win+shift+o")
|
|||||||
update_buffer = string(default="control+win+shift+u")
|
update_buffer = string(default="control+win+shift+u")
|
||||||
ocr_image = string(default="win+alt+o")
|
ocr_image = string(default="win+alt+o")
|
||||||
open_in_browser = string(default="alt+control+win+return")
|
open_in_browser = string(default="alt+control+win+return")
|
||||||
|
add_alias=string(default="")
|
@ -54,3 +54,4 @@ accountConfiguration = string(default="control+win+shift+o")
|
|||||||
update_buffer = string(default="control+win+shift+u")
|
update_buffer = string(default="control+win+shift+u")
|
||||||
ocr_image = string(default="win+alt+o")
|
ocr_image = string(default="win+alt+o")
|
||||||
open_in_browser = string(default="alt+control+win+return")
|
open_in_browser = string(default="alt+control+win+return")
|
||||||
|
add_alias=string(default="")
|
@ -55,3 +55,4 @@ accountConfiguration = string(default="control+win+shift+o")
|
|||||||
update_buffer = string(default="control+alt+shift+u")
|
update_buffer = string(default="control+alt+shift+u")
|
||||||
ocr_image = string(default="win+alt+o")
|
ocr_image = string(default="win+alt+o")
|
||||||
open_in_browser = string(default="alt+control+win+return")
|
open_in_browser = string(default="alt+control+win+return")
|
||||||
|
add_alias=string(default="")
|
58
src/keymaps/Windows11.keymap
Normal file
58
src/keymaps/Windows11.keymap
Normal file
@ -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 <galorasd@gmail.com>")
|
||||||
|
|
||||||
|
[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="control+alt+win+home")
|
||||||
|
volume_down = string(default="control+alt+win+shift+down")
|
||||||
|
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")
|
||||||
|
delete = string(default="alt+win+delete")
|
||||||
|
clear_buffer = string(default="alt+win+shift+delete")
|
||||||
|
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")
|
||||||
|
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="")
|
@ -56,3 +56,4 @@ configuration = string(default="control+win+o")
|
|||||||
accountConfiguration = string(default="control+win+shift+o")
|
accountConfiguration = string(default="control+win+shift+o")
|
||||||
update_buffer = string(default="control+win+shift+u")
|
update_buffer = string(default="control+win+shift+u")
|
||||||
open_in_browser = string(default="alt+control+win+return")
|
open_in_browser = string(default="alt+control+win+return")
|
||||||
|
add_alias=string(default="")
|
@ -57,3 +57,4 @@ accountConfiguration = string(default="control+win+shift+o")
|
|||||||
update_buffer = string(default="control+win+shift+u")
|
update_buffer = string(default="control+win+shift+u")
|
||||||
ocr_image = string(default="win+alt+o")
|
ocr_image = string(default="win+alt+o")
|
||||||
open_in_browser = string(default="alt+control+win+return")
|
open_in_browser = string(default="alt+control+win+return")
|
||||||
|
add_alias=string(default="")
|
@ -1,5 +1,4 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
|
||||||
actions = {
|
actions = {
|
||||||
"up": _(u"Go up in the current buffer"),
|
"up": _(u"Go up in the current buffer"),
|
||||||
"down": _(u"Go down 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"),
|
"audio": _(u"Try to play an audio file"),
|
||||||
"update_buffer": _(u"Updates the buffer and retrieves possible lost items there."),
|
"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."),
|
"ocr_image": _(u"Extracts the text from a picture and displays the result in a dialog."),
|
||||||
|
"add_alias": _("Adds an alias to an user"),
|
||||||
}
|
}
|
||||||
|
|
@ -1,7 +1,4 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import absolute_import
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
from builtins import object
|
|
||||||
import widgetUtils
|
import widgetUtils
|
||||||
import config
|
import config
|
||||||
from . import wx_ui
|
from . import wx_ui
|
||||||
@ -18,6 +15,7 @@ class KeystrokeEditor(object):
|
|||||||
self.hold_map = self.map.copy()
|
self.hold_map = self.map.copy()
|
||||||
self.dialog.put_keystrokes(constants.actions, self.map)
|
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.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)
|
widgetUtils.connect_event(self.dialog.execute, widgetUtils.BUTTON_PRESSED, self.execute_action)
|
||||||
self.dialog.get_response()
|
self.dialog.get_response()
|
||||||
|
|
||||||
@ -33,6 +31,17 @@ class KeystrokeEditor(object):
|
|||||||
self.map[action] = new_keystroke
|
self.map[action] = new_keystroke
|
||||||
self.dialog.put_keystrokes(constants.actions, self.map)
|
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):
|
def set_keystroke(self, keystroke, dialog):
|
||||||
for i in keystroke.split("+"):
|
for i in keystroke.split("+"):
|
||||||
if hasattr(dialog, i):
|
if hasattr(dialog, i):
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
|
||||||
import wx
|
import wx
|
||||||
from multiplatform_widgets import widgets
|
from multiplatform_widgets import widgets
|
||||||
from wxUI.dialogs import baseDialog
|
from wxUI.dialogs import baseDialog
|
||||||
@ -18,6 +17,7 @@ class keystrokeEditorDialog(baseDialog.BaseWXDialog):
|
|||||||
firstSizer.Add(self.keys.list, 0, wx.ALL, 5)
|
firstSizer.Add(self.keys.list, 0, wx.ALL, 5)
|
||||||
self.edit = wx.Button(panel, -1, _(u"Edit"))
|
self.edit = wx.Button(panel, -1, _(u"Edit"))
|
||||||
self.edit.SetDefault()
|
self.edit.SetDefault()
|
||||||
|
self.undefine = wx.Button(panel, -1, _("Undefine keystroke"))
|
||||||
self.execute = wx.Button(panel, -1, _(u"Execute action"))
|
self.execute = wx.Button(panel, -1, _(u"Execute action"))
|
||||||
close = wx.Button(panel, wx.ID_CANCEL, _(u"Close"))
|
close = wx.Button(panel, wx.ID_CANCEL, _(u"Close"))
|
||||||
secondSizer = wx.BoxSizer(wx.HORIZONTAL)
|
secondSizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
@ -37,13 +37,18 @@ class keystrokeEditorDialog(baseDialog.BaseWXDialog):
|
|||||||
continue
|
continue
|
||||||
action = actions[i]
|
action = actions[i]
|
||||||
self.actions.append(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.insert_item(False, *[action, keystroke])
|
||||||
self.keys.select_item(selection)
|
self.keys.select_item(selection)
|
||||||
|
|
||||||
def get_action(self):
|
def get_action(self):
|
||||||
return self.keys.get_selected()
|
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):
|
class editKeystrokeDialog(baseDialog.BaseWXDialog):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(editKeystrokeDialog, self).__init__(parent=None, id=-1, title=_(u"Editing keystroke"))
|
super(editKeystrokeDialog, self).__init__(parent=None, id=-1, title=_(u"Editing keystroke"))
|
||||||
|
@ -51,7 +51,7 @@ class Session(base.baseSession):
|
|||||||
if i.id < last_id:
|
if i.id < last_id:
|
||||||
log.error("Ignoring an older tweet... Last id: {0}, tweet id: {1}".format(last_id, i.id))
|
log.error("Ignoring an older tweet... Last id: {0}, tweet id: {1}".format(last_id, i.id))
|
||||||
continue
|
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
|
if i == False: continue
|
||||||
reduced_object = reduce.reduce_tweet(i)
|
reduced_object = reduce.reduce_tweet(i)
|
||||||
reduced_object = self.check_quoted_status(reduced_object)
|
reduced_object = self.check_quoted_status(reduced_object)
|
||||||
@ -72,7 +72,7 @@ class Session(base.baseSession):
|
|||||||
self.db[name] = []
|
self.db[name] = []
|
||||||
objects = self.db[name]
|
objects = self.db[name]
|
||||||
for i in data:
|
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)
|
if self.settings["general"]["reverse_timelines"] == False: objects.append(i)
|
||||||
else: objects.insert(0, i)
|
else: objects.insert(0, i)
|
||||||
num = num+1
|
num = num+1
|
||||||
@ -94,12 +94,12 @@ class Session(base.baseSession):
|
|||||||
for i in data:
|
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.
|
# 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 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)
|
if self.settings["general"]["reverse_timelines"] == False: sent_objects.append(i)
|
||||||
else: sent_objects.insert(0, i)
|
else: sent_objects.insert(0, i)
|
||||||
sent = sent+1
|
sent = sent+1
|
||||||
else:
|
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)
|
if self.settings["general"]["reverse_timelines"] == False: objects.append(i)
|
||||||
else: objects.insert(0, i)
|
else: objects.insert(0, i)
|
||||||
incoming = incoming+1
|
incoming = incoming+1
|
||||||
|
@ -60,9 +60,13 @@ def find_urls (tweet, twitter_media=False):
|
|||||||
urls.append(i)
|
urls.append(i)
|
||||||
return urls
|
return urls
|
||||||
|
|
||||||
def find_item(id, listItem):
|
def find_item(item, listItems):
|
||||||
for i in range(0, len(listItem)):
|
for i in range(0, len(listItems)):
|
||||||
if listItem[i].id == id: return i
|
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
|
return None
|
||||||
|
|
||||||
def find_list(name, lists):
|
def find_list(name, lists):
|
||||||
|
Loading…
Reference in New Issue
Block a user