From bc4f61bcdbcc7e551900d7632ac0fcca0ac8b73e Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Fri, 15 Oct 2021 02:11:39 +0100 Subject: [PATCH] Speed up mass resume/retry of downloads. GitHub issue #89 --- .../core/download/NetworkDownloader.groovy | 30 ++++++++++--------- .../com/muwire/gui/MainFrameModel.groovy | 4 +-- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/core/src/main/groovy/com/muwire/core/download/NetworkDownloader.groovy b/core/src/main/groovy/com/muwire/core/download/NetworkDownloader.groovy index e0888588..442b3d9b 100644 --- a/core/src/main/groovy/com/muwire/core/download/NetworkDownloader.groovy +++ b/core/src/main/groovy/com/muwire/core/download/NetworkDownloader.groovy @@ -220,22 +220,24 @@ class NetworkDownloader extends Downloader { } protected void doResume() { - readPieces() - destinations.stream().filter({!isHopeless(it)}).forEach { destination -> - log.fine("resuming source ${destination.toBase32()}") - def worker = activeWorkers.get(destination) - if (worker != null) { - if (worker.currentState == WorkerState.FINISHED) { - def newWorker = new DownloadWorker(destination) - activeWorkers.put(destination, newWorker) - executorService.submit(newWorker) + executorService.submit { + readPieces() + destinations.stream().filter({ !isHopeless(it) }).forEach { destination -> + log.fine("resuming source ${destination.toBase32()}") + def worker = activeWorkers.get(destination) + if (worker != null) { + if (worker.currentState == WorkerState.FINISHED) { + def newWorker = new DownloadWorker(destination) + activeWorkers.put(destination, newWorker) + executorService.submit(newWorker) + } + } else { + worker = new DownloadWorker(destination) + activeWorkers.put(destination, worker) + executorService.submit(worker) } - } else { - worker = new DownloadWorker(destination) - activeWorkers.put(destination, worker) - executorService.submit(worker) } - } + } as Runnable } void addSource(Destination d) { diff --git a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy index 4d14b7ec..33123a69 100644 --- a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy @@ -340,8 +340,8 @@ class MainFrameModel { if (state == Downloader.DownloadState.FAILED || state == Downloader.DownloadState.DOWNLOADING) it.downloader.resume() - updateTablePreservingSelection("downloads-table") } + updateTablePreservingSelection("downloads-table") } } @@ -654,7 +654,7 @@ class MainFrameModel { results.values().each { MVCGroup group -> if (group.alive) { - group.view.pane.getClientProperty("results-table")?.model.fireTableDataChanged() + group.view.refreshResults() } } }