Files
SoftwareManager/core/ui/gui.py
T
2025-09-03 22:21:03 +02:00

103 lines
3.6 KiB
Python

from PySide6 import QtWidgets
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QLineEdit, QWidget, QVBoxLayout, QListWidget, QToolBar
from PySide6.QtGui import QIcon, QAction
import darkdetect
from core.scraping.uztracker_scraper import scrape_uztracker
from core.scraping.uztracker_scraper import get_magnet_link
from core.downloading.download import start_client
from core.downloading.download import add_magnet
class MainWindow(QtWidgets.QMainWindow, QWidget):
def __init__(self):
global settings_action
super().__init__()
searchresults = []
self.setWindowTitle("Software Manager")
self.setGeometry(100, 100, 800, 600)
self.controls = QWidget()
self.controlsLayout = QVBoxLayout()
# Widgets
self.searchbar = QLineEdit()
self.searchbar.setPlaceholderText("Search for software...")
self.searchbar.setClearButtonEnabled(True)
self.searchbar.setMinimumHeight(30)
self.searchbar.returnPressed.connect(self.return_pressed)
self.button = QtWidgets.QPushButton("Download")
self.softwareList = QListWidget()
container = QWidget()
containerLayout = QVBoxLayout()
containerLayout.addWidget(self.searchbar)
containerLayout.addWidget(self.softwareList)
self.softwareList.addItems(searchresults)
containerLayout.addWidget(self.button)
self.button.clicked.connect(lambda: self.download_selected())
self.button.clicked.connect(lambda: self.get_selected_item())
container.setLayout(containerLayout)
self.setCentralWidget(container)
containerLayout.setAlignment(Qt.AlignmentFlag.AlignBottom)
toolbar = QToolBar("Main Toolbar")
self.addToolBar(toolbar)
toolbar.setLayoutDirection(Qt.RightToLeft)
if darkdetect.isDark():
settings_action = QAction(QIcon("core/assets/settings_dark.png"), "Settings", self)
else:
settings_action = QAction(QIcon("core/assets/settings.png"), "Settings", self)
settings_action.triggered.connect(self.open_settings)
toolbar.addAction(settings_action)
toolbar.setMovable(False)
def open_settings(self):
print("Settings clicked")
def download_selected(self):
item = self.softwareList.currentItem()
if item is not None:
print(f"Downloading {self.softwareList.currentItem().text()}")
self.get_item_index(self.softwareList.currentItem().text(), self.postnames, self.postlinks)
else:
print("No item selected for download.")
def get_selected_item(self):
item = self.softwareList.currentItem()
if item is not None:
return item.text()
return ""
def return_pressed(self):
search_text = self.searchbar.text()
self.postnames, self.postlinks = scrape_uztracker(search_text)
self.softwareList.clear()
if self.postnames:
self.softwareList.addItems(self.postnames)
print("User searched for:", search_text)
def get_item_index(self, item, list, listlinks):
position = list.index(item)
if 0 <= position < len(listlinks): # note for myself: py starts counting at 0; check if number is not negative, check if number is not more than list length.
selected = "https://uztracker.net/" + listlinks[position].lstrip("./")
post_url = selected
print(selected)
selected_magnet = get_magnet_link(selected)
start_client()
add_magnet(selected_magnet)