114 lines
4.4 KiB
Python
114 lines
4.4 KiB
Python
import os
|
|
from settings import *
|
|
try:
|
|
from PySide import QtCore, QtGui
|
|
except ImportError:
|
|
from PyQt4 import QtCore, QtGui
|
|
from toxcore_enums_and_consts import TOX_PUBLIC_KEY_SIZE
|
|
|
|
|
|
class BaseContact:
|
|
"""
|
|
Class encapsulating TOX contact
|
|
Properties: name (alias of contact or name), status_message, status (connection status)
|
|
widget - widget for update
|
|
"""
|
|
|
|
def __init__(self, name, status_message, widget, tox_id):
|
|
"""
|
|
: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
|
|
"""
|
|
self._name, self._status_message = name, status_message
|
|
self._status, self._widget = None, widget
|
|
self._widget.name.setText(name)
|
|
self._widget.status_message.setText(status_message)
|
|
self._tox_id = tox_id
|
|
self.load_avatar()
|
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
# name - current name or alias of user
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
def get_name(self):
|
|
return self._name
|
|
|
|
def set_name(self, value):
|
|
self._name = str(value, 'utf-8')
|
|
self._widget.name.setText(self._name)
|
|
self._widget.name.repaint()
|
|
|
|
name = property(get_name, set_name)
|
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
# Status message
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
def get_status_message(self):
|
|
return self._status_message
|
|
|
|
def set_status_message(self, value):
|
|
self._status_message = str(value, 'utf-8')
|
|
self._widget.status_message.setText(self._status_message)
|
|
self._widget.status_message.repaint()
|
|
|
|
status_message = property(get_status_message, set_status_message)
|
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
# Status
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
def get_status(self):
|
|
return self._status
|
|
|
|
def set_status(self, value):
|
|
self._status = value
|
|
self._widget.connection_status.update(value)
|
|
|
|
status = property(get_status, set_status)
|
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
# 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, default_path='avatar.png'):
|
|
"""
|
|
Tries to load avatar of contact or uses default avatar
|
|
"""
|
|
avatar_path = '{}.png'.format(self._tox_id[:TOX_PUBLIC_KEY_SIZE * 2])
|
|
os.chdir(ProfileHelper.get_path() + 'avatars/')
|
|
if not os.path.isfile(avatar_path): # load default image
|
|
avatar_path = default_path
|
|
os.chdir(curr_directory() + '/images/')
|
|
pixmap = QtGui.QPixmap(QtCore.QSize(64, 64))
|
|
pixmap.load(avatar_path)
|
|
self._widget.avatar_label.setScaledContents(False)
|
|
self._widget.avatar_label.setPixmap(pixmap.scaled(64, 64, QtCore.Qt.KeepAspectRatio))
|
|
self._widget.avatar_label.repaint()
|
|
|
|
def reset_avatar(self):
|
|
avatar_path = (ProfileHelper.get_path() + 'avatars/{}.png').format(self._tox_id[:TOX_PUBLIC_KEY_SIZE * 2])
|
|
if os.path.isfile(avatar_path):
|
|
os.remove(avatar_path)
|
|
self.load_avatar()
|
|
|
|
def set_avatar(self, avatar):
|
|
avatar_path = (ProfileHelper.get_path() + 'avatars/{}.png').format(self._tox_id[:TOX_PUBLIC_KEY_SIZE * 2])
|
|
with open(avatar_path, 'wb') as f:
|
|
f.write(avatar)
|
|
self.load_avatar()
|
|
|
|
def get_pixmap(self):
|
|
return self._widget.avatar_label.pixmap()
|