user now can read incoming messages

This commit is contained in:
ingvar1995 2016-02-26 21:54:15 +03:00
parent b592ca3f00
commit a1ff425f4c
4 changed files with 93 additions and 14 deletions

View file

@ -1,7 +1,9 @@
from PySide import QtCore from PySide import QtCore
from notifications import * from notifications import *
from settings import Settings from settings import Settings
# TODO: add all callbacks (replace test callbacks and use wrappers) from profile import Profile
# TODO: add all callbacks (remove test callbacks and use wrappers)
# NOTE: don't forget to call repaint
class InvokeEvent(QtCore.QEvent): class InvokeEvent(QtCore.QEvent):
@ -52,6 +54,8 @@ def friend_message(window):
print 'Message: ', message.decode('utf8') print 'Message: ', message.decode('utf8')
if not window.isActiveWindow() and Settings()['notifications']: if not window.isActiveWindow() and Settings()['notifications']:
tray_notification('Message', message.decode('utf8')) tray_notification('Message', message.decode('utf8'))
profile = Profile.getInstance()
invoke_in_main_thread(profile.newMessage, friend_number, message_type, message)
return wrapped return wrapped

View file

@ -71,7 +71,7 @@ def main():
tox = tox_factory(data, settings) tox = tox_factory(data, settings)
ms = MainWindow(tox) ms = MainWindow(tox)
ms.setup_info_from_tox() #ms.setup_info_from_tox()
ms.show() ms.show()
# bootstrap # bootstrap
for data in node_generator(): for data in node_generator():

View file

@ -5,6 +5,37 @@ from PySide import QtGui, QtCore
from menu import * from menu import *
from profile import Profile from profile import Profile
from toxcore_enums_and_consts import * from toxcore_enums_and_consts import *
from util import curr_time
class MessageItem(QtGui.QListWidget):
def __init__(self, text, time, user='', parent=None):
QtGui.QListWidget.__init__(self, parent)
self.setBaseSize(QtCore.QSize(250, 250))
self.name = QtGui.QLabel(self)
self.name.setGeometry(QtCore.QRect(0, 0, 50, 25))
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12)
font.setBold(True)
self.name.setFont(font)
self.name.setObjectName("name")
self.name.setText(user)
self.time = QtGui.QLabel(self)
self.time.setGeometry(QtCore.QRect(250, 0, 30, 20))
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(10)
font.setBold(False)
self.time.setFont(font)
self.time.setObjectName("time")
self.time.setText(time)
self.message = QtGui.QPlainTextEdit(self)
self.message.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse | QtCore.Qt.LinksAccessibleByMouse)
self.message.setPlainText(text)
class ContactItem(QtGui.QListWidget): class ContactItem(QtGui.QListWidget):
@ -231,7 +262,7 @@ class MainWindow(QtGui.QMainWindow):
self.callButton.setText(QtGui.QApplication.translate("Form", "Start call", None, QtGui.QApplication.UnicodeUTF8)) self.callButton.setText(QtGui.QApplication.translate("Form", "Start call", None, QtGui.QApplication.UnicodeUTF8))
QtCore.QMetaObject.connectSlotsByName(Form) QtCore.QMetaObject.connectSlotsByName(Form)
def setup_left_center(self, widget): def setup_left_center(self, widget, profile_widget):
# widget.setFixedWidth(250) # widget.setFixedWidth(250)
# widget.setMinimumSize(QtCore.QSize(250, 500)) # widget.setMinimumSize(QtCore.QSize(250, 500))
# widget.setMaximumSize(QtCore.QSize(250, 500)) # widget.setMaximumSize(QtCore.QSize(250, 500))
@ -248,9 +279,13 @@ class MainWindow(QtGui.QMainWindow):
self.friends_list.addItem(elem) self.friends_list.addItem(elem)
self.friends_list.setItemWidget(elem, item) self.friends_list.setItemWidget(elem, item)
widgets.append(item) widgets.append(item)
self.profile = Profile(self.tox, widgets, None) self.profile = Profile(self.tox, widgets, profile_widget, self.messages)
self.friends_list.clicked.connect(self.friend_click) self.friends_list.clicked.connect(self.friend_click)
def setup_right_center(self, widget):
self.messages = QtGui.QListWidget(widget)
self.messages.setGeometry(0, 0, 250, 300)
def initUI(self): def initUI(self):
self.setMinimumSize(800, 400) self.setMinimumSize(800, 400)
self.setGeometry(400, 400, 800, 400) self.setGeometry(400, 400, 800, 400)
@ -263,22 +298,27 @@ class MainWindow(QtGui.QMainWindow):
name = QtGui.QWidget() name = QtGui.QWidget()
self.setup_left_top(name) self.setup_left_top(name)
grid.addWidget(name, 0, 0) grid.addWidget(name, 0, 0)
messages = QtGui.QWidget()
self.setup_right_center(messages)
grid.addWidget(messages, 1, 1)
info = QtGui.QWidget() info = QtGui.QWidget()
self.setup_right_top(info) self.setup_right_top(info)
grid.addWidget(info, 0, 1) grid.addWidget(info, 0, 1)
message = QtGui.QWidget() message_buttons = QtGui.QWidget()
self.setup_right_bottom(message) self.setup_right_bottom(message_buttons)
grid.addWidget(message, 2, 1) grid.addWidget(message_buttons, 2, 1)
main_list = QtGui.QWidget() main_list = QtGui.QWidget()
self.setup_left_center(main_list) self.setup_left_center(main_list, name)
grid.addWidget(main_list, 1, 0) grid.addWidget(main_list, 1, 0)
grid.setColumnMinimumWidth(1, 500) grid.setColumnMinimumWidth(1, 500)
grid.setColumnMinimumWidth(0, 250) grid.setColumnMinimumWidth(0, 250)
main.setLayout(grid) main.setLayout(grid)
self.setCentralWidget(main) self.setCentralWidget(main)
self.setup_menu(self) self.setup_menu(self)
self.setup_info_from_tox()
def mouseReleaseEvent(self, event): def mouseReleaseEvent(self, event):
# TODO: add reaction on mouse click
pass pass
# if self.connection_status.status != TOX_USER_CONNECTION_STATUS['OFFLINE']: # if self.connection_status.status != TOX_USER_CONNECTION_STATUS['OFFLINE']:
# self.connection_status.status += 1 # self.connection_status.status += 1
@ -288,8 +328,8 @@ class MainWindow(QtGui.QMainWindow):
def setup_info_from_tox(self): def setup_info_from_tox(self):
# TODO: remove - use Profile() # TODO: remove - use Profile()
self.name.setText(self.tox.self_get_name()) self.name.setText(self.profile.name)
self.status_message.setText(self.tox.self_get_status_message()) self.status_message.setText(self.profile.status_message)
# ----------------------------------------------------------------------------------------------------------------- # -----------------------------------------------------------------------------------------------------------------
# Functions which called when user click in menu # Functions which called when user click in menu

View file

@ -1,9 +1,11 @@
import mainscreen
from settings import Settings from settings import Settings
from PySide import QtCore, QtGui
import os import os
from tox import Tox from tox import Tox
from util import Singleton
from toxcore_enums_and_consts import * from toxcore_enums_and_consts import *
from ctypes import * from ctypes import *
from util import curr_time
class ProfileHelper(object): class ProfileHelper(object):
@ -75,7 +77,7 @@ class Contact(object):
def setStatusMessage(self, value): def setStatusMessage(self, value):
self._status_message = value self._status_message = value
self._widget.status.setText(value) self._widget.status_message.setText(value)
status_message = property(getStatusMessage, setStatusMessage) status_message = property(getStatusMessage, setStatusMessage)
@ -83,6 +85,7 @@ class Contact(object):
return self._status return self._status
def setStatus(self, value): def setStatus(self, value):
# TODO: status repaint
self._status = value self._status = value
status = property(getStatus, setStatus) status = property(getStatus, setStatus)
@ -109,16 +112,21 @@ class Friend(Contact):
return self._number return self._number
number = property(getNumber) number = property(getNumber)
# TODO: check if setNumber needed
class Profile(Contact, Singleton): class Profile(Contact):
""" """
Profile of current toxygen user. Contains friends list, tox instance Profile of current toxygen user. Contains friends list, tox instance
""" """
# TODO: add slices # TODO: add slices
def __init__(self, tox, widgets, widget): def __init__(self, tox, widgets, widget, messages_list):
self._widget = widget self._widget = widget
self._messages = messages_list
self.tox = tox self.tox = tox
self._name = tox.self_get_name()
self._status_message = tox.self_get_status_message()
self._status = None
data = tox.self_get_friend_list() data = tox.self_get_friend_list()
self.friends, num, self._active_friend = [], 0, -1 self.friends, num, self._active_friend = [], 0, -1
for i in data: for i in data:
@ -126,6 +134,11 @@ class Profile(Contact, Singleton):
status_message = tox.friend_get_status_message(i) status_message = tox.friend_get_status_message(i)
self.friends.append(Friend(name, status_message, i, widgets[num])) self.friends.append(Friend(name, status_message, i, widgets[num]))
num += 1 num += 1
Profile._instance = self
@staticmethod
def getInstance():
return Profile._instance
def getActive(self): def getActive(self):
return self._active_friend return self._active_friend
@ -139,6 +152,9 @@ class Profile(Contact, Singleton):
def getActiveNumber(self): def getActiveNumber(self):
return self.friends[self._active_friend].getNumber() return self.friends[self._active_friend].getNumber()
def getActiveName(self):
return self.friends[self._active_friend].getName()
def isActiveOnline(self): def isActiveOnline(self):
if not self._active_friend + 1: # no active friend if not self._active_friend + 1: # no active friend
return False return False
@ -148,6 +164,25 @@ class Profile(Contact, Singleton):
status = self.friends[self._active_friend].getStatus() status = self.friends[self._active_friend].getStatus()
return status is not None return status is not None
def newMessage(self, id, message_type, message):
if id == self._active_friend: # add message to list
user_name = Profile.getInstance().getActiveName()
item = mainscreen.MessageItem(message, curr_time(), user_name)
elem = QtGui.QListWidgetItem(self._messages)
print item.sizeHint()
elem.setSizeHint(QtCore.QSize(250, 50))
self._messages.addItem(elem)
self._messages.setItemWidget(elem, item)
self._messages.repaint()
else:
friend = filter(lambda x: x.getNumber() == id, self.friends)[0]
friend.setMessages(True)
def changeStatus(self):
if self._status is not None:
self._status += 1
self._status %= 3
def tox_factory(data=None, settings=None): def tox_factory(data=None, settings=None):
""" """