diff --git a/core/src/main/groovy/com/muwire/core/Core.groovy b/core/src/main/groovy/com/muwire/core/Core.groovy index 96220a0c..487c113d 100644 --- a/core/src/main/groovy/com/muwire/core/Core.groovy +++ b/core/src/main/groovy/com/muwire/core/Core.groovy @@ -17,6 +17,7 @@ import com.muwire.core.download.SourceDiscoveredEvent import com.muwire.core.download.UIDownloadCancelledEvent import com.muwire.core.download.UIDownloadEvent import com.muwire.core.download.UIDownloadPausedEvent +import com.muwire.core.download.UIDownloadResumedEvent import com.muwire.core.files.FileDownloadedEvent import com.muwire.core.files.FileHashedEvent import com.muwire.core.files.FileHasher @@ -219,6 +220,7 @@ public class Core { eventBus.register(UIDownloadCancelledEvent.class, downloadManager) eventBus.register(SourceDiscoveredEvent.class, downloadManager) eventBus.register(UIDownloadPausedEvent.class, downloadManager) + eventBus.register(UIDownloadResumedEvent.class, downloadManager) log.info("initializing upload manager") UploadManager uploadManager = new UploadManager(eventBus, fileManager, meshManager, downloadManager) diff --git a/core/src/main/groovy/com/muwire/core/download/DownloadManager.groovy b/core/src/main/groovy/com/muwire/core/download/DownloadManager.groovy index da17e667..f15efbcd 100644 --- a/core/src/main/groovy/com/muwire/core/download/DownloadManager.groovy +++ b/core/src/main/groovy/com/muwire/core/download/DownloadManager.groovy @@ -94,6 +94,10 @@ public class DownloadManager { persistDownloaders() } + public void onUIDownloadResumedEvent(UIDownloadResumedEvent e) { + persistDownloaders() + } + void resume(Downloader downloader) { executor.execute({downloader.download() as Runnable}) } @@ -125,9 +129,10 @@ public class DownloadManager { infoHash, json.pieceSizePow2, connector, destinations, incompletes, pieces) if (json.paused != null) downloader.paused = json.paused + downloaders.put(infoHash, downloader) + downloader.readPieces() if (!downloader.paused) - downloaders.put(infoHash, downloader) - downloader.download() + downloader.download() eventBus.publish(new DownloadStartedEvent(downloader : downloader)) } } diff --git a/core/src/main/groovy/com/muwire/core/download/Downloader.groovy b/core/src/main/groovy/com/muwire/core/download/Downloader.groovy index 3f465d9c..34c71515 100644 --- a/core/src/main/groovy/com/muwire/core/download/Downloader.groovy +++ b/core/src/main/groovy/com/muwire/core/download/Downloader.groovy @@ -207,11 +207,12 @@ public class Downloader { } public void resume() { + paused = false + readPieces() destinations.each { destination -> def worker = activeWorkers.get(destination) if (worker != null) { if (worker.currentState == WorkerState.FINISHED) { - paused = false def newWorker = new DownloadWorker(destination) activeWorkers.put(destination, newWorker) executorService.submit(newWorker) diff --git a/core/src/main/groovy/com/muwire/core/download/UIDownloadResumedEvent.groovy b/core/src/main/groovy/com/muwire/core/download/UIDownloadResumedEvent.groovy new file mode 100644 index 00000000..7385eee8 --- /dev/null +++ b/core/src/main/groovy/com/muwire/core/download/UIDownloadResumedEvent.groovy @@ -0,0 +1,6 @@ +package com.muwire.core.download + +import com.muwire.core.Event + +class UIDownloadResumedEvent extends Event { +} diff --git a/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy b/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy index 7e1b4de2..440ed14e 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy @@ -18,6 +18,7 @@ import com.muwire.core.download.DownloadStartedEvent import com.muwire.core.download.UIDownloadCancelledEvent import com.muwire.core.download.UIDownloadEvent import com.muwire.core.download.UIDownloadPausedEvent +import com.muwire.core.download.UIDownloadResumedEvent import com.muwire.core.search.QueryEvent import com.muwire.core.search.SearchEvent import com.muwire.core.trust.TrustEvent @@ -165,6 +166,7 @@ class MainFrameController { void resume() { def downloader = model.downloads[selectedDownload()].downloader downloader.resume() + core.eventBus.publish(new UIDownloadResumedEvent()) } @ControllerAction