class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Media Downloader")
self.setGeometry(100, 100, 800, 600)
central_widget = QWidget()
self.setCentralWidget(central_widget)
layout = QVBoxLayout()
# Поле для ввода URL
url_layout = QHBoxLayout()
url_label = QLabel("URL сайта:")
self.url_input = QLineEdit()
self.url_input.setPlaceholderText("https://example.com")
url_layout.addWidget(url_label)
url_layout.addWidget(self.url_input)
layout.addLayout(url_layout)
# Кнопки управления
button_layout = QHBoxLayout()
self.scan_button = QPushButton("Найти медиафайлы")
self.download_button = QPushButton("Скачать выбранное")
self.download_all_button = QPushButton("Скачать всё")
self.stop_button = QPushButton("Остановить")
self.stop_button.setEnabled(False)
button_layout.addWidget(self.scan_button)
button_layout.addWidget(self.download_button)
button_layout.addWidget(self.download_all_button)
button_layout.addWidget(self.stop_button)
layout.addLayout(button_layout)
# Список файлов
self.file_list = QListWidget()
self.file_list.setSelectionMode(QListWidget.MultiSelection)
layout.addWidget(self.file_list)
# Прогресс бар
self.progress_bar = QProgressBar()
self.progress_bar.setValue(0)
layout.addWidget(self.progress_bar)
# Логирование
self.log_area = QTextEdit()
self.log_area.setReadOnly(True)
layout.addWidget(self.log_area)
central_widget.setLayout(layout)
# Подключаем кнопки к функциям
self.scan_button.clicked.connect(self.scan_website)
self.download_button.clicked.connect(self.download_selected)
self.download_all_button.clicked.connect(self.download_all)
self.stop_button.clicked.connect(self.stop_download)
self.download_thread = None # Поток для загрузки
def scan_website(self):
url = self.url_input.text().strip()
if not url:
QMessageBox.warning(self, "Ошибка", "Введите URL сайта!")
return
self.log_area.clear()
self.log_area.append(f"Начинаем сканирование: {url}")
# Запускаем поток для сканирования
self.download_thread = DownloadThread(url)
self.download_thread.log_signal.connect(self.update_log)
self.download_thread.finished_signal.connect(self.scan_finished)
self.download_thread.start()
self.scan_button.setEnabled(False)
self.stop_button.setEnabled(True)
def update_log(self, message):
self.log_area.append(message)
def scan_finished(self):
self.scan_button.setEnabled(True)
self.stop_button.setEnabled(False)
self.log_area.append("Сканирование завершено!")
def download_selected(self):
selected_items = self.file_list.selectedItems()
if not selected_items:
QMessageBox.warning(self, "Ошибка", "Выберите файлы для скачивания!")
return
urls = [item.data(Qt.UserRole) for item in selected_items]
self.start_download(urls, "selected")
def download_all(self):
items = [self.file_list.item(i) for i in range(self.file_list.count())]
urls = [item.data(Qt.UserRole) for item in items]
self.start_download(urls, "all")
def start_download(self, urls, mode):
url = self.url_input.text().strip()
if not url:
QMessageBox.warning(self, "Ошибка", "Введите URL сайта!")
return
self.log_area.append(f"Начинаем скачивание ({mode})...")
self.download_thread = DownloadThread(url, selected_files=urls)
self.download_thread.progress_signal.connect(self.update_progress)
self.download_thread.log_signal.connect(self.update_log)
self.download_thread.finished_signal.connect(self.download_finished)
self.download_thread.start()
self.scan_button.setEnabled(False)
self.download_button.setEnabled(False)
self.download_all_button.setEnabled(False)
self.stop_button.setEnabled(True)
def update_progress(self, value):
self.progress_bar.setValue(value)
def download_finished(self):
self.scan_button.setEnabled(True)
self.download_button.setEnabled(True)
self.download_all_button.setEnabled(True)
self.stop_button.setEnabled(False)
self.progress_bar.setValue(0)
self.log_area.append("Скачивание завершено!")
def stop_download(self):
if self.download_thread:
self.download_thread.stop()
self.log_area.append("Загрузка остановлена!")