package com.limegroup.gnutella;
import java.io.File;
import org.limewire.core.settings.ConnectionSettings;
import org.limewire.core.settings.SharingSettings;
import org.limewire.i18n.I18nMarker;
import org.limewire.inject.EagerSingleton;
import org.limewire.lifecycle.Service;
import org.limewire.lifecycle.ServiceRegistry;
import org.limewire.lifecycle.ServiceStage;
import com.google.inject.Inject;
import com.limegroup.gnutella.altlocs.AltLocManager;
import com.limegroup.gnutella.altlocs.DownloaderGuidAlternateLocationFinder;
import com.limegroup.gnutella.dht.DHTManager;
import com.limegroup.gnutella.dht.db.PushProxiesPublisher;
import com.limegroup.gnutella.downloader.IncompleteFileManager;
import com.limegroup.gnutella.library.Library;
import com.limegroup.gnutella.licenses.LicenseFactory;
import com.limegroup.gnutella.tigertree.HashTreeCache;
import com.limegroup.gnutella.xml.SchemaReplyCollectionMapper;
/** Some glue that installs listeners & things. TODO: Figure out a better way to do this. */
@EagerSingleton
class CoreRandomGlue {
private final Library library;
private final ConnectionManager connectionManager;
private final DHTManager dhtManager;
private final PushProxiesPublisher pushProxiesPublisher;
private final ConnectionServices connectionServices;
private final DownloadManager downloadManager;
private final DownloaderGuidAlternateLocationFinder downloaderGuidAlternateLocationFinder;
private final SpamServices spamServices;
private final HashTreeCache hashTreeCache;
private final LicenseFactory licenseFactory;
private final AltLocManager altLocManager;
@Inject
CoreRandomGlue(Library library,
ConnectionManager connectionManager, DHTManager dhtManager,
PushProxiesPublisher pushProxiesPublisher,
ConnectionServices connectionServices,
DownloadManager downloadManager,
DownloaderGuidAlternateLocationFinder downloaderGuidAlternateLocationFinder,
SpamServices spamServices,
LicenseFactory licenseFactory,
HashTreeCache hashTreeCache,
SchemaReplyCollectionMapper schemaMapper,
AltLocManager altLocManager) {
this.library = library;
this.connectionManager = connectionManager;
this.dhtManager = dhtManager;
this.pushProxiesPublisher = pushProxiesPublisher;
this.connectionServices = connectionServices;
this.downloadManager = downloadManager;
this.downloaderGuidAlternateLocationFinder = downloaderGuidAlternateLocationFinder;
this.spamServices = spamServices;
this.hashTreeCache = hashTreeCache;
this.licenseFactory = licenseFactory;
this.altLocManager = altLocManager;
}
@SuppressWarnings({"unused", "UnusedDeclaration"})
@Inject private void register(ServiceRegistry registry) {
registry.register(new Service() {
public void initialize() {
//TODO: find a better way to do this
library.addListener(altLocManager);
connectionManager.addEventListener(dhtManager);
dhtManager.addEventListener(pushProxiesPublisher);
downloadManager.addListener(downloaderGuidAlternateLocationFinder);
}
public void start() {
spamServices.reloadSpamFilters();
}
public void stop() {
downloadManager.removeListener(downloaderGuidAlternateLocationFinder);
}
public String getServiceName() {
return I18nMarker.marktr("Various Core Services");
}
}).in("EarlyBackground");
registry.register(new Service() {
public String getServiceName() {
return org.limewire.i18n.I18nMarker.marktr("Gnutella Connections");
}
public void initialize() {
}
public void start() {
if(ConnectionSettings.CONNECT_ON_STARTUP.getValue()) {
// Make sure connections come up ultra-fast (beyond default keepAlive)
int outgoing = ConnectionSettings.NUM_CONNECTIONS.getValue();
if ( outgoing > 0 ) {
connectionServices.connect();
}
}
}
public void stop() {
hashTreeCache.persistCache(library, downloadManager);
licenseFactory.persistCache();
cleanupPreviewFiles();
cleanupTorrentMetadataFiles();
}
}).in(ServiceStage.LATE);
}
private void cleanupTorrentMetadataFiles() {
}
/** Deletes all preview files. */
private void cleanupPreviewFiles() {
//Cleanup any preview files. Note that these will not be deleted if
//your previewer is still open.
File incompleteDir = SharingSettings.INCOMPLETE_DIRECTORY.get();
if (incompleteDir == null)
return; // if we could not get the incomplete directory, simply return.
File[] files = incompleteDir.listFiles();
if(files == null)
return;
for (int i=0; i<files.length; i++) {
String name = files[i].getName();
if (name.startsWith(IncompleteFileManager.PREVIEW_PREFIX))
files[i].delete(); //May or may not work; ignore return code.
}
}
}