85 lines
3.1 KiB
Python
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()
|