78 lines
2.7 KiB
Java
78 lines
2.7 KiB
Java
package org.mercury_im.messenger.transport;
|
|
|
|
import org.mercury_im.messenger.Messenger;
|
|
import org.mercury_im.messenger.data.repository.AccountRepository;
|
|
import org.mercury_im.messenger.entity.Account;
|
|
import org.mercury_im.messenger.util.DiffUtil;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import javax.inject.Inject;
|
|
|
|
import io.reactivex.disposables.CompositeDisposable;
|
|
|
|
public class AccountChangedHandler {
|
|
|
|
private final Messenger messenger;
|
|
private final AccountRepository accountRepository;
|
|
private final Map<Long, Account> accounts = new HashMap<>();
|
|
private final CompositeDisposable disposable = new CompositeDisposable();
|
|
|
|
@Inject
|
|
public AccountChangedHandler(Messenger messenger, AccountRepository accountRepository) {
|
|
this.messenger = messenger;
|
|
this.accountRepository = accountRepository;
|
|
//disposable.add(accountRepository.observeAllAccounts()
|
|
// .scan(new ArrayList<>(), this::calculateChangeEvents)
|
|
// .subscribe(this::onAccountsChanged));
|
|
}
|
|
|
|
private HashMap<Long, Account> calculateChangeEvents(List<Account> accounts, List<Account> newAccounts) {
|
|
DiffUtil.Diff<Account> diff = DiffUtil.diff(accounts, newAccounts);
|
|
return null;
|
|
}
|
|
|
|
private AccountChangedEvent calculateEvent(Account previous, Account next) {
|
|
if (previous == null && next == null) {
|
|
throw new IllegalArgumentException("Not both accounts can be null at the same time!");
|
|
}
|
|
if (previous == null) {
|
|
if (next.isEnabled()) {
|
|
return new AccountChangedEvent(next, AccountChangedEvent.EventType.enabled);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
if (next == null) {
|
|
if (previous.isEnabled()) {
|
|
return new AccountChangedEvent(previous, AccountChangedEvent.EventType.disabled);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
if (previous.isEnabled()) {
|
|
if (next.isEnabled()) {
|
|
return null;
|
|
} else {
|
|
return new AccountChangedEvent(next, AccountChangedEvent.EventType.disabled);
|
|
}
|
|
} else {
|
|
if (next.isEnabled()) {
|
|
return new AccountChangedEvent(next, AccountChangedEvent.EventType.enabled);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void onAccountsChanged(List<Account> accounts, List<Account> newAccounts) {
|
|
DiffUtil.Diff<Account> diff = DiffUtil.diff(accounts, newAccounts);
|
|
|
|
}
|
|
}
|