Eagleget For Linux Today

# Forward to download manager if hasattr(self.server, 'callback'): self.server.callback(data.get('url')) self.send_response(200) self.end_headers() self.wfile.write(b'OK')

#!/usr/bin/env python3 import sys import os from PyQt5.QtWidgets import QApplication from ui.main_window import MainWindow def main(): app = QApplication(sys.argv) app.setApplicationName("EagleGet for Linux") app.setOrganizationName("EagleGet")

window = MainWindow() window.show()

def stop(self): if self.server: self.server.shutdown() setup.py eagleget for linux

def remove_download(self, task_id: str, delete_file: bool = False): if task_id in self.active_downloads: self.active_downloads[task_id].stop() del self.active_downloads[task_id] if delete_file: task = self.tasks[task_id] filepath = os.path.join(task.save_path, task.filename) if os.path.exists(filepath): os.remove(filepath) del self.tasks[task_id] self.delete_task(task_id)

import sys import os from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * from src.download_manager import DownloadManager, DownloadStatus

def refresh(self): self.layoutChanged.emit() class MainWindow(QMainWindow): def (self): super(). init () self.manager = DownloadManager() self.init_ui() self.timer = QTimer() self.timer.timeout.connect(self.update_progress) self.timer.start(1000) # Forward to download manager if hasattr(self

sys.exit(app.exec_()) if == ' main ': main() Desktop Integration eagleget.desktop

def update_progress(self): self.model.refresh() stats = self.manager.get_statistics() self.status_label.setText( f"Total: stats['total'] | " f"Downloading: stats['downloading'] | " f"Completed: stats['completed'] | " f"Size: self.format_size(stats['downloaded_size']) / self.format_size(stats['total_size'])" )

def load_tasks(self): conn = sqlite3.connect(self.db_path) cursor = conn.cursor() cursor.execute('SELECT * FROM downloads') for row in cursor.fetchall(): task = DownloadTask( id=row[0], url=row[1], filename=row[2], save_path=row[3], total_size=row[4], downloaded_size=row[5], status=DownloadStatus(row[6]), threads=row[7], speed=row[8], created_at=datetime.fromisoformat(row[9]), completed_at=datetime.fromisoformat(row[10]) if row[10] else None, md5=row[11] ) self.tasks[task.id] = task conn.close() 'Status'] def download_chunk(self

def delete_task(self, task_id: str): conn = sqlite3.connect(self.db_path) cursor = conn.cursor() cursor.execute('DELETE FROM downloads WHERE id = ?', (task_id,)) conn.commit() conn.close()

class DownloadTableModel(QAbstractTableModel): def (self, download_manager): super(). init () self.manager = download_manager self.headers = ['Filename', 'Size', 'Progress', 'Speed', 'Status']

def download_chunk(self, chunk: DownloadChunk): filepath = os.path.join(self.task.save_path, self.task.filename) temp_filepath = filepath + '.eagleget' # Check existing data if os.path.exists(temp_filepath): with open(temp_filepath, 'rb+') as f: f.seek(chunk.start) chunk.downloaded = f.tell() - chunk.start headers = {} if chunk.downloaded > 0: headers['Range'] = f'bytes=chunk.start + chunk.downloaded-chunk.end' else: headers['Range'] = f'bytes=chunk.start-chunk.end' try: response = requests.get(self.task.url, headers=headers, stream=True) with open(temp_filepath, 'r+b') as f: f.seek(chunk.start + chunk.downloaded) for data in response.iter_content(chunk_size=8192): if self.paused or self.stopped: break if data: f.write(data) with self.lock: chunk.downloaded += len(data) except Exception as e: print(f"Chunk chunk.thread_id failed: e")

def stop(self): self.stopped = True