sp-hydra-veil-gui/gui/v2/ui/pages/hidetor_page.py
2026-08-21 11:39:18 -04:00

110 lines
5 KiB
Python
Executable file

import os
from PyQt6.QtWidgets import QPushButton, QButtonGroup
from PyQt6.QtGui import QPixmap, QIcon
from PyQt6.QtCore import Qt
from PyQt6 import QtCore
from gui.v2.ui.pages.Page import Page
from gui.v2.ui.pages.location_page import LocationPage
class HidetorPage(Page):
def __init__(self, page_stack, main_window, parent=None):
super().__init__("HideTor", page_stack, main_window, parent)
self.selected_location_icon = None
self.connection_manager = main_window.connection_manager
self.update_status = main_window
self.replace_click_handler(self.button_next, self.go_selected)
self.button_reverse.setVisible(True)
self.replace_click_handler(self.button_reverse, self.reverse)
self.display.setGeometry(QtCore.QRect(5, 10, 390, 520))
self.title.setGeometry(395, 40, 380, 40)
self.title.setText("Pick a location")
if self.connection_manager.is_synced():
from gui.v2.actions.sync import generate_grid_positions
locs = self.connection_manager.get_location_list()
positions = generate_grid_positions(len(locs))
available = [(QPushButton, loc, positions[i]) for i, loc in enumerate(locs)]
self.create_interface_elements(available)
def create_interface_elements(self, available_locations):
self.buttonGroup = QButtonGroup(self)
self.buttons = []
for j, (object_type, icon_name, geometry) in enumerate(available_locations):
boton = object_type(self)
boton.setGeometry(*geometry)
boton.setIconSize(boton.size())
boton.setCheckable(True)
locations = self.connection_manager.get_location_info(icon_name)
if icon_name == 'my_14':
boton.setVisible(False)
if locations and not (hasattr(locations, 'is_proxy_capable') and locations.is_proxy_capable):
boton.setVisible(False)
icon_path = os.path.join(self.btn_path, f"button_{icon_name}.png")
boton.setIcon(QIcon(icon_path))
fallback_path = os.path.join(
self.btn_path, "default_location_button.png")
provider = locations.operator.name if locations and hasattr(
locations, 'operator') else None
if boton.icon().isNull():
if locations and hasattr(locations, 'country_name'):
location_name = locations.country_name
base_image = LocationPage.create_location_button_image(
location_name, fallback_path, provider)
boton.setIcon(QIcon(base_image))
else:
base_image = LocationPage.create_location_button_image(
'', fallback_path, provider)
boton.setIcon(QIcon(base_image))
else:
if locations and hasattr(locations, 'country_name'):
base_image = LocationPage.create_location_button_image(
f'{locations.country_code}_{locations.code}', fallback_path, provider, icon_path)
boton.setIcon(QIcon(base_image))
else:
base_image = LocationPage.create_location_button_image(
'', fallback_path, provider, icon_path)
boton.setIcon(QIcon(base_image))
self.buttons.append(boton)
self.buttonGroup.addButton(boton, j)
boton.location_icon_name = icon_name
boton.setCursor(QtCore.Qt.CursorShape.PointingHandCursor)
boton.clicked.connect(
lambda checked, loc=icon_name: self.show_location(loc))
def update_swarp_json(self):
inserted_data = {
"location": self.selected_location_icon,
"connection": "tor"
}
self.update_status.write_data(inserted_data)
def show_location(self, location):
tor_hide_img = f'hdtor_{location}'
self.display.setPixmap(QPixmap(os.path.join(self.btn_path, f"{tor_hide_img}.png")).scaled(
self.display.size(), Qt.AspectRatioMode.KeepAspectRatio))
self.selected_location_icon = location
self.button_next.setVisible(True)
self.update_swarp_json()
def reverse(self):
profile_data = self.update_status.read_data()
self.limpiar()
if profile_data.get("protocol") == "residential":
self.custom_window.navigator.navigate("residential")
else:
self.custom_window.navigator.navigate("protocol")
def go_selected(self):
self.custom_window.navigator.navigate("browser")
def show_location_verification(self, location_icon_name):
from gui.v2.ui.pages.location_verification_page import LocationVerificationPage
verification_page = LocationVerificationPage(
self.page_stack, self.update_status, location_icon_name, self)
self.page_stack.addWidget(verification_page)
self.page_stack.setCurrentIndex(
self.page_stack.indexOf(verification_page))