mirror of https://github.com/zlatinb/muwire
pass new sources to active downloaders
parent
6eb1aa07f5
commit
0f07562de3
|
@ -13,6 +13,7 @@ import com.muwire.core.connection.I2PConnector
|
||||||
import com.muwire.core.connection.LeafConnectionManager
|
import com.muwire.core.connection.LeafConnectionManager
|
||||||
import com.muwire.core.connection.UltrapeerConnectionManager
|
import com.muwire.core.connection.UltrapeerConnectionManager
|
||||||
import com.muwire.core.download.DownloadManager
|
import com.muwire.core.download.DownloadManager
|
||||||
|
import com.muwire.core.download.SourceDiscoveredEvent
|
||||||
import com.muwire.core.download.UIDownloadCancelledEvent
|
import com.muwire.core.download.UIDownloadCancelledEvent
|
||||||
import com.muwire.core.download.UIDownloadEvent
|
import com.muwire.core.download.UIDownloadEvent
|
||||||
import com.muwire.core.files.FileDownloadedEvent
|
import com.muwire.core.files.FileDownloadedEvent
|
||||||
|
@ -203,11 +204,12 @@ public class Core {
|
||||||
eventBus.register(ResultsEvent.class, searchManager)
|
eventBus.register(ResultsEvent.class, searchManager)
|
||||||
|
|
||||||
log.info("initializing download manager")
|
log.info("initializing download manager")
|
||||||
downloadManager = new DownloadManager(eventBus, i2pConnector, home, me)
|
downloadManager = new DownloadManager(eventBus, trustService, props, i2pConnector, home, me)
|
||||||
eventBus.register(UIDownloadEvent.class, downloadManager)
|
eventBus.register(UIDownloadEvent.class, downloadManager)
|
||||||
eventBus.register(UILoadedEvent.class, downloadManager)
|
eventBus.register(UILoadedEvent.class, downloadManager)
|
||||||
eventBus.register(FileDownloadedEvent.class, downloadManager)
|
eventBus.register(FileDownloadedEvent.class, downloadManager)
|
||||||
eventBus.register(UIDownloadCancelledEvent.class, downloadManager)
|
eventBus.register(UIDownloadCancelledEvent.class, downloadManager)
|
||||||
|
eventBus.register(SourceDiscoveredEvent.class, downloadManager)
|
||||||
|
|
||||||
log.info("initializing upload manager")
|
log.info("initializing upload manager")
|
||||||
UploadManager uploadManager = new UploadManager(eventBus, fileManager)
|
UploadManager uploadManager = new UploadManager(eventBus, fileManager)
|
||||||
|
|
|
@ -3,6 +3,8 @@ package com.muwire.core.download
|
||||||
import com.muwire.core.connection.I2PConnector
|
import com.muwire.core.connection.I2PConnector
|
||||||
import com.muwire.core.files.FileDownloadedEvent
|
import com.muwire.core.files.FileDownloadedEvent
|
||||||
import com.muwire.core.files.FileHasher
|
import com.muwire.core.files.FileHasher
|
||||||
|
import com.muwire.core.trust.TrustLevel
|
||||||
|
import com.muwire.core.trust.TrustService
|
||||||
import com.muwire.core.util.DataUtil
|
import com.muwire.core.util.DataUtil
|
||||||
|
|
||||||
import groovy.json.JsonBuilder
|
import groovy.json.JsonBuilder
|
||||||
|
@ -14,6 +16,7 @@ import net.i2p.util.ConcurrentHashSet
|
||||||
|
|
||||||
import com.muwire.core.EventBus
|
import com.muwire.core.EventBus
|
||||||
import com.muwire.core.InfoHash
|
import com.muwire.core.InfoHash
|
||||||
|
import com.muwire.core.MuWireSettings
|
||||||
import com.muwire.core.Persona
|
import com.muwire.core.Persona
|
||||||
import com.muwire.core.UILoadedEvent
|
import com.muwire.core.UILoadedEvent
|
||||||
|
|
||||||
|
@ -24,6 +27,8 @@ import java.util.concurrent.Executors
|
||||||
public class DownloadManager {
|
public class DownloadManager {
|
||||||
|
|
||||||
private final EventBus eventBus
|
private final EventBus eventBus
|
||||||
|
private final TrustService trustService
|
||||||
|
private final MuWireSettings muSettings
|
||||||
private final I2PConnector connector
|
private final I2PConnector connector
|
||||||
private final Executor executor
|
private final Executor executor
|
||||||
private final File incompletes, home
|
private final File incompletes, home
|
||||||
|
@ -31,8 +36,11 @@ public class DownloadManager {
|
||||||
|
|
||||||
private final Map<InfoHash, Downloader> downloaders = new ConcurrentHashMap<>()
|
private final Map<InfoHash, Downloader> downloaders = new ConcurrentHashMap<>()
|
||||||
|
|
||||||
public DownloadManager(EventBus eventBus, I2PConnector connector, File home, Persona me) {
|
public DownloadManager(EventBus eventBus, TrustService trustService, MuWireSettings muSettings,
|
||||||
|
I2PConnector connector, File home, Persona me) {
|
||||||
this.eventBus = eventBus
|
this.eventBus = eventBus
|
||||||
|
this.trustService = trustService
|
||||||
|
this.muSettings = muSettings
|
||||||
this.connector = connector
|
this.connector = connector
|
||||||
this.incompletes = new File(home,"incompletes")
|
this.incompletes = new File(home,"incompletes")
|
||||||
this.home = home
|
this.home = home
|
||||||
|
@ -108,6 +116,21 @@ public class DownloadManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void onSourceDiscoveredEvent(SourceDiscoveredEvent e) {
|
||||||
|
Downloader downloader = downloaders.get(e.infoHash)
|
||||||
|
if (downloader == null)
|
||||||
|
return
|
||||||
|
boolean ok = false
|
||||||
|
switch(trustService.getLevel(e.source.destination)) {
|
||||||
|
case TrustLevel.TRUSTED: ok = true; break
|
||||||
|
case TrustLevel.NEUTRAL: ok = muSettings.allowUntrusted; break
|
||||||
|
case TrustLevel.DISTRUSTED: ok = false; break
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ok)
|
||||||
|
downloader.addSource(e.source.destination)
|
||||||
|
}
|
||||||
|
|
||||||
void onFileDownloadedEvent(FileDownloadedEvent e) {
|
void onFileDownloadedEvent(FileDownloadedEvent e) {
|
||||||
downloaders.remove(e.downloader.infoHash)
|
downloaders.remove(e.downloader.infoHash)
|
||||||
persistDownloaders()
|
persistDownloaders()
|
||||||
|
|
|
@ -221,6 +221,14 @@ public class Downloader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void addSource(Destination d) {
|
||||||
|
if (activeWorkers.containsKey(d))
|
||||||
|
return
|
||||||
|
DownloadWorker newWorker = new DownloadWorker(d)
|
||||||
|
activeWorkers.put(d, newWorker)
|
||||||
|
executorService.submit(newWorker)
|
||||||
|
}
|
||||||
|
|
||||||
class DownloadWorker implements Runnable {
|
class DownloadWorker implements Runnable {
|
||||||
private final Destination destination
|
private final Destination destination
|
||||||
private volatile WorkerState currentState
|
private volatile WorkerState currentState
|
||||||
|
|
Loading…
Reference in New Issue