diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxModule.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxModule.java index 2141851ee..3c62ce3a6 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxModule.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxModule.java @@ -115,4 +115,10 @@ public class MailboxModule { } return mailboxFileManager; } + + @Provides + MailboxWorkerFactory provideMailboxWorkerFactory( + MailboxWorkerFactoryImpl mailboxWorkerFactory) { + return mailboxWorkerFactory; + } } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxWorkerFactory.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxWorkerFactory.java new file mode 100644 index 000000000..2f6f827e8 --- /dev/null +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxWorkerFactory.java @@ -0,0 +1,27 @@ +package org.briarproject.bramble.mailbox; + +import org.briarproject.bramble.api.contact.ContactId; +import org.briarproject.bramble.api.mailbox.MailboxFolderId; +import org.briarproject.bramble.api.mailbox.MailboxProperties; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + +import javax.annotation.concurrent.ThreadSafe; + +@ThreadSafe +@NotNullByDefault +interface MailboxWorkerFactory { + + MailboxWorker createUploadWorker(ConnectivityChecker connectivityChecker, + MailboxProperties properties, MailboxFolderId folderId, + ContactId contactId); + + MailboxWorker createDownloadWorkerForContactMailbox( + ConnectivityChecker connectivityChecker, + TorReachabilityMonitor reachabilityMonitor, + MailboxProperties properties); + + MailboxWorker createDownloadWorkerForOwnMailbox( + ConnectivityChecker connectivityChecker, + TorReachabilityMonitor reachabilityMonitor, + MailboxProperties properties); +} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxWorkerFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxWorkerFactoryImpl.java new file mode 100644 index 000000000..950cfd749 --- /dev/null +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxWorkerFactoryImpl.java @@ -0,0 +1,81 @@ +package org.briarproject.bramble.mailbox; + +import org.briarproject.bramble.api.contact.ContactId; +import org.briarproject.bramble.api.db.DatabaseComponent; +import org.briarproject.bramble.api.event.EventBus; +import org.briarproject.bramble.api.lifecycle.IoExecutor; +import org.briarproject.bramble.api.mailbox.MailboxFolderId; +import org.briarproject.bramble.api.mailbox.MailboxProperties; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.system.Clock; +import org.briarproject.bramble.api.system.TaskScheduler; + +import java.util.concurrent.Executor; + +import javax.annotation.concurrent.Immutable; +import javax.inject.Inject; + +@Immutable +@NotNullByDefault +class MailboxWorkerFactoryImpl implements MailboxWorkerFactory { + + private final Executor ioExecutor; + private final DatabaseComponent db; + private final Clock clock; + private final TaskScheduler taskScheduler; + private final EventBus eventBus; + private final MailboxApiCaller mailboxApiCaller; + private final MailboxApi mailboxApi; + private final MailboxFileManager mailboxFileManager; + + @Inject + MailboxWorkerFactoryImpl(@IoExecutor Executor ioExecutor, + DatabaseComponent db, + Clock clock, + TaskScheduler taskScheduler, + EventBus eventBus, + MailboxApiCaller mailboxApiCaller, + MailboxApi mailboxApi, + MailboxFileManager mailboxFileManager) { + this.ioExecutor = ioExecutor; + this.db = db; + this.clock = clock; + this.taskScheduler = taskScheduler; + this.eventBus = eventBus; + this.mailboxApiCaller = mailboxApiCaller; + this.mailboxApi = mailboxApi; + this.mailboxFileManager = mailboxFileManager; + } + + @Override + public MailboxWorker createUploadWorker( + ConnectivityChecker connectivityChecker, + MailboxProperties properties, MailboxFolderId folderId, + ContactId contactId) { + MailboxUploadWorker worker = new MailboxUploadWorker(ioExecutor, db, + clock, taskScheduler, eventBus, connectivityChecker, + mailboxApiCaller, mailboxApi, mailboxFileManager, + properties, folderId, contactId); + eventBus.addListener(worker); + return worker; + } + + @Override + public MailboxWorker createDownloadWorkerForContactMailbox( + ConnectivityChecker connectivityChecker, + TorReachabilityMonitor reachabilityMonitor, + MailboxProperties properties) { + return new ContactMailboxDownloadWorker(connectivityChecker, + reachabilityMonitor, mailboxApiCaller, mailboxApi, + mailboxFileManager, properties); + } + + @Override + public MailboxWorker createDownloadWorkerForOwnMailbox( + ConnectivityChecker connectivityChecker, + TorReachabilityMonitor reachabilityMonitor, + MailboxProperties properties) { + // TODO + throw new UnsupportedOperationException(); + } +}