57 lines
2.2 KiB
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);
|
|
}
|
|
}
|