51 lines
2.2 KiB
Java
51 lines
2.2 KiB
Java
package org.mercury_im.messenger.usecase;
|
|
|
|
import org.mercury_im.messenger.data.repository.AccountRepository;
|
|
import org.mercury_im.messenger.entity.Account;
|
|
import org.mercury_im.messenger.xmpp.MercuryConnection;
|
|
import org.mercury_im.messenger.xmpp.MercuryConnectionManager;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
|
|
import io.reactivex.disposables.CompositeDisposable;
|
|
import io.reactivex.schedulers.Schedulers;
|
|
|
|
public class ConnectAccountsOnStartup {
|
|
|
|
private static final Logger LOGGER = Logger.getLogger(ConnectAccountsOnStartup.class.getName());
|
|
|
|
private final MercuryConnectionManager connectionManager;
|
|
private final AccountRepository accountRepository;
|
|
private final List<Account> accounts = new ArrayList<>();
|
|
|
|
private CompositeDisposable disposable = new CompositeDisposable();
|
|
|
|
private ConnectAccountsOnStartup(MercuryConnectionManager connectionManager, AccountRepository accountRepository, List<Account> initialAccounts) {
|
|
this.connectionManager = connectionManager;
|
|
this.accountRepository = accountRepository;
|
|
this.accounts.addAll(initialAccounts);
|
|
}
|
|
|
|
public static ConnectAccountsOnStartup with(MercuryConnectionManager connectionManager, AccountRepository accountRepository, List<Account> initialAccounts) {
|
|
return new ConnectAccountsOnStartup(connectionManager, accountRepository, initialAccounts);
|
|
}
|
|
|
|
public void execute() {
|
|
for (Account account : accounts) {
|
|
if (account.isEnabled()) {
|
|
MercuryConnection connection = new MercuryConnection(accountRepository, account);
|
|
disposable.add(LogIntoAccount.with(connection)
|
|
.executeAndPossiblyThrow()
|
|
.subscribeOn(Schedulers.newThread())
|
|
.doOnComplete(() -> connectionManager.registerConnection(connection))
|
|
.subscribe(
|
|
() -> LOGGER.log(Level.INFO, "Successfully logged into account " + account.getAddress()),
|
|
error -> LOGGER.log(Level.SEVERE, "Error logging into account " + account.getAddress(), error)));
|
|
}
|
|
}
|
|
}
|
|
}
|