package org.mercury_im.messenger.core.viewmodel.accounts; import org.mercury_im.messenger.core.SchedulersFacade; import org.mercury_im.messenger.core.data.repository.AccountRepository; import org.mercury_im.messenger.core.viewmodel.MercuryViewModel; import org.mercury_im.messenger.core.xmpp.MercuryConnectionManager; import org.mercury_im.messenger.core.xmpp.state.ConnectionPoolState; import org.mercury_im.messenger.entity.Account; import java.util.logging.Level; import java.util.logging.Logger; import io.reactivex.Observable; public class AccountsViewModel implements MercuryViewModel { private static final Logger LOGGER = Logger.getLogger(AccountsViewModel.class.getName()); private final MercuryConnectionManager connectionManager; private final AccountRepository accountRepository; private final SchedulersFacade schedulers; public AccountsViewModel(MercuryConnectionManager connectionManager, AccountRepository accountRepository, SchedulersFacade schedulers) { this.connectionManager = connectionManager; this.accountRepository = accountRepository; this.schedulers = schedulers; } public Observable getConnectionPool() { return connectionManager.observeConnectionPool(); } public void onToggleAccountEnabled(Account account, boolean enabled) { account.setEnabled(enabled); addDisposable(accountRepository.upsertAccount(account) .subscribeOn(schedulers.getIoScheduler()) .observeOn(schedulers.getUiScheduler()) .subscribe( success -> logAccountToggledSuccess(success, enabled), error -> logAccountToggleError(account, enabled, error) ) ); } private void logAccountToggledSuccess(Account account, boolean enabled) { LOGGER.log(Level.FINER, "Account " + account.getAddress() + (enabled ? " enabled" : " disabled")); } private void logAccountToggleError(Account account, boolean enabled, Throwable error) { LOGGER.log(Level.SEVERE, "Account " + account.getAddress() + " could not be " + (enabled ? "enabled" : "disabled"), error); } }