updates and fixes

This commit is contained in:
ingvar1995 2016-07-12 15:47:17 +03:00
parent bae87c8d72
commit dc96f66d8c
5 changed files with 75 additions and 10 deletions

View file

@ -291,19 +291,20 @@ def callback_audio(toxav, friend_number, samples, audio_samples_per_channel, aud
# Callbacks - group chats
# -----------------------------------------------------------------------------------------------------------------
def group_message(window, tray):
def group_message(window, tray, tox):
"""
New message from friend
"""
def wrapped(tox, group_number, peer_id, message_type, message, length, user_data):
def wrapped(tox_link, group_number, peer_id, message_type, message, length, user_data):
profile = Profile.get_instance()
settings = Settings.get_instance()
message = str(message[:length], 'utf-8')
invoke_in_main_thread(profile.new_message, group_number, message_type, message, True)
invoke_in_main_thread(profile.new_message, group_number, message_type, message, True, peer_id)
if not window.isActiveWindow():
bl = settings['notify_all_gc'] or profile.name in message
name = tox.group_peer_get_name(group_number, peer_id)
if settings['notifications'] and profile.status != TOX_USER_STATUS['BUSY'] and not settings.locked and bl:
invoke_in_main_thread(tray_notification, '', message, tray, window) # TODO: friend name
invoke_in_main_thread(tray_notification, name, message, tray, window)
if (settings['sound_notifications'] or bl) and profile.status != TOX_USER_STATUS['BUSY']:
sound_notification(SOUND_NOTIFICATION['MESSAGE'])
invoke_in_main_thread(tray.setIcon, QtGui.QIcon(curr_directory() + '/images/icon_new_messages.png'))
@ -352,6 +353,6 @@ def init_callbacks(tox, window, tray):
tox.callback_friend_lossless_packet(lossless_packet, 0)
tox.callback_friend_lossy_packet(lossy_packet, 0)
tox.callback_group_message(group_message(window, tray), 0)
tox.callback_group_message(group_message(window, tray, tox), 0)
tox.callback_group_invite(group_invite, 0)

View file

@ -59,8 +59,10 @@ class MainWindow(QtGui.QMainWindow):
self.importPlugin = QtGui.QAction(MainWindow)
self.lockApp = QtGui.QAction(MainWindow)
self.createGC = QtGui.QAction(MainWindow)
self.joinGC = QtGui.QAction(MainWindow)
self.gcRequests = QtGui.QAction(MainWindow)
self.menuGroupChats.addAction(self.createGC)
self.menuGroupChats.addAction(self.joinGC)
self.menuGroupChats.addAction(self.gcRequests)
self.menuProfile.addAction(self.actionAdd_friend)
self.menuProfile.addAction(self.actionSettings)
@ -92,6 +94,8 @@ class MainWindow(QtGui.QMainWindow):
self.lockApp.triggered.connect(self.lock_app)
self.importPlugin.triggered.connect(self.import_plugin)
self.createGC.triggered.connect(self.create_groupchat)
self.joinGC.triggered.connect(self.join_groupchat)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def languageChange(self, *args, **kwargs):
@ -103,9 +107,10 @@ class MainWindow(QtGui.QMainWindow):
return super(MainWindow, self).event(event)
def retranslateUi(self):
self.joinGC.setText(QtGui.QApplication.translate("MainWindow", "Join group chat", None, QtGui.QApplication.UnicodeUTF8))
self.lockApp.setText(QtGui.QApplication.translate("MainWindow", "Lock", None, QtGui.QApplication.UnicodeUTF8))
self.menuGroupChats.setTitle(QtGui.QApplication.translate("MainWindow", "Groupchats", None, QtGui.QApplication.UnicodeUTF8))
self.createGC.setText(QtGui.QApplication.translate("MainWindow", "Create groupchat", None, QtGui.QApplication.UnicodeUTF8))
self.menuGroupChats.setTitle(QtGui.QApplication.translate("MainWindow", "Group chats", None, QtGui.QApplication.UnicodeUTF8))
self.createGC.setText(QtGui.QApplication.translate("MainWindow", "Create group chat", None, QtGui.QApplication.UnicodeUTF8))
self.gcRequests.setText(QtGui.QApplication.translate("MainWindow", "Groupchat requests", None, QtGui.QApplication.UnicodeUTF8))
self.menuPlugins.setTitle(QtGui.QApplication.translate("MainWindow", "Plugins", None, QtGui.QApplication.UnicodeUTF8))
self.pluginData.setText(QtGui.QApplication.translate("MainWindow", "List of plugins", None, QtGui.QApplication.UnicodeUTF8))
@ -460,6 +465,10 @@ class MainWindow(QtGui.QMainWindow):
self.gc = AddGroupchat()
self.gc.show()
def join_groupchat(self):
self.gc = JoinGroupchat()
self.gc.show()
def show_chat_menu(self):
pr = Profile.get_instance()
if not pr.is_active_a_friend():

View file

@ -38,6 +38,7 @@ class AddGroupchat(CenteredWidget):
self.pass_label.setGeometry(QtCore.QRect(50, 130, 470, 20))
self.password = LineEdit(self)
self.password.setGeometry(QtCore.QRect(50, 150, 470, 27))
self.password.setEchoMode(QtGui.QLineEdit.EchoMode.Password)
self.createGCButton.clicked.connect(self.button_click)
QtCore.QMetaObject.connectSlotsByName(self)
@ -61,6 +62,46 @@ class AddGroupchat(CenteredWidget):
self.close()
class JoinGroupchat(CenteredWidget):
def __init__(self):
super().__init__()
self.initUI()
self.retranslateUi()
self.center()
def initUI(self):
self.setObjectName('AddGC')
self.resize(570, 150)
self.setMaximumSize(QtCore.QSize(570, 150))
self.setMinimumSize(QtCore.QSize(570, 150))
self.joinGCButton = QtGui.QPushButton(self)
self.joinGCButton.setGeometry(QtCore.QRect(50, 110, 470, 30))
self.id = LineEdit(self)
self.id.setGeometry(QtCore.QRect(50, 10, 470, 30))
self.password = LineEdit(self)
self.password.setGeometry(QtCore.QRect(50, 50, 470, 30))
self.password.setEchoMode(QtGui.QLineEdit.EchoMode.Password)
self.joinGCButton.clicked.connect(self.button_click)
QtCore.QMetaObject.connectSlotsByName(self)
def retranslateUi(self):
self.setWindowTitle(
QtGui.QApplication.translate('JoinGC', "Join group chat", None, QtGui.QApplication.UnicodeUTF8))
self.joinGCButton.setText(
QtGui.QApplication.translate("JoinGC", "Join", None, QtGui.QApplication.UnicodeUTF8))
self.id.setPlaceholderText(
QtGui.QApplication.translate('JoinGC', "Group ID", None, QtGui.QApplication.UnicodeUTF8))
self.password.setPlaceholderText(
QtGui.QApplication.translate('JoinGC', "Optional password", None, QtGui.QApplication.UnicodeUTF8))
def button_click(self):
if self.id.text():
Profile.get_instance().join_gc(self.id.text().strip(), self.password.text())
self.close()
class AddContact(CenteredWidget):
"""Add contact form"""

View file

@ -385,13 +385,14 @@ class Profile(basecontact.BaseContact, Singleton):
else:
self._tox.group_send_message(number, message_type, message)
def new_message(self, num, message_type, message, is_group=False):
def new_message(self, num, message_type, message, is_group=False, peer_id=-1):
"""
Current user gets new message
:param num: num of friend or gc who sent message
:param message_type: message type - plain text or action message (/me)
:param message: text of message
:param is_group: is group chat message or not
:param peer_id: if gc - peer id
"""
if num == self.get_active_number() and is_group != self.is_active_a_friend(): # add message to list
t = time.time()
@ -402,10 +403,13 @@ class Profile(basecontact.BaseContact, Singleton):
else:
if is_group:
friend_or_gc = self.get_gc_by_number(num)
friend_or_gc.append_message(GroupChatTextMessage(self._tox.group_peer_get_name(num, peer_id),
message, MESSAGE_OWNER['FRIEND'],
time.time(), message_type))
else:
friend_or_gc = self.get_friend_by_number(num)
friend_or_gc.inc_messages()
friend_or_gc.append_message(TextMessage(message, MESSAGE_OWNER['FRIEND'], time.time(), message_type))
friend_or_gc.append_message(TextMessage(message, MESSAGE_OWNER['FRIEND'], time.time(), message_type))
if not friend_or_gc.visibility:
self.update_filtration()
@ -1239,6 +1243,13 @@ class Profile(basecontact.BaseContact, Singleton):
gc = GroupChat(self._tox, num, message_getter, name, topic, item, tox_id)
self._friends_and_gc.append(gc)
def join_gc(self, chat_id, password):
num = self._tox.group_join(chat_id, password if password else None)
if num != 2 ** 32 - 1:
self.add_gc(num)
else:
pass # TODO: join failed, show error
def create_gc(self, name, is_public, password):
privacy_state = TOX_GROUP_PRIVACY_STATE['TOX_GROUP_PRIVACY_STATE_PUBLIC'] if is_public else TOX_GROUP_PRIVACY_STATE['TOX_GROUP_PRIVACY_STATE_PRIVATE']
num = self._tox.group_new(privacy_state, bytes(name, 'utf-8'))

View file

@ -1570,7 +1570,10 @@ class Tox:
"""
error = c_int()
result = Tox.libtoxcore.tox_group_join(self._tox_pointer, chat_id, password, len(password), byref(error))
result = Tox.libtoxcore.tox_group_join(self._tox_pointer, chat_id,
password,
len(password) if password is not None else 0,
byref(error))
return result
def group_reconnect(self, groupnumber):