diff --git a/src/core/interface/gui.py b/src/core/interface/gui.py index 7f27835..6f61d1e 100644 --- a/src/core/interface/gui.py +++ b/src/core/interface/gui.py @@ -145,32 +145,38 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): flush_log_buffer() - # Table Widget for Item List - self.qtablewidget = QTableWidget() - - self.qtablewidget.setColumnCount(4) - self.qtablewidget.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers) - self.qtablewidget.verticalHeader().setVisible(False) - self.qtablewidget.setHorizontalHeaderLabels(["Post Title", "Author", "Seeders", "Leechers"]) + def create_tracker_table(headers): + table = QTableWidget() + table.setColumnCount(len(headers)) + table.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers) + table.verticalHeader().setVisible(False) + table.setHorizontalHeaderLabels(headers) - + header = table.horizontalHeader() + header.setSectionResizeMode(0, QHeaderView.ResizeMode.Stretch) + header.setSectionResizeMode(1, QHeaderView.ResizeMode.Fixed) + header.resizeSection(1, 500) + header.setStretchLastSection(False) - header = self.qtablewidget.horizontalHeader() - header.setSectionResizeMode(0, QHeaderView.ResizeMode.Stretch) - header.setSectionResizeMode(1, QHeaderView.ResizeMode.Fixed) - header.setStretchLastSection(False) + return table + - self.qtablewidget.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) - self.qtablewidget.viewport().setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) + self.rutrackerlist = create_tracker_table(["Post Title", "Author", "Seeders", "Leechers"]) + self.uztrackerlist = create_tracker_table(["Post Title", "Author"]) + self.monkruslist = create_tracker_table(["Post Title", "Author"]) - header = self.qtablewidget.horizontalHeader() - header.setSectionResizeMode(1, QHeaderView.ResizeMode.Fixed) - header.resizeSection(1, 500) + state.tracker_list.update({"rutracker": self.rutrackerlist, "uztracker": self.uztrackerlist, "m0nkrus": self.monkruslist}) + + self.rutrackerlist.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) + self.rutrackerlist.viewport().setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) + + self.uztrackerlist.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) + self.uztrackerlist.viewport().setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) container = QWidget() containerLayout = QVBoxLayout() containerLayout.addWidget(self.searchbar) - containerLayout.addWidget(self.qtablewidget) + containerLayout.addWidget(state.tracker_list[state.tracker]) class DownloadModel(QAbstractTableModel): def __init__(self): @@ -351,7 +357,7 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): delegate.clicked.connect(on_pause_resume_clicked) # download button triggers - self.dlbutton.clicked.connect(lambda: run_thread(threading.Thread(target=download_selected, args=(self.qtablewidget.currentItem(), state.posts, state.post_titles)))) + self.dlbutton.clicked.connect(lambda: run_thread(threading.Thread(target=download_selected, args=(state.tracker_list[state.tracker].currentItem(), state.posts, state.post_titles)))) container.setLayout(containerLayout) self.setCentralWidget(container) @@ -371,15 +377,16 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): self.horizontal_layout = QHBoxLayout() self.horizontal_layout.addWidget(self.emptyResults, stretch=3) - self.horizontal_layout.addWidget(self.qtablewidget) + self.tracker_widget = state.tracker_list[state.tracker] + self.horizontal_layout.addWidget(self.tracker_widget) - self.tab1 = create_tab("Search", self.searchbar, self.qtablewidget, self.tabs, self.dlbutton, self.horizontal_layout) + self.tab1 = create_tab("Search", self.searchbar, state.tracker_list[state.tracker], self.tabs, self.dlbutton, self.horizontal_layout) # self.tab2 = create_tab("Library", self.emptyLibrary, self.libraryList, self.tabs, None, None) self.tab3 = create_tab("Downloads", self.emptyDownload, self.downloadList, self.tabs, None, None) if state.image_path is not None and os.path.exists(state.image_path): self.image = QImage(state.image_path) - self.image = self.image.scaledToWidth(300, Qt.SmoothTransformation) + self.image = self.image.scaledToWidth(300, Qt.TransformationMode.SmoothTransformation) self.pixmap = QPixmap.fromImage(self.image) self.overlay_label = QLabel(self) self.overlay_label.setPixmap(self.pixmap) @@ -506,12 +513,20 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): def set_tracker(self, _): state.tracker = self.tracker_list.currentText() + while self.horizontal_layout.count(): + item = self.horizontal_layout.takeAt(0) + if item.widget(): + item.widget().setParent(None) + + tracker_widget = state.tracker_list[state.tracker] + self.horizontal_layout.addWidget(tracker_widget) + def show_empty_results(self, show: bool): if show: - self.qtablewidget.hide() + state.tracker_list[state.tracker].hide() self.emptyResults.show() else: - self.qtablewidget.show() + state.tracker_list[state.tracker].show() self.emptyResults.hide() def show_empty_downloads(self): @@ -525,8 +540,8 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): # thank you claude def resizeEvent(self, event): super().resizeEvent(event) - table_width = self.qtablewidget.viewport().width() - self.qtablewidget.setColumnWidth(1, int(table_width * 0.3)) + table_width = state.tracker_list[state.tracker].viewport().width() + state.tracker_list[state.tracker].setColumnWidth(1, int(table_width * 0.3)) def contextMenuEvent(self, event: QContextMenuEvent): if self.downloadList.underMouse(): diff --git a/src/core/interface/utils/searchhelper.py b/src/core/interface/utils/searchhelper.py index 406cd89..af499b1 100644 --- a/src/core/interface/utils/searchhelper.py +++ b/src/core/interface/utils/searchhelper.py @@ -17,22 +17,22 @@ def return_pressed(self): response = scrape_uztracker(search_text) if response: state.post_titles, state.post_urls = response - self.qtablewidget.clear() + state.tracker_list[state.tracker].clear() if state.post_titles and len(state.post_titles) > 0: - self.qtablewidget.setHorizontalHeaderLabels(["Post Title", "Author"]) - self.qtablewidget.setRowCount(len(state.post_titles)) + state.tracker_list[state.tracker].setHorizontalHeaderLabels(["Post Title", "Author"]) + state.tracker_list[state.tracker].setRowCount(len(state.post_titles)) for i, author in enumerate(state.post_author): - self.qtablewidget.setItem(i, 1, QTableWidgetItem(author)) + state.tracker_list[state.tracker].setItem(i, 1, QTableWidgetItem(author)) for i, title in enumerate(state.post_titles): - self.qtablewidget.setItem(i, 0, QTableWidgetItem(title)) + state.tracker_list[state.tracker].setItem(i, 0, QTableWidgetItem(title)) self.show_empty_results(False) else: consoleLog(f"No Results for {search_text}") - self.qtablewidget.clear() + state.tracker_list[state.tracker].clear() self.show_empty_results(True) else: consoleLog(f"No response from uztracker") - self.qtablewidget.clear() + state.tracker_list[state.tracker].clear() self.show_empty_results(True) elif state.tracker == "rutracker": @@ -41,27 +41,27 @@ def return_pressed(self): _, state.posts, _, _, cached = split_data(response) if state.posts == []: consoleLog(f"No Results for {search_text}") - self.qtablewidget.clear() + state.tracker_list[state.tracker].clear() self.show_empty_results(True) else: state.post_titles, _, state.post_author, state.post_seeders, state.post_leechers = format_data(state.posts) self.show_empty_results(False) - self.qtablewidget.clear() - self.qtablewidget.setHorizontalHeaderLabels(["Post Title", "Author", "Seeders", "Leechers"]) - self.qtablewidget.setRowCount(len(state.post_titles)) + state.tracker_list[state.tracker].clear() + state.tracker_list[state.tracker].setHorizontalHeaderLabels(["Post Title", "Author", "Seeders", "Leechers"]) + state.tracker_list[state.tracker].setRowCount(len(state.post_titles)) for i, author in enumerate(state.post_author): - self.qtablewidget.setItem(i, 1, QTableWidgetItem(author)) + state.tracker_list[state.tracker].setItem(i, 1, QTableWidgetItem(author)) for i, title in enumerate(state.post_titles): - self.qtablewidget.setItem(i, 0, QTableWidgetItem(title)) + state.tracker_list[state.tracker].setItem(i, 0, QTableWidgetItem(title)) for i, seeders in enumerate(state.post_seeders): - self.qtablewidget.setItem(i, 2, QTableWidgetItem(seeders)) + state.tracker_list[state.tracker].setItem(i, 2, QTableWidgetItem(seeders)) for i, leechers in enumerate(state.post_leechers): - self.qtablewidget.setItem(i, 3, QTableWidgetItem(leechers)) + state.tracker_list[state.tracker].setItem(i, 3, QTableWidgetItem(leechers)) if state.debug == True: consoleLog(f"Response Cached: {cached}") else: consoleLog(f"No response from rutracker") - self.qtablewidget.clear() + state.tracker_list[state.tracker].clear() self.show_empty_results(True) elif state.tracker == "m0nkrus": @@ -69,15 +69,15 @@ def return_pressed(self): if state.posts == []: consoleLog(f"No Results for {search_text}") - self.qtablewidget.clear() + state.tracker_list[state.tracker].clear() self.show_empty_results(True) else: state.post_titles, _, state.post_author = format_data_m0nkrus(state.posts) self.show_empty_results(False) - self.qtablewidget.clear() - self.qtablewidget.setHorizontalHeaderLabels(["Post Title", "Author"]) - self.qtablewidget.setRowCount(len(state.post_titles)) + state.tracker_list[state.tracker].clear() + state.tracker_list[state.tracker].setHorizontalHeaderLabels(["Post Title", "Author"]) + state.tracker_list[state.tracker].setRowCount(len(state.post_titles)) for i, author in enumerate(state.post_author): - self.qtablewidget.setItem(i, 1, QTableWidgetItem(author)) + state.tracker_list[state.tracker].setItem(i, 1, QTableWidgetItem(author)) for i, title in enumerate(state.post_titles): - self.qtablewidget.setItem(i, 0, QTableWidgetItem(title)) + state.tracker_list[state.tracker].setItem(i, 0, QTableWidgetItem(title)) diff --git a/src/core/utils/data/state.py b/src/core/utils/data/state.py index bf99ba5..717729f 100644 --- a/src/core/utils/data/state.py +++ b/src/core/utils/data/state.py @@ -1,4 +1,5 @@ from PySide6.QtCore import QObject, Signal +from PySide6.QtWidgets import QTableWidget from typing import Optional, Any, List, Dict from pathlib import Path @@ -19,6 +20,7 @@ class AppState(QObject): self.debug: bool = False self.autoresume: bool = True self.tracker: str = "rutracker" + self.tracker_list: dict[str, QTableWidget] = {} self.api_url: str = "https://api.michijackson.xyz" self.download_path: str = str(Path.home() / "Downloads") self.up_speed_limit: int = 0