Add multiple languages (i18n) support.
Now you can add a version in profile manage page. Add install java button and dialog.
This commit is contained in:
+30
-23
@@ -25,9 +25,10 @@ from manager.settings_models import AccountSettings
|
||||
|
||||
|
||||
class AccountWidget(QWidget):
|
||||
def __init__(self, account_name: str, account_head: QPixmap, login_status: str, parent=None,
|
||||
def __init__(self, app, account_name: str, account_head: QPixmap, login_status: str, parent=None,
|
||||
/, delete_account_callback=None, check_account_callback=None, switch_account_callback=None,):
|
||||
super().__init__(parent)
|
||||
self.app = app
|
||||
|
||||
# Layout
|
||||
self.layout = QHBoxLayout(self)
|
||||
@@ -57,10 +58,10 @@ class AccountWidget(QWidget):
|
||||
|
||||
def show_right_click_menu(self, position):
|
||||
menu = QMenu(self)
|
||||
switch_action = menu.addAction("Switch to this account")
|
||||
check_action = menu.addAction("Check login status")
|
||||
switch_action = menu.addAction(self.app.tr_text("Switch to this account"))
|
||||
check_action = menu.addAction(self.app.tr_text("Check login status"))
|
||||
menu.addSeparator()
|
||||
delete_action = menu.addAction("Delete account")
|
||||
delete_action = menu.addAction(self.app.tr_text("Delete account"))
|
||||
selected = menu.exec(self.mapToGlobal(position))
|
||||
|
||||
if selected == delete_action and callable(self.delete_account_callback):
|
||||
@@ -74,7 +75,7 @@ class LoginDialog(QDialog):
|
||||
def __init__(self, app, parent=None, code="", error_message=""):
|
||||
super().__init__(parent)
|
||||
self.app = app
|
||||
self.setWindowTitle("Microsoft Login")
|
||||
self.setWindowTitle(self.app.tr_text("Microsoft Login"))
|
||||
self.setMinimumWidth(440)
|
||||
self.setMinimumHeight(380)
|
||||
self.resize(440, 420)
|
||||
@@ -86,9 +87,9 @@ class LoginDialog(QDialog):
|
||||
self.layout.setSpacing(14)
|
||||
|
||||
# Top widgets
|
||||
self.title_label = QLabel("Login Minecraft Account")
|
||||
self.title_label = QLabel(self.app.tr_text("Login Minecraft Account"))
|
||||
self.title_label.setObjectName("dialogTitle")
|
||||
self.help_label = QLabel("Copy the code below, then continue in your browser.")
|
||||
self.help_label = QLabel(self.app.tr_text("Copy the code below, then continue in your browser."))
|
||||
self.help_label.setObjectName("helpText")
|
||||
self.help_label.setWordWrap(True)
|
||||
|
||||
@@ -106,9 +107,9 @@ class LoginDialog(QDialog):
|
||||
self.error_label.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse)
|
||||
|
||||
# Button
|
||||
self.copy_code_button = QPushButton("Copy code")
|
||||
self.copy_code_button = QPushButton(self.app.tr_text("Copy code"))
|
||||
self.copy_code_button.setObjectName("copyCodeButton")
|
||||
self.open_browser_button = QPushButton("Open browser")
|
||||
self.open_browser_button = QPushButton(self.app.tr_text("Open browser"))
|
||||
self.open_browser_button.setObjectName("openBrowserButton")
|
||||
|
||||
self.center_layout = QVBoxLayout()
|
||||
@@ -142,12 +143,12 @@ class LoginDialog(QDialog):
|
||||
|
||||
def copy_code(self):
|
||||
QApplication.clipboard().setText(self.code)
|
||||
self.copy_code_button.setText("Copied!")
|
||||
self.copy_code_button.setText(self.app.tr_text("Copied!"))
|
||||
self.copy_code_button.setEnabled(False)
|
||||
QTimer.singleShot(1200, self._reset_copy_button)
|
||||
|
||||
def _reset_copy_button(self):
|
||||
self.copy_code_button.setText("Copy code")
|
||||
self.copy_code_button.setText(self.app.tr_text("Copy code"))
|
||||
self.copy_code_button.setEnabled(True)
|
||||
|
||||
def set_error_message(self, message):
|
||||
@@ -173,9 +174,9 @@ class AccountPage(QWidget):
|
||||
|
||||
# Widgets
|
||||
self.account_list = QListWidget(self)
|
||||
self.add_account_button = QPushButton("Add Account")
|
||||
self.refresh_button = QPushButton("Refresh all")
|
||||
self.delete_all_button = QPushButton("Delete All")
|
||||
self.add_account_button = QPushButton(self.app.tr_text("Add Account"))
|
||||
self.refresh_button = QPushButton(self.app.tr_text("Refresh all"))
|
||||
self.delete_all_button = QPushButton(self.app.tr_text("Delete All"))
|
||||
|
||||
# Button click handle
|
||||
self.add_account_button.clicked.connect(self.start_login_page)
|
||||
@@ -244,7 +245,7 @@ class AccountPage(QWidget):
|
||||
|
||||
# Add suggestion to account list if no account available
|
||||
if not accounts:
|
||||
empty_item = QListWidgetItem("No accounts yet. Use Add Account to sign in.")
|
||||
empty_item = QListWidgetItem(self.app.tr_text("No accounts yet. Use Add Account to sign in."))
|
||||
empty_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||
empty_item.setFlags(Qt.ItemFlag.NoItemFlags)
|
||||
self.account_list.addItem(empty_item)
|
||||
@@ -258,9 +259,10 @@ class AccountPage(QWidget):
|
||||
|
||||
head_size = QSize(32, 32)
|
||||
widget = AccountWidget(
|
||||
self.app,
|
||||
account.display_name,
|
||||
self.account_manager.get_head_pixmap(account.avatar, head_size),
|
||||
"Current" if is_current else "Available",
|
||||
self.app.tr_text("Current" if is_current else "Available"),
|
||||
self,
|
||||
delete_account_callback=lambda: self._delete_account(account.id),
|
||||
check_account_callback=lambda: self._show_account_status(account.id),
|
||||
@@ -310,9 +312,14 @@ class AccountPage(QWidget):
|
||||
|
||||
QMessageBox.information(
|
||||
self,
|
||||
"Account status",
|
||||
f"{account.display_name} — Minecraft profile "
|
||||
f"{'available' if account.minecraft_uuid else 'not available'}",
|
||||
self.app.tr_text("Account status"),
|
||||
self.app.tr_text(
|
||||
"{account} — Minecraft profile {status}",
|
||||
account=account.display_name,
|
||||
status=self.app.tr_text(
|
||||
"available" if account.minecraft_uuid else "not available"
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
def _switch_account(self, account_id: str):
|
||||
@@ -336,7 +343,7 @@ class AccountPage(QWidget):
|
||||
# Create login dialog
|
||||
self.add_account_button.setEnabled(False)
|
||||
self.login_dialog = LoginDialog(parent=self, app=self.app)
|
||||
self.login_dialog.help_label.setText("Requesting a Microsoft sign-in code…")
|
||||
self.login_dialog.help_label.setText(self.app.tr_text("Requesting a Microsoft sign-in code…"))
|
||||
self.login_dialog.copy_code_button.setEnabled(False)
|
||||
self.login_dialog.open_browser_button.setEnabled(False)
|
||||
self.login_dialog.open_browser_button.clicked.connect(self.open_sign_in_page)
|
||||
@@ -351,7 +358,7 @@ class AccountPage(QWidget):
|
||||
|
||||
if self.login_dialog is not None:
|
||||
self.login_dialog.help_label.setText(
|
||||
device.get("message") or "Copy the code below, then continue in your browser."
|
||||
device.get("message") or self.app.tr_text("Copy the code below, then continue in your browser.")
|
||||
)
|
||||
self.login_dialog.set_code(device.get("user_code", ""))
|
||||
self.login_dialog.copy_code_button.setEnabled(True)
|
||||
@@ -378,11 +385,11 @@ class AccountPage(QWidget):
|
||||
def _login_failed(self, message: str):
|
||||
if self.login_dialog is not None:
|
||||
self.login_dialog.set_error_message(message)
|
||||
self.login_dialog.help_label.setText("Microsoft sign-in could not be completed.")
|
||||
self.login_dialog.help_label.setText(self.app.tr_text("Microsoft sign-in could not be completed."))
|
||||
self.login_dialog.copy_code_button.setEnabled(False)
|
||||
self.login_dialog.open_browser_button.setEnabled(False)
|
||||
else:
|
||||
QMessageBox.critical(self, "Microsoft sign-in failed", message)
|
||||
QMessageBox.critical(self, self.app.tr_text("Microsoft sign-in failed"), message)
|
||||
|
||||
def _login_finished(self):
|
||||
self.add_account_button.setEnabled(True)
|
||||
|
||||
Reference in New Issue
Block a user