mirror of
https://github.com/KeksPirates/SoftwareManager.git
synced 2026-08-03 17:39:42 +02:00
feat: add context menu to search list to copy magnet uri and open in browser
This commit is contained in:
@@ -1,14 +1,18 @@
|
||||
from utils.logging.logs import consoleLog, remove_download_log
|
||||
from utils.data.tracker import get_magnet_link
|
||||
from PySide6.QtCore import Qt, QPoint, QTimer
|
||||
from utils.general.wrappers import run_thread
|
||||
from PySide6.QtWidgets import QMessageBox
|
||||
from PySide6.QtCore import Qt, QPoint
|
||||
from utils.data.state import state
|
||||
from PySide6 import QtWidgets
|
||||
import threading
|
||||
import webbrowser
|
||||
import subprocess
|
||||
import platform
|
||||
import time
|
||||
import os
|
||||
|
||||
class ContextMenu:
|
||||
class ContextMenu_Downloads:
|
||||
def __init__(self, main_window):
|
||||
self.main_window = main_window
|
||||
self.context_menu = QtWidgets.QMenu(main_window)
|
||||
@@ -147,3 +151,67 @@ class ContextMenu:
|
||||
consoleLog(f"Error deleting files: {last_error}", True)
|
||||
else:
|
||||
consoleLog(f"Removed entry (files not found): {torrent_name}", True)
|
||||
|
||||
class ContextMenu_TrackerTable:
|
||||
def __init__(self, main_window):
|
||||
self.main_window = main_window
|
||||
self.context_menu = QtWidgets.QMenu(main_window)
|
||||
self.context_menu.addAction("Copy Tracker URL", self.copyMagnetURIAction)
|
||||
self.context_menu.addAction("Open in Browser", self.openInBrowserAction)
|
||||
|
||||
state.trackertable.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
|
||||
state.trackertable.customContextMenuRequested.connect(self._show_context_menu)
|
||||
|
||||
@property
|
||||
def TrackerTable(self):
|
||||
return state.trackertable
|
||||
|
||||
def _show_context_menu(self, pos: QPoint):
|
||||
index = self.TrackerTable.indexAt(pos)
|
||||
if index.isValid():
|
||||
self._context_menu_row = index.row()
|
||||
self.context_menu.exec(self.TrackerTable.viewport().mapToGlobal(pos))
|
||||
|
||||
def copyMagnetURIAction(self):
|
||||
if not hasattr(self, '_context_menu_row'):
|
||||
return
|
||||
row = self._context_menu_row
|
||||
if row < 0 or row >= len(state.trackers):
|
||||
return
|
||||
|
||||
item = list(state.trackertable.selectedItems())[0]
|
||||
|
||||
def copy_magnet_uri(items):
|
||||
if state.posts:
|
||||
row = items[0].row()
|
||||
post = state.posts[row]
|
||||
url = post.get("url")
|
||||
|
||||
magnet = get_magnet_link(url)
|
||||
|
||||
if magnet:
|
||||
QTimer.singleShot(0, lambda: copy_to_clipboard(magnet))
|
||||
|
||||
def copy_to_clipboard(magnet):
|
||||
clipboard = QtWidgets.QApplication.clipboard()
|
||||
clipboard.setText(magnet)
|
||||
consoleLog("Magnet URI copied to clipboard!", True)
|
||||
|
||||
run_thread(threading.Thread(target=copy_magnet_uri, args=([item],)))
|
||||
|
||||
def openInBrowserAction(self):
|
||||
if not hasattr(self, '_context_menu_row'):
|
||||
return
|
||||
row = self._context_menu_row
|
||||
if row < 0 or row >= len(state.trackers):
|
||||
return
|
||||
|
||||
item = list(state.trackertable.selectedItems())[0]
|
||||
row = item.row()
|
||||
|
||||
if state.posts:
|
||||
post = state.posts[row]
|
||||
url = post.get("url")
|
||||
if url:
|
||||
try: webbrowser.open(url)
|
||||
except Exception as e: consoleLog(f"Failed to open URL: {e}", True)
|
||||
|
||||
@@ -143,6 +143,9 @@ class MainWindow(QtWidgets.QMainWindow, QWidget):
|
||||
self.downloadList = _create_download_list(self)
|
||||
self.downloadList.viewport().installEventFilter(self)
|
||||
|
||||
table = state.trackertable
|
||||
# table.clicked.connect(lambda: setattr(self, '_tracker_hovered_row', table.indexAt(table.viewport().mapFromGlobal(QtGui.QCursor.pos())).row()))
|
||||
|
||||
self.dlbutton.clicked.connect(lambda: run_thread(threading.Thread(target=download_selected, args=(state.trackertable.selectedItems(),))))
|
||||
|
||||
container.setLayout(containerLayout)
|
||||
@@ -251,7 +254,8 @@ class MainWindow(QtWidgets.QMainWindow, QWidget):
|
||||
self.active_timer.timeout.connect(self.show_empty_downloads)
|
||||
self.active_timer.start(500)
|
||||
|
||||
self._context_menu = interface.dialogs.contextmenu.ContextMenu(self)
|
||||
self._context_menu_downloads = interface.dialogs.contextmenu.ContextMenu_Downloads(self)
|
||||
self._context_menu_trackertable = interface.dialogs.contextmenu.ContextMenu_TrackerTable(self)
|
||||
self.image_overlay = Image(self)
|
||||
|
||||
def _apply_default_headers(self, table):
|
||||
@@ -343,7 +347,7 @@ class MainWindow(QtWidgets.QMainWindow, QWidget):
|
||||
|
||||
table.setRowCount(len(state.posts))
|
||||
for x, rowdata in enumerate(state.posts):
|
||||
for y, (key, data) in enumerate(rowdata.items()):
|
||||
for y, (_, data) in enumerate(rowdata.items()):
|
||||
item = QTableWidgetItem(str(data))
|
||||
item.setData(Qt.ItemDataRole.UserRole, x)
|
||||
table.setItem(x, y, item)
|
||||
|
||||
Reference in New Issue
Block a user