160 lines
6.6 KiB
Python
160 lines
6.6 KiB
Python
# -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*-
|
|
|
|
from qtpy import QtGui, QtCore, uic
|
|
|
|
from ui.widgets import CenteredWidget
|
|
import utils.ui as util_ui
|
|
from utils.util import join_path, get_images_directory, get_views_path
|
|
from user_data.settings import Settings
|
|
|
|
class ProfileSettings(CenteredWidget):
|
|
"""Form with profile settings such as name, status, TOX ID"""
|
|
def __init__(self, profile, profile_manager, settings, toxes):
|
|
super().__init__()
|
|
self._profile = profile
|
|
self._profile_manager = profile_manager
|
|
self._settings = settings
|
|
self._toxes = toxes
|
|
self._auto = False
|
|
|
|
uic.loadUi(get_views_path('profile_settings_screen'), self)
|
|
|
|
self._init_ui()
|
|
self.center()
|
|
|
|
def closeEvent(self, event):
|
|
self._profile.set_name(self.nameLineEdit.text())
|
|
self._profile.set_status_message(self.statusMessageLineEdit.text())
|
|
self._profile.set_status(self.statusComboBox.currentIndex())
|
|
|
|
def _init_ui(self):
|
|
self._auto = Settings.get_auto_profile() == self._profile_manager.get_path()
|
|
self.toxIdLabel.setText(self._profile.tox_id)
|
|
self.nameLineEdit.setText(self._profile.name)
|
|
self.statusMessageLineEdit.setText(str(self._profile.status_message))
|
|
self.defaultProfilePushButton.clicked.connect(self._toggle_auto_profile)
|
|
self.copyToxIdPushButton.clicked.connect(self._copy_tox_id)
|
|
self.copyPublicKeyPushButton.clicked.connect(self._copy_public_key)
|
|
self.changePasswordPushButton.clicked.connect(self._save_password)
|
|
self.exportProfilePushButton.clicked.connect(self._export_profile)
|
|
self.newNoSpamPushButton.clicked.connect(self._set_new_no_spam)
|
|
self.newAvatarPushButton.clicked.connect(self._set_avatar)
|
|
self.resetAvatarPushButton.clicked.connect(self._reset_avatar)
|
|
|
|
self.invalidPasswordsLabel.setVisible(False)
|
|
|
|
self._retranslate_ui()
|
|
|
|
if self._profile.status is not None:
|
|
self.statusComboBox.setCurrentIndex(self._profile.status)
|
|
else:
|
|
self.statusComboBox.setVisible(False)
|
|
|
|
def _retranslate_ui(self):
|
|
self.setWindowTitle(util_ui.tr("Profile settings"))
|
|
|
|
self.exportProfilePushButton.setText(util_ui.tr("Export profile"))
|
|
self.nameLabel.setText(util_ui.tr("Name:"))
|
|
self.statusLabel.setText(util_ui.tr("Status:"))
|
|
self.toxIdTitleLabel.setText(util_ui.tr("TOX ID:"))
|
|
self.copyToxIdPushButton.setText(util_ui.tr("Copy TOX ID"))
|
|
self.newAvatarPushButton.setText(util_ui.tr("New avatar"))
|
|
self.resetAvatarPushButton.setText(util_ui.tr("Reset avatar"))
|
|
self.newNoSpamPushButton.setText(util_ui.tr("New NoSpam"))
|
|
self.profilePasswordLabel.setText(util_ui.tr("Profile password"))
|
|
self.passwordLineEdit.setPlaceholderText(util_ui.tr("Password (at least 8 symbols)"))
|
|
self.confirmPasswordLineEdit.setPlaceholderText(util_ui.tr("Confirm password"))
|
|
self.changePasswordPushButton.setText(util_ui.tr("Set password"))
|
|
self.invalidPasswordsLabel.setText(util_ui.tr("Passwords do not match"))
|
|
self.emptyPasswordLabel.setText(util_ui.tr("Leaving blank will reset current password"))
|
|
self.warningLabel.setText(util_ui.tr("There is no way to recover lost passwords"))
|
|
self.statusComboBox.addItem(util_ui.tr("Online"))
|
|
self.statusComboBox.addItem(util_ui.tr("Away"))
|
|
self.statusComboBox.addItem(util_ui.tr("Busy"))
|
|
self.copyPublicKeyPushButton.setText(util_ui.tr("Copy public key" +' (64)'))
|
|
|
|
self._set_default_profile_button_text()
|
|
|
|
def _toggle_auto_profile(self):
|
|
if self._auto:
|
|
Settings.reset_auto_profile()
|
|
else:
|
|
Settings.set_auto_profile(self._profile_manager.get_path())
|
|
self._auto = not self._auto
|
|
self._set_default_profile_button_text()
|
|
|
|
def _set_default_profile_button_text(self):
|
|
if self._auto:
|
|
self.defaultProfilePushButton.setText(util_ui.tr("Mark as not default profile"))
|
|
else:
|
|
self.defaultProfilePushButton.setText(util_ui.tr("Mark as default profile"))
|
|
|
|
def _save_password(self):
|
|
password = self.passwordLineEdit.text()
|
|
confirm_password = self.confirmPasswordLineEdit.text()
|
|
if password == confirm_password:
|
|
if not len(password) or len(password) >= 8:
|
|
self._toxes.set_password(password)
|
|
self.close()
|
|
else:
|
|
self.invalidPasswordsLabel.setText(
|
|
util_ui.tr("Password must be at least 8 symbols"))
|
|
self.invalidPasswordsLabel.setVisible(True)
|
|
else:
|
|
self.invalidPasswordsLabel.setText(util_ui.tr("Passwords do not match"))
|
|
self.invalidPasswordsLabel.setVisible(True)
|
|
|
|
def _copy_tox_id(self):
|
|
util_ui.copy_to_clipboard(self._profile.tox_id)
|
|
|
|
icon = self._get_accept_icon()
|
|
self.copyToxIdPushButton.setIcon(icon)
|
|
self.copyToxIdPushButton.setIconSize(QtCore.QSize(10, 10))
|
|
|
|
def _copy_public_key(self):
|
|
util_ui.copy_to_clipboard(self._profile.tox_id[:64])
|
|
|
|
icon = self._get_accept_icon()
|
|
self.copyPublicKeyPushButton.setIcon(icon)
|
|
self.copyPublicKeyPushButton.setIconSize(QtCore.QSize(10, 10))
|
|
|
|
def _set_new_no_spam(self):
|
|
self.toxIdLabel.setText(self._profile.set_new_nospam())
|
|
|
|
def _reset_avatar(self):
|
|
self._profile.reset_avatar(self._settings['identicons'])
|
|
|
|
def _set_avatar(self):
|
|
choose = util_ui.tr("Choose avatar")
|
|
name = util_ui.file_dialog(choose, 'Images (*.png)')
|
|
if not name[0]:
|
|
return
|
|
bitmap = QtGui.QPixmap(name[0])
|
|
bitmap.scaled(QtCore.QSize(128, 128), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
|
|
|
|
byte_array = QtCore.QByteArray()
|
|
buffer = QtCore.QBuffer(byte_array)
|
|
buffer.open(QtCore.QIODevice.WriteOnly)
|
|
bitmap.save(buffer, 'PNG')
|
|
|
|
self._profile.set_avatar(bytes(byte_array.data()))
|
|
|
|
def _export_profile(self):
|
|
directory = util_ui.directory_dialog()
|
|
if not directory:
|
|
return
|
|
|
|
reply = util_ui.question(util_ui.tr('Do you want to move your profile to this location?'),
|
|
util_ui.tr('Use new path'))
|
|
|
|
self._settings.export(directory)
|
|
self._profile.export_db(directory)
|
|
self._profile_manager.export_profile(self._settings, directory, reply)
|
|
|
|
@staticmethod
|
|
def _get_accept_icon():
|
|
pixmap = QtGui.QPixmap(join_path(get_images_directory(), 'accept.png'))
|
|
|
|
return QtGui.QIcon(pixmap)
|
|
|