facebook-tool/gui/main_window.py

85 lines
3.1 KiB
Python

from PyQt5.QtWidgets import QMainWindow, QTabWidget, QMessageBox
from gui.tabs.accounts.account_tab import AccountTab
from gui.tabs.products.product_tab import ProductTab
from gui.tabs.import_tab import ImportTab
from gui.tabs.listeds.listed_tab import ListedTab
from gui.tabs.settings.settings_tab import SettingsTab
from gui.core.login_handle_dialog import LoginHandleDialog
from stores.shared_store import SharedStore
from tasks.listed_tasks import start_background_listed
from gui.global_signals import global_signals
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Facebook Marketplace Manager")
self.resize(1200, 600)
# --- Tabs ---
self.tabs = QTabWidget()
self.account_tab = AccountTab()
self.product_tab = ProductTab()
self.import_tab = ImportTab()
self.listed_tab = ListedTab()
self.setting_tab = SettingsTab()
self.tabs.addTab(self.account_tab, "Accounts")
self.tabs.addTab(self.product_tab, "Products")
self.tabs.addTab(self.listed_tab, "Queue Handle")
self.tabs.addTab(self.import_tab, "Import Data")
self.tabs.addTab(self.setting_tab, "Setting")
self.tabs.currentChanged.connect(self.on_tab_changed)
self.setCentralWidget(self.tabs)
self.on_tab_changed(0)
# # --- Signals ---
# global_signals.listed_finished.connect(self.on_listed_task_finished)
# global_signals.dialog_finished.connect(self.on_dialog_finished)
# global_signals.open_login_dialog.connect(self.show_login_dialog)
# # --- Start background ---
# start_background_listed()
# --- Store opened dialogs ---
self.login_dialogs = []
def show_login_dialog(self, account_id, listed_id):
print(account_id, listed_id)
dialog = LoginHandleDialog(account_id=account_id, listed_id=listed_id)
dialog.show() # modeless
self.login_dialogs.append(dialog)
# Khi dialog đóng, remove khỏi list và SharedStore
def on_dialog_close():
if dialog in self.login_dialogs:
self.login_dialogs.remove(dialog)
self.on_dialog_finished(account_id, listed_id)
dialog.finished.connect(on_dialog_close)
def on_dialog_finished(self, account_id, listed_id):
"""Dialog xong, remove khỏi store"""
store = SharedStore.get_instance()
store.remove(listed_id)
def on_tab_changed(self, index):
tab = self.tabs.widget(index)
if hasattr(tab, "load_data") and not getattr(tab, "is_loaded", False):
tab.load_data()
tab.is_loaded = True
def on_listed_task_finished(self):
QMessageBox.information(
self,
"Auto Listing",
"All pending listed items have been processed!"
)
def closeEvent(self, event):
"""Khi MainWindow đóng, đóng hết tất cả dialog đang mở"""
for dialog in self.login_dialogs[:]: # copy list để tránh lỗi khi remove
dialog.close()
event.accept()