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("Загрузка остановлена!")
Made on
Tilda