package de.kuschku.libquassel.backlogmanagers; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.util.SparseArray; import com.google.common.collect.Lists; import java.util.List; import de.kuschku.libquassel.BusProvider; import de.kuschku.libquassel.Client; import de.kuschku.libquassel.events.BacklogReceivedEvent; import de.kuschku.libquassel.functions.types.InitDataFunction; import de.kuschku.libquassel.functions.types.SyncFunction; import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.primitives.types.QVariant; import de.kuschku.util.ObservableList; public class SimpleBacklogManager extends BacklogManager { SparseArray<ObservableList<Message>> backlogs = new SparseArray<>(); private BusProvider busProvider; public SimpleBacklogManager(BusProvider busProvider) { this.busProvider = busProvider; } public void requestBacklog(int bufferId, int from, int to, int count, int extra) { busProvider.dispatch(new SyncFunction("BacklogManager", "", "requestBacklog", Lists.newArrayList( new QVariant<>("BufferId", bufferId), new QVariant<>("MsgId", from), new QVariant<>("MsgId", to), new QVariant<>(count), new QVariant<>(extra) ))); } public void receiveBacklog(int bufferId, int from, int to, int count, int extra, List<Message> messages) { get(bufferId).list.addAll(messages); busProvider.sendEvent(new BacklogReceivedEvent(bufferId)); } @Override public void displayMessage(int bufferId, Message message) { get(bufferId).list.add(message); } public void bind(int bufferId, @Nullable RecyclerView.Adapter adapter) { if (adapter == null) get(bufferId).setCallback(null); else get(bufferId).setCallback(new ObservableList.RecyclerViewAdapterCallback(adapter)); } @Override public void requestMoreBacklog(int bufferId, int count) { ObservableList<Message> backlog = backlogs.get(bufferId); int messageId = (backlog == null) ? -1 : (backlog.first() == null) ? -1 : backlog.first().messageId; requestBacklog(bufferId, -1, -1, count, 0); } public ObservableList<Message> get(int bufferId) { if (backlogs.get(bufferId) == null) backlogs.put(bufferId, new ObservableList<>(Message.class)); return backlogs.get(bufferId); } @Override public void init(InitDataFunction function, BusProvider provider, Client client) { } }