2018-01-26 20:21:46 +00:00
|
|
|
from user_data.settings import *
|
2017-06-11 12:35:52 +00:00
|
|
|
from PyQt5 import QtCore, QtGui
|
2018-01-26 20:21:46 +00:00
|
|
|
from wrapper.toxcore_enums_and_consts import TOX_PUBLIC_KEY_SIZE
|
2018-04-18 20:55:51 +00:00
|
|
|
import util.util as util
|
2018-05-04 21:09:33 +00:00
|
|
|
import common.event as event
|
2016-10-22 18:23:03 +00:00
|
|
|
|
|
|
|
|
|
|
|
class BaseContact:
|
|
|
|
"""
|
|
|
|
Class encapsulating TOX contact
|
|
|
|
Properties: name (alias of contact or name), status_message, status (connection status)
|
2016-10-24 21:10:11 +00:00
|
|
|
widget - widget for update, tox id (or public key)
|
|
|
|
Base class for all contacts.
|
2016-10-22 18:23:03 +00:00
|
|
|
"""
|
|
|
|
|
2018-04-18 20:55:51 +00:00
|
|
|
def __init__(self, profile_manager, name, status_message, widget, tox_id):
|
2016-10-22 18:23:03 +00:00
|
|
|
"""
|
|
|
|
:param name: name, example: 'Toxygen user'
|
|
|
|
:param status_message: status message, example: 'Toxing on Toxygen'
|
|
|
|
:param widget: ContactItem instance
|
|
|
|
:param tox_id: tox id of contact
|
|
|
|
"""
|
2018-04-18 20:55:51 +00:00
|
|
|
self._profile_manager = profile_manager
|
2016-10-22 18:23:03 +00:00
|
|
|
self._name, self._status_message = name, status_message
|
|
|
|
self._status, self._widget = None, widget
|
|
|
|
self._tox_id = tox_id
|
2016-10-30 15:13:12 +00:00
|
|
|
self.init_widget()
|
2018-05-04 21:09:33 +00:00
|
|
|
self._name_changed_event = event.Event()
|
|
|
|
self._status_message_changed_event = event.Event()
|
|
|
|
self._status_changed_event = event.Event()
|
2016-10-22 18:23:03 +00:00
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
2016-10-27 21:55:34 +00:00
|
|
|
# Name - current name or alias of user
|
2016-10-22 18:23:03 +00:00
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
def get_name(self):
|
|
|
|
return self._name
|
|
|
|
|
|
|
|
def set_name(self, value):
|
2018-05-04 21:09:33 +00:00
|
|
|
value = str(value, 'utf-8')
|
|
|
|
if self._name != value:
|
|
|
|
self._name = value
|
|
|
|
self._widget.name.setText(self._name)
|
|
|
|
self._widget.name.repaint()
|
|
|
|
self._name_changed_event(self._name)
|
2016-10-22 18:23:03 +00:00
|
|
|
|
|
|
|
name = property(get_name, set_name)
|
|
|
|
|
2018-05-04 21:09:33 +00:00
|
|
|
def get_name_changed_event(self):
|
|
|
|
return self._name_changed_event
|
|
|
|
|
|
|
|
name_changed_event = property(get_name_changed_event)
|
|
|
|
|
2016-10-22 18:23:03 +00:00
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
# Status message
|
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
def get_status_message(self):
|
|
|
|
return self._status_message
|
|
|
|
|
|
|
|
def set_status_message(self, value):
|
2018-05-04 21:09:33 +00:00
|
|
|
value = str(value, 'utf-8')
|
|
|
|
if self._status_message != value:
|
|
|
|
self._status_message = value
|
|
|
|
self._widget.status_message.setText(self._status_message)
|
|
|
|
self._widget.status_message.repaint()
|
|
|
|
self._status_message_changed_event(self._status_message)
|
2016-10-22 18:23:03 +00:00
|
|
|
|
|
|
|
status_message = property(get_status_message, set_status_message)
|
|
|
|
|
2018-05-04 21:09:33 +00:00
|
|
|
def get_status_message_changed_event(self):
|
|
|
|
return self._status_message_changed_event
|
|
|
|
|
|
|
|
status_message_changed_event = property(get_status_message_changed_event)
|
|
|
|
|
2016-10-22 18:23:03 +00:00
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
# Status
|
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
def get_status(self):
|
|
|
|
return self._status
|
|
|
|
|
|
|
|
def set_status(self, value):
|
2018-05-04 21:09:33 +00:00
|
|
|
if self._status != value:
|
|
|
|
self._status = value
|
|
|
|
self._widget.connection_status.update(value)
|
|
|
|
self._status_changed_event(self._status)
|
2016-10-22 18:23:03 +00:00
|
|
|
|
|
|
|
status = property(get_status, set_status)
|
|
|
|
|
2018-05-04 21:09:33 +00:00
|
|
|
def get_status_changed_event(self):
|
|
|
|
return self._status_changed_event
|
|
|
|
|
|
|
|
status_changed_event = property(get_status_changed_event)
|
|
|
|
|
2016-10-22 18:23:03 +00:00
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
# TOX ID. WARNING: for friend it will return public key, for profile - full address
|
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
def get_tox_id(self):
|
|
|
|
return self._tox_id
|
|
|
|
|
|
|
|
tox_id = property(get_tox_id)
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
# Avatars
|
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
def load_avatar(self):
|
|
|
|
"""
|
|
|
|
Tries to load avatar of contact or uses default avatar
|
|
|
|
"""
|
2018-04-18 20:55:51 +00:00
|
|
|
avatar_path = self.get_avatar_path()
|
2016-10-22 18:23:03 +00:00
|
|
|
width = self._widget.avatar_label.width()
|
|
|
|
pixmap = QtGui.QPixmap(avatar_path)
|
|
|
|
self._widget.avatar_label.setPixmap(pixmap.scaled(width, width, QtCore.Qt.KeepAspectRatio,
|
|
|
|
QtCore.Qt.SmoothTransformation))
|
|
|
|
self._widget.avatar_label.repaint()
|
|
|
|
|
|
|
|
def reset_avatar(self):
|
2018-04-18 20:55:51 +00:00
|
|
|
avatar_path = self.get_avatar_path()
|
2016-10-22 18:23:03 +00:00
|
|
|
if os.path.isfile(avatar_path):
|
|
|
|
os.remove(avatar_path)
|
|
|
|
self.load_avatar()
|
|
|
|
|
|
|
|
def set_avatar(self, avatar):
|
2018-04-18 20:55:51 +00:00
|
|
|
avatar_path = self.get_avatar_path()
|
2016-10-22 18:23:03 +00:00
|
|
|
with open(avatar_path, 'wb') as f:
|
|
|
|
f.write(avatar)
|
|
|
|
self.load_avatar()
|
|
|
|
|
|
|
|
def get_pixmap(self):
|
|
|
|
return self._widget.avatar_label.pixmap()
|
2016-10-30 15:13:12 +00:00
|
|
|
|
2018-04-18 20:55:51 +00:00
|
|
|
def get_avatar_path(self):
|
2018-04-26 20:54:39 +00:00
|
|
|
directory = util.join_path(self._profile_manager.get_dir(), 'avatars')
|
2018-04-18 20:55:51 +00:00
|
|
|
avatar_path = util.join_path(directory, '{}.png'.format(self._tox_id[:TOX_PUBLIC_KEY_SIZE * 2]))
|
|
|
|
if not os.path.isfile(avatar_path) or not os.path.getsize(avatar_path): # load default image
|
|
|
|
avatar_path = util.join_path(util.get_images_directory(), self.get_default_avatar_name())
|
|
|
|
|
|
|
|
return avatar_path
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def get_default_avatar_name():
|
|
|
|
return 'avatar.png'
|
2017-04-06 18:28:34 +00:00
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
# Widgets
|
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
|
2016-10-30 15:13:12 +00:00
|
|
|
def init_widget(self):
|
|
|
|
if self._widget is not None:
|
|
|
|
self._widget.name.setText(self._name)
|
|
|
|
self._widget.status_message.setText(self._status_message)
|
|
|
|
self._widget.connection_status.update(self._status)
|
|
|
|
self.load_avatar()
|