197 lines
7.7 KiB
Java
197 lines
7.7 KiB
Java
package com.discord.stores;
|
|
|
|
import android.content.Context;
|
|
import com.discord.models.domain.ModelMessage;
|
|
import com.discord.stores.updates.ObservationDeck;
|
|
import com.discord.utilities.rest.RestAPI;
|
|
import com.discord.utilities.rx.ObservableExtensionsKt;
|
|
import d0.t.n;
|
|
import d0.t.u;
|
|
import d0.z.d.m;
|
|
import java.util.ArrayList;
|
|
import java.util.Collection;
|
|
import java.util.HashMap;
|
|
import java.util.HashSet;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
import kotlin.jvm.functions.Function0;
|
|
import kotlin.jvm.functions.Function1;
|
|
import kotlin.jvm.internal.DefaultConstructorMarker;
|
|
import rx.Observable;
|
|
/* compiled from: StorePinnedMessages.kt */
|
|
public final class StorePinnedMessages extends StoreV2 {
|
|
public static final Companion Companion = new Companion(null);
|
|
private final Dispatcher dispatcher;
|
|
private final ObservationDeck observationDeck;
|
|
private final Map<Long, List<ModelMessage>> pinnedMessages = new HashMap();
|
|
private Map<Long, ? extends List<? extends ModelMessage>> pinnedMessagesSnapshot = new HashMap();
|
|
private final Set<Long> updatedChannelIds = new HashSet();
|
|
|
|
/* compiled from: StorePinnedMessages.kt */
|
|
public static final class Companion {
|
|
private Companion() {
|
|
}
|
|
|
|
public /* synthetic */ Companion(DefaultConstructorMarker defaultConstructorMarker) {
|
|
this();
|
|
}
|
|
|
|
public static final /* synthetic */ ModelMessage access$getMessage(Companion companion, List list, long j) {
|
|
return companion.getMessage(list, j);
|
|
}
|
|
|
|
public static final /* synthetic */ int access$getMessageIndex(Companion companion, List list, long j) {
|
|
return companion.getMessageIndex(list, j);
|
|
}
|
|
|
|
private final ModelMessage getMessage(List<? extends ModelMessage> list, long j) {
|
|
boolean z2;
|
|
Object obj = null;
|
|
if (list == null) {
|
|
return null;
|
|
}
|
|
Iterator<T> it = list.iterator();
|
|
while (true) {
|
|
if (!it.hasNext()) {
|
|
break;
|
|
}
|
|
Object next = it.next();
|
|
if (((ModelMessage) next).getId() == j) {
|
|
z2 = true;
|
|
continue;
|
|
} else {
|
|
z2 = false;
|
|
continue;
|
|
}
|
|
if (z2) {
|
|
obj = next;
|
|
break;
|
|
}
|
|
}
|
|
return (ModelMessage) obj;
|
|
}
|
|
|
|
private final int getMessageIndex(List<? extends ModelMessage> list, long j) {
|
|
int i = 0;
|
|
for (ModelMessage modelMessage : list) {
|
|
if (modelMessage.getId() == j) {
|
|
return i;
|
|
}
|
|
i++;
|
|
}
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
public StorePinnedMessages(Dispatcher dispatcher, ObservationDeck observationDeck) {
|
|
m.checkNotNullParameter(dispatcher, "dispatcher");
|
|
m.checkNotNullParameter(observationDeck, "observationDeck");
|
|
this.dispatcher = dispatcher;
|
|
this.observationDeck = observationDeck;
|
|
}
|
|
|
|
public static final /* synthetic */ Map access$getPinnedMessages$p(StorePinnedMessages storePinnedMessages) {
|
|
return storePinnedMessages.pinnedMessages;
|
|
}
|
|
|
|
public static final /* synthetic */ void access$handlePinnedMessagesLoaded(StorePinnedMessages storePinnedMessages, long j, List list) {
|
|
storePinnedMessages.handlePinnedMessagesLoaded(j, list);
|
|
}
|
|
|
|
@StoreThread
|
|
private final void handlePinnedMessagesLoaded(long j, List<? extends ModelMessage> list) {
|
|
this.pinnedMessages.put(Long.valueOf(j), u.toMutableList((Collection) list));
|
|
this.updatedChannelIds.add(Long.valueOf(j));
|
|
markChanged();
|
|
}
|
|
|
|
private final void loadPinnedMessages(long j) {
|
|
if (!this.pinnedMessagesSnapshot.containsKey(Long.valueOf(j))) {
|
|
ObservableExtensionsKt.appSubscribe$default(ObservableExtensionsKt.restSubscribeOn$default(RestAPI.Companion.getApi().getChannelPins(j), false, 1, null), StorePinnedMessages.class, (Context) null, (Function1) null, (Function1) null, (Function0) null, (Function0) null, new StorePinnedMessages$loadPinnedMessages$1(this, j), 62, (Object) null);
|
|
}
|
|
}
|
|
|
|
public final Dispatcher getDispatcher() {
|
|
return this.dispatcher;
|
|
}
|
|
|
|
public final ObservationDeck getObservationDeck() {
|
|
return this.observationDeck;
|
|
}
|
|
|
|
@StoreThread
|
|
public final void handleMessageDeleteBulk(long j, Collection<Long> collection) {
|
|
m.checkNotNullParameter(collection, "messageIds");
|
|
List<ModelMessage> list = this.pinnedMessages.get(Long.valueOf(j));
|
|
if (list != null) {
|
|
Iterator<ModelMessage> it = list.iterator();
|
|
while (it.hasNext()) {
|
|
if (collection.contains(Long.valueOf(it.next().getId()))) {
|
|
it.remove();
|
|
this.updatedChannelIds.add(Long.valueOf(j));
|
|
}
|
|
}
|
|
if (!this.updatedChannelIds.isEmpty()) {
|
|
markChanged();
|
|
}
|
|
}
|
|
}
|
|
|
|
@StoreThread
|
|
public final void handleMessageUpdate(ModelMessage modelMessage) {
|
|
m.checkNotNullParameter(modelMessage, "updatedMessage");
|
|
long channelId = modelMessage.getChannelId();
|
|
long id2 = modelMessage.getId();
|
|
List<ModelMessage> list = this.pinnedMessages.get(Long.valueOf(channelId));
|
|
if (list != null) {
|
|
int access$getMessageIndex = Companion.access$getMessageIndex(Companion, list, id2);
|
|
if (access$getMessageIndex != -1) {
|
|
if (!modelMessage.isPinned()) {
|
|
list.remove(access$getMessageIndex);
|
|
} else {
|
|
list.set(access$getMessageIndex, new ModelMessage(list.get(access$getMessageIndex), modelMessage));
|
|
}
|
|
this.updatedChannelIds.add(Long.valueOf(channelId));
|
|
markChanged();
|
|
} else if (modelMessage.isPinned()) {
|
|
int i = 0;
|
|
while (i < list.size() && modelMessage.getTimestamp() < list.get(i).getTimestamp()) {
|
|
i++;
|
|
}
|
|
list.add(i, modelMessage);
|
|
this.updatedChannelIds.add(Long.valueOf(channelId));
|
|
markChanged();
|
|
}
|
|
}
|
|
}
|
|
|
|
public final Observable<List<ModelMessage>> observeForChannel(long j) {
|
|
loadPinnedMessages(j);
|
|
return ObservationDeck.connectRx$default(this.observationDeck, new ObservationDeck.UpdateSource[]{this}, false, null, null, new StorePinnedMessages$observeForChannel$1(this, j), 14, null);
|
|
}
|
|
|
|
public final Observable<ModelMessage> observePinnedMessage(long j, long j2) {
|
|
Observable<ModelMessage> s2 = ObservationDeck.connectRx$default(this.observationDeck, new ObservationDeck.UpdateSource[]{this}, false, null, null, new StorePinnedMessages$observePinnedMessage$1(this, j, j2), 14, null).s();
|
|
m.checkNotNullExpressionValue(s2, "observationDeck.connectR… }.distinctUntilChanged()");
|
|
return s2;
|
|
}
|
|
|
|
@Override // com.discord.stores.StoreV2
|
|
@StoreThread
|
|
public void snapshotData() {
|
|
HashMap hashMap = new HashMap(this.pinnedMessages);
|
|
for (Long l : this.updatedChannelIds) {
|
|
long longValue = l.longValue();
|
|
Long valueOf = Long.valueOf(longValue);
|
|
List list = (List) hashMap.get(Long.valueOf(longValue));
|
|
if (list == null) {
|
|
list = n.emptyList();
|
|
}
|
|
hashMap.put(valueOf, new ArrayList(list));
|
|
}
|
|
this.pinnedMessagesSnapshot = hashMap;
|
|
this.updatedChannelIds.clear();
|
|
}
|
|
}
|