toxygen/toxygen/ui/profile_settings_screen.py

158 lines
6.5 KiB
Python

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
from PyQt5 import QtGui, QtCore, uic
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)