tox: links in messages support and bug fixes
This commit is contained in:
parent
4b4075606e
commit
8fb263dadc
@ -75,7 +75,7 @@ def friend_connection_status(tox, friend_num, new_status, user_data):
|
||||
"""
|
||||
Check friend's connection status (offline, udp, tcp)
|
||||
"""
|
||||
print "Friend #{} connected! Friend's status: {}".format(friend_num, new_status)
|
||||
print "Friend #{} connection status: {}".format(friend_num, new_status)
|
||||
profile = Profile.get_instance()
|
||||
friend = profile.get_friend_by_number(friend_num)
|
||||
if new_status == TOX_CONNECTION['NONE']:
|
||||
@ -127,7 +127,7 @@ def friend_message(window, tray):
|
||||
invoke_in_main_thread(tray_notification, friend.name, message.decode('utf8'), tray, window)
|
||||
if settings['sound_notifications'] and profile.status != TOX_USER_STATUS['BUSY']:
|
||||
sound_notification(SOUND_NOTIFICATION['MESSAGE'])
|
||||
tray.setIcon(QtGui.QIcon(curr_directory() + '/images/icon_new_messages.png'))
|
||||
invoke_in_main_thread(tray.setIcon, QtGui.QIcon(curr_directory() + '/images/icon_new_messages.png'))
|
||||
return wrapped
|
||||
|
||||
|
||||
|
@ -13,8 +13,6 @@ import cgi
|
||||
|
||||
class MessageEdit(QtGui.QTextBrowser):
|
||||
|
||||
# TODO: add anchor clicked with tox: support and unfocus links
|
||||
|
||||
def __init__(self, text, width, parent=None):
|
||||
super(MessageEdit, self).__init__(parent)
|
||||
self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
||||
@ -22,6 +20,7 @@ class MessageEdit(QtGui.QTextBrowser):
|
||||
self.setWordWrapMode(QtGui.QTextOption.WrapAtWordBoundaryOrAnywhere)
|
||||
self.document().setTextWidth(width)
|
||||
self.setOpenExternalLinks(True)
|
||||
self.setOpenLinks(False)
|
||||
self.setTextWithLinks(text)
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("Times New Roman")
|
||||
@ -30,6 +29,7 @@ class MessageEdit(QtGui.QTextBrowser):
|
||||
self.setFont(font)
|
||||
self.setFixedHeight(self.document().size().height())
|
||||
self.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse | QtCore.Qt.LinksAccessibleByMouse)
|
||||
self.anchorClicked.connect(self.on_anchor_clicked)
|
||||
|
||||
def contextMenuEvent(self, event):
|
||||
menu = create_menu(self.createStandardContextMenu(event.pos()))
|
||||
@ -37,6 +37,16 @@ class MessageEdit(QtGui.QTextBrowser):
|
||||
menu.exec_(event.globalPos())
|
||||
del menu
|
||||
|
||||
def on_anchor_clicked(self, url):
|
||||
text = str(url.toString())
|
||||
if text.startswith('tox:'):
|
||||
import menu
|
||||
self.add_contact = menu.AddContact(text[4:])
|
||||
self.add_contact.show()
|
||||
else:
|
||||
QtGui.QDesktopServices.openUrl(url)
|
||||
self.clearFocus()
|
||||
|
||||
def setTextWithLinks(self, text):
|
||||
text = cgi.escape(text)
|
||||
exp = QtCore.QRegExp(
|
||||
@ -57,7 +67,11 @@ class MessageEdit(QtGui.QTextBrowser):
|
||||
text = text[:offset] + html + text[offset + len(exp.cap()):]
|
||||
offset += len(html)
|
||||
offset = exp.indexIn(text, offset)
|
||||
self.setHtml(text)
|
||||
arr = text.split('\n')
|
||||
for i in range(len(arr)):
|
||||
if arr[i].startswith('>'):
|
||||
arr[i] = '<font color="green">' + arr[i] + '</font>'
|
||||
self.setHtml('<br>'.join(arr))
|
||||
|
||||
|
||||
class MessageItem(QtGui.QWidget):
|
||||
@ -94,11 +108,6 @@ class MessageItem(QtGui.QWidget):
|
||||
if message_type == TOX_MESSAGE_TYPE['ACTION']:
|
||||
self.name.setStyleSheet("QLabel { color: #4169E1; }")
|
||||
self.message.setStyleSheet("QTextEdit { color: #4169E1; }")
|
||||
else: # TODO: replace with regex
|
||||
if text[0] == '>':
|
||||
self.message.setStyleSheet("QTextEdit { color: green; }")
|
||||
if text[-1] == '<':
|
||||
self.message.setStyleSheet("QTextEdit { color: red; }")
|
||||
|
||||
|
||||
class ContactItem(QtGui.QWidget):
|
||||
|
12
src/menu.py
12
src/menu.py
@ -14,11 +14,11 @@ import plugin_support
|
||||
class AddContact(CenteredWidget):
|
||||
"""Add contact form"""
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, tox_id=''):
|
||||
super(AddContact, self).__init__()
|
||||
self.initUI()
|
||||
self.initUI(tox_id)
|
||||
|
||||
def initUI(self):
|
||||
def initUI(self, tox_id):
|
||||
self.setObjectName('AddContact')
|
||||
self.resize(568, 306)
|
||||
self.sendRequestButton = QtGui.QPushButton(self)
|
||||
@ -30,8 +30,9 @@ class AddContact(CenteredWidget):
|
||||
self.tox_id = QtGui.QLineEdit(self)
|
||||
self.tox_id.setGeometry(QtCore.QRect(50, 40, 471, 27))
|
||||
self.tox_id.setObjectName("lineEdit")
|
||||
self.tox_id.setText(tox_id)
|
||||
self.label = QtGui.QLabel(self)
|
||||
self.label.setGeometry(QtCore.QRect(60, 10, 80, 20))
|
||||
self.label.setGeometry(QtCore.QRect(50, 10, 80, 20))
|
||||
self.error_label = DataLabel(self)
|
||||
self.error_label.setGeometry(QtCore.QRect(120, 10, 420, 20))
|
||||
font = QtGui.QFont()
|
||||
@ -44,7 +45,7 @@ class AddContact(CenteredWidget):
|
||||
self.message_edit.setGeometry(QtCore.QRect(50, 110, 471, 151))
|
||||
self.message_edit.setObjectName("textEdit")
|
||||
self.message = QtGui.QLabel(self)
|
||||
self.message.setGeometry(QtCore.QRect(60, 70, 101, 31))
|
||||
self.message.setGeometry(QtCore.QRect(50, 70, 101, 31))
|
||||
self.message.setFont(font)
|
||||
self.message.setObjectName("label_2")
|
||||
self.retranslateUi()
|
||||
@ -70,6 +71,7 @@ class AddContact(CenteredWidget):
|
||||
self.sendRequestButton.setText(QtGui.QApplication.translate("Form", "Send request", None, QtGui.QApplication.UnicodeUTF8))
|
||||
self.label.setText(QtGui.QApplication.translate('AddContact', "TOX ID:", None, QtGui.QApplication.UnicodeUTF8))
|
||||
self.message.setText(QtGui.QApplication.translate('AddContact', "Message:", None, QtGui.QApplication.UnicodeUTF8))
|
||||
self.tox_id.setPlaceholderText(QtGui.QApplication.translate('AddContact', "TOX ID or public key of contact", None, QtGui.QApplication.UnicodeUTF8))
|
||||
|
||||
|
||||
class ProfileSettings(CenteredWidget):
|
||||
|
@ -19,17 +19,17 @@ class Settings(Singleton, dict):
|
||||
with open(self.path) as fl:
|
||||
data = fl.read()
|
||||
inst = LibToxEncryptSave.get_instance()
|
||||
if inst.has_password():
|
||||
if inst.is_data_encrypted(data):
|
||||
data = inst.pass_decrypt(data)
|
||||
try:
|
||||
info = json.loads(data)
|
||||
except Exception as ex:
|
||||
info = Settings.get_default_settings()
|
||||
log('Parsing settings error: ' + str(ex))
|
||||
super(self.__class__, self).__init__(info)
|
||||
super(Settings, self).__init__(info)
|
||||
self.upgrade()
|
||||
else:
|
||||
super(self.__class__, self).__init__(Settings.get_default_settings())
|
||||
super(Settings, self).__init__(Settings.get_default_settings())
|
||||
self.save()
|
||||
p = pyaudio.PyAudio()
|
||||
self.audio = {'input': p.get_default_input_device_info()['index'],
|
||||
|
Loading…
Reference in New Issue
Block a user