migrate from PyQt6 to PySide6, remove unneeded dependencies

This commit is contained in:
2025-06-17 16:21:56 +02:00
parent c3d9daa1b0
commit 7eb55c21d0
101 changed files with 898 additions and 464 deletions

View File

@@ -1,6 +1,10 @@
from .widget_sources.welcome_wizard_ui import Ui_Wizard
from PyQt6 import QtWidgets, QtCore, QtGui
from PySide6 import QtWidgets, QtCore, QtGui
from src import settings
from src.backend import AdminCommands
from appdirs import AppDirs
appdirs = AppDirs("SemesterApparatsManager", "SAM")
class WelcomeWizard(QtWidgets.QWizard, Ui_Wizard):
def __init__(self, parent=None):
@@ -8,21 +12,146 @@ class WelcomeWizard(QtWidgets.QWizard, Ui_Wizard):
self.setupUi(self)
self.btn_database.clicked.connect(self.open_database_settings)
self.btn_temp.clicked.connect(self.open_temp_settings)
self.btn_test.clicked.connect(self.test_login_data)
self.btn_create.clicked.connect(self.create_sam_user)
# mail password field
self.settings_mail_password.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
# allow user to toggle password visibility
self.settings_mail_password.setContextMenuPolicy(
QtCore.Qt.ContextMenuPolicy.CustomContextMenu
)
self.settings_mail_password.customContextMenuRequested.connect(
self.toggle_password_visibility
)
# if button for next page is clicked, run function to store settings
self.button(QtWidgets.QWizard.WizardButton.FinishButton).clicked.connect(
self.store_settings
)
self.settings_mail_use_user_name.toggled.connect(self.set_check_text)
# set initial values for checkbox, database
self.set_check_text(self.settings_mail_use_user_name.isChecked())
self.settings_database.setText(
str(settings.database.path) or str(appdirs.user_data_dir)
)
self.settings_temp.setText(
str(settings.database.temp) or str(appdirs.user_cache_dir)
)
def test_login_data(self):
sam_users = AdminCommands().list_users()
sam_users = [user[2] for user in sam_users]
if not sam_users:
QtWidgets.QMessageBox.critical(
self,
"Error",
"No SAM users found. Please create a SAM user first.",
)
return
username = self.sam_username.text()
if username in sam_users:
QtWidgets.QMessageBox.information(
self,
"Error",
f"User '{username}' exists in SAM.",
)
def create_sam_user(self):
"""Create a SAM user in the database."""
admin = AdminCommands()
if not admin.create_user(self.sam_username.text(), self.sam_password.text()):
QtWidgets.QMessageBox.critical(
self,
"Error",
"Failed to create SAM user",
)
else:
QtWidgets.QMessageBox.information(
self,
"Success",
"SAM user created successfully",
)
def set_check_text(self, checked):
"""Set the text of the checkbox based on its state."""
if checked:
self.settings_mail_use_user_name.setText("Nutzername wird verwendet")
else:
self.settings_mail_use_user_name.setText("Nutzername wird nicht verwendet")
def toggle_password_visibility(self, pos):
"""Toggle the visibility of the password field."""
if (
self.settings_mail_password.echoMode()
== QtWidgets.QLineEdit.EchoMode.Password
):
self.settings_mail_password.setEchoMode(QtWidgets.QLineEdit.EchoMode.Normal)
else:
self.settings_mail_password.setEchoMode(
QtWidgets.QLineEdit.EchoMode.Password
)
def store_settings(self):
# database page
db_path = self.settings_database.text()
temp_path = self.settings_temp.text()
db_name = self.settings_database_name.text()
# mail page
smtp_server = self.settings_mail_smtp_server.text()
smtp_port = self.settings_mail_smtp_port.text()
mail_sender = self.settings_mail_address.text()
mail_user_name = self.settings_mail_user_name.text()
mail_password = self.settings_mail_password.text()
mail_printer_mail = self.settings_mail_printer.text()
mail_signature = self.settings_mail_signature.toPlainText()
use_user_name = self.settings_mail_use_user_name.isChecked()
# zotero page
zotero__api_key = self.settings_zotero_api_key.text()
zotero_user_id = self.settings_zotero_library_id.text()
zotero_library_type = self.settings_zotero_library_type.text()
# openai page
openai_api_key = self.settings_openai_api_key.text()
openai_model = self.settings_openai_model.currentText()
# store settings in config
settings.set_database_attr("path", db_path)
settings.set_database_attr("name", db_name)
settings.set_database_attr("temp", temp_path)
settings.set_mail_attr("smtp_server", smtp_server)
settings.set_mail_attr("port", smtp_port)
settings.set_mail_attr("sender", mail_sender)
settings.set_mail_attr("user_name", mail_user_name)
settings.set_mail_attr("password", mail_password)
settings.set_mail_attr("printer_mail", mail_printer_mail)
settings.set_mail_attr("signature", mail_signature)
settings.set_mail_attr("use_user_name", use_user_name)
settings.set_zotero_attr("api_key", zotero__api_key)
settings.set_zotero_attr("library_id", zotero_user_id)
settings.set_zotero_attr("library_type", zotero_library_type)
settings.set_openai_attr("api_key", openai_api_key)
settings.set_openai_attr("model", openai_model)
# save settings to file
print("Saving settings...")
print(settings)
settings.save()
def open_database_settings(self):
#open filepicker dialog to select database file folder
file_dialog = QtWidgets.QFileDialog(self, "Select Database File")
file_dialog.setFileMode(QtWidgets.QFileDialog.FileMode.ExistingFile)
file_dialog.setNameFilter("Database Files (*.db *.sqlite *.sqlite3)")
file_dialog.setFileMode(QtWidgets.QFileDialog.FileMode.Directory)
file_dialog.setViewMode(QtWidgets.QFileDialog.ViewMode.List)
file_dialog.setDirectory(settings.database.path) # Set initial directory if needed
file_dialog.setOption(QtWidgets.QFileDialog.Option.DontUseNativeDialog, True)
file_dialog.setWindowFlags(file_dialog.windowFlags() | QtCore.Qt.WindowType.WindowStaysOnTopHint)
# set start dir to appdir.user_data_dir
file_dialog.setDirectory(str(appdirs.user_data_dir))
if file_dialog.exec():
selected_files = file_dialog.selectedFiles()
if selected_files:
# Do something with the selected database file
print("Selected database file:", selected_files[0])
db_path = selected_files[0]
self.settings_database.setText(db_path)
def open_temp_settings(self):
#open filepicker dialog to select temporary directory
@@ -34,8 +163,8 @@ class WelcomeWizard(QtWidgets.QWizard, Ui_Wizard):
selected_dirs = dir_dialog.selectedFiles()
if selected_dirs:
# Do something with the selected temporary directory
print("Selected temporary directory:", selected_dirs[0])
temp_path = selected_dirs[0]
self.settings_temp.setText(temp_path)
def launch_wizard():
"""Launch the welcome wizard."""