""" Tab zur Verwaltung der erstellten Social-Media-Accounts. """ import logging from PyQt5.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, QTableWidget, QTableWidgetItem, QPushButton, QHeaderView, QMessageBox ) from PyQt5.QtCore import pyqtSignal, Qt logger = logging.getLogger("accounts_tab") class AccountsTab(QWidget): """Widget für den Konten-Tab.""" # Signale refresh_requested = pyqtSignal() export_requested = pyqtSignal() delete_requested = pyqtSignal(int) # account_id def __init__(self, platform_name=None, db_manager=None, language_manager=None): super().__init__() self.platform_name = platform_name self.db_manager = db_manager self.language_manager = language_manager self.init_ui() if self.language_manager: self.language_manager.language_changed.connect(self.update_texts) self.update_texts() # Konten laden, falls db_manager vorhanden if self.db_manager: self.load_accounts() def init_ui(self): """Initialisiert die Benutzeroberfläche.""" layout = QVBoxLayout(self) # Konten-Tabelle self.accounts_table = QTableWidget() self.accounts_table.setColumnCount(8) self.accounts_table.setHorizontalHeaderLabels([ "ID", "Benutzername", "Passwort", "E-Mail", "Handynummer", "Name", "Plattform", "Erstellt am", ]) self.accounts_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) # ID-Spalte verstecken self.accounts_table.setColumnHidden(0, True) layout.addWidget(self.accounts_table) # Button-Leiste button_layout = QHBoxLayout() self.refresh_button = QPushButton("Aktualisieren") self.refresh_button.clicked.connect(self.on_refresh_clicked) self.export_button = QPushButton("Exportieren") self.export_button.clicked.connect(self.on_export_clicked) self.delete_button = QPushButton("Löschen") self.delete_button.clicked.connect(self.on_delete_clicked) button_layout.addWidget(self.refresh_button) button_layout.addWidget(self.export_button) button_layout.addWidget(self.delete_button) layout.addLayout(button_layout) def load_accounts(self): """Lädt Konten aus der Datenbank und zeigt sie in der Tabelle an.""" try: if (self.platform_name and str(self.platform_name).lower() not in ["all", ""] and hasattr(self.db_manager, "get_accounts_by_platform")): accounts = self.db_manager.get_accounts_by_platform(self.platform_name.lower()) else: accounts = self.db_manager.get_all_accounts() if self.platform_name and str(self.platform_name).lower() not in ["all", ""]: accounts = [ acc for acc in accounts if acc.get("platform", "").lower() == str(self.platform_name).lower() ] self.display_accounts(accounts) except Exception as e: logger.error(f"Fehler beim Laden der Konten: {e}") QMessageBox.critical(self, "Fehler", f"Fehler beim Laden der Konten:\n{str(e)}") def display_accounts(self, accounts): """Zeigt die Konten in der Tabelle an.""" self.accounts_table.setRowCount(len(accounts)) for row, account in enumerate(accounts): self.accounts_table.setItem(row, 0, QTableWidgetItem(str(account.get("id", "")))) self.accounts_table.setItem(row, 1, QTableWidgetItem(account.get("username", ""))) self.accounts_table.setItem(row, 2, QTableWidgetItem(account.get("password", ""))) self.accounts_table.setItem(row, 3, QTableWidgetItem(account.get("email", ""))) self.accounts_table.setItem(row, 4, QTableWidgetItem(account.get("phone", ""))) self.accounts_table.setItem(row, 5, QTableWidgetItem(account.get("full_name", ""))) self.accounts_table.setItem(row, 6, QTableWidgetItem(account.get("platform", ""))) self.accounts_table.setItem(row, 7, QTableWidgetItem(account.get("created_at", ""))) def on_refresh_clicked(self): """Wird aufgerufen, wenn der Aktualisieren-Button geklickt wird.""" self.refresh_requested.emit() # Direkt aktualisieren, falls db_manager vorhanden if self.db_manager: self.load_accounts() def on_export_clicked(self): """Wird aufgerufen, wenn der Exportieren-Button geklickt wird.""" self.export_requested.emit() def on_delete_clicked(self): """Wird aufgerufen, wenn der Löschen-Button geklickt wird.""" selected_rows = self.accounts_table.selectionModel().selectedRows() if not selected_rows: title = "Kein Konto ausgewählt" text = "Bitte wählen Sie ein Konto zum Löschen aus." if self.language_manager: title = self.language_manager.get_text( "accounts_tab.no_selection_title", title ) text = self.language_manager.get_text( "accounts_tab.no_selection_text", text ) QMessageBox.warning(self, title, text) return account_id = int(self.accounts_table.item(selected_rows[0].row(), 0).text()) username = self.accounts_table.item(selected_rows[0].row(), 1).text() q_title = "Konto löschen" q_text = f"Möchten Sie das Konto '{username}' wirklich löschen?" if self.language_manager: q_title = self.language_manager.get_text("accounts_tab.delete_title", q_title) q_text = self.language_manager.get_text( "accounts_tab.delete_text", q_text ).format(username=username) reply = QMessageBox.question( self, q_title, q_text, QMessageBox.Yes | QMessageBox.No, QMessageBox.No, ) if reply == QMessageBox.Yes: self.delete_requested.emit(account_id) # Direkt aktualisieren, falls db_manager vorhanden if self.db_manager: success = self.db_manager.delete_account(account_id) if success: self.load_accounts() suc_title = "Erfolg" suc_text = f"Konto '{username}' wurde gelöscht." if self.language_manager: suc_title = self.language_manager.get_text( "accounts_tab.delete_success_title", suc_title ) suc_text = self.language_manager.get_text( "accounts_tab.delete_success_text", suc_text ).format(username=username) QMessageBox.information(self, suc_title, suc_text) else: err_title = "Fehler" err_text = f"Konto '{username}' konnte nicht gelöscht werden." if self.language_manager: err_title = self.language_manager.get_text( "accounts_tab.delete_error_title", err_title ) err_text = self.language_manager.get_text( "accounts_tab.delete_error_text", err_text ).format(username=username) QMessageBox.critical(self, err_title, err_text) def update_texts(self): """Aktualisiert UI-Texte gemäß aktueller Sprache.""" if not self.language_manager: return lm = self.language_manager self.refresh_button.setText(lm.get_text("buttons.refresh", "Aktualisieren")) self.export_button.setText(lm.get_text("buttons.export", "Exportieren")) self.delete_button.setText(lm.get_text("buttons.delete", "Löschen")) headers = lm.get_text( "accounts_tab.headers", [ "ID", "Benutzername", "Passwort", "E-Mail", "Handynummer", "Name", "Plattform", "Erstellt am", ], ) self.accounts_table.setHorizontalHeaderLabels(headers)