Eagleget For Linux Apr 2026
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'])" )
window = MainWindow() window.show()
def init_database(self): conn = sqlite3.connect(self.db_path) cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS downloads ( id TEXT PRIMARY KEY, url TEXT, filename TEXT, save_path TEXT, total_size INTEGER, downloaded_size INTEGER, status TEXT, threads INTEGER, speed REAL, created_at TEXT, completed_at TEXT, md5 TEXT ) ''') conn.commit() conn.close()
def get_statistics(self) -> Dict: total = len(self.tasks) completed = sum(1 for t in self.tasks.values() if t.status == DownloadStatus.COMPLETED) downloading = sum(1 for t in self.tasks.values() if t.status == DownloadStatus.DOWNLOADING) paused = sum(1 for t in self.tasks.values() if t.status == DownloadStatus.PAUSED) total_size = sum(t.total_size for t in self.tasks.values()) downloaded_size = sum(t.downloaded_size for t in self.tasks.values()) return 'total': total, 'completed': completed, 'downloading': downloading, 'paused': paused, 'total_size': total_size, 'downloaded_size': downloaded_size src/download_thread.py eagleget for linux
def pause_download(self): selection = self.table_view.selectionModel() if selection.hasSelection(): index = selection.selectedRows()[0] task = self.model.data(index, Qt.UserRole) if task.status == DownloadStatus.DOWNLOADING: self.manager.pause_download(task.id)
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 format_size(self, size): for unit in ['B', 'KB', 'MB', 'GB']: if size < 1024.0: return f"size:.1f unit" size /= 1024.0 return f"size:.1f TB" def update_progress(self): self
def format_size(self, size): for unit in ['B', 'KB', 'MB', 'GB']: if size < 1024.0: return f"size:.1f unit" size /= 1024.0 return f"size:.1f TB" class DownloadDialog(QDialog): def (self, parent=None): super(). init (parent) self.init_ui()
def format_speed(self, speed): return f"self.format_size(speed)/s"
def resume_from_temp(self, temp_filepath: str): with open(temp_filepath, 'rb') as f: f.seek(0, 2) file_size = f.tell() # Update chunk downloaded sizes for chunk in self.chunks: if file_size > chunk.start: chunk.downloaded = min(chunk.end - chunk.start + 1, file_size - chunk.start) stream=True) with open(temp_filepath
def stop(self): self.stopped = True
# 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')
def browse_folder(self): folder = QFileDialog.getExistingDirectory(self, "Select Save Directory") if folder: self.path_input.setText(folder)