Mercury-IM/domain/src/main/java/org/mercury_im/messenger/core/viewmodel/accounts/AccountsViewModel.java

57 lines
2.2 KiB
Java

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<ConnectionPoolState> 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);
}
}