Mercury-IM/domain/src/main/java/org/mercury_im/messenger/usecase/ConnectAccountsOnStartup.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)));
}
}
}
}