Skip to content
Snippets Groups Projects
Commit bbe605d1 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Fixed joining and leaving buffers

parent a27d02c3
No related branches found
No related tags found
No related merge requests found
Showing
with 83 additions and 8 deletions
......@@ -40,6 +40,7 @@ import de.kuschku.libquassel.localtypes.buffers.ChannelBuffer;
import de.kuschku.libquassel.localtypes.buffers.QueryBuffer;
import de.kuschku.libquassel.localtypes.buffers.StatusBuffer;
import de.kuschku.libquassel.primitives.types.BufferInfo;
import de.kuschku.libquassel.syncables.types.impl.BufferViewConfig;
import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig;
import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel;
import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser;
......@@ -108,6 +109,9 @@ public class BufferManager {
Buffer buffer = Buffers.fromType(info, client);
assertNotNull(buffer);
createBuffer(buffer);
if (client.connectionStatus() != ConnectionChangeEvent.Status.INITIALIZING_DATA) {
client.bufferViewManager().checkForNewBuffers(info.id);
}
}
public boolean exists(@NonNull BufferInfo info) {
......
......@@ -78,6 +78,7 @@ public class BacklogFilter implements UICallback {
}
private void updateDayChangeMessages() {
/*
LocalDate date = null;
Message lastMessage = null;
for (Message message : filtered) {
......@@ -130,6 +131,7 @@ public class BacklogFilter implements UICallback {
""
)));
}
*/
}
private boolean filterItem(@NonNull Message message) {
......
......@@ -21,10 +21,13 @@
package de.kuschku.libquassel.syncables.types.abstracts;
import de.kuschku.libquassel.primitives.QMetaType;
import de.kuschku.libquassel.syncables.types.SyncableObject;
import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig;
public abstract class ABufferViewConfig<T extends ABufferViewConfig<T>> extends SyncableObject<T> implements QBufferViewConfig {
static final String intName = QMetaType.Type.Int.getSerializableName();
@Override
public void setNetworkId(int networkId) {
_setNetworkId(networkId);
......@@ -95,7 +98,7 @@ public abstract class ABufferViewConfig<T extends ABufferViewConfig<T>> extends
@Override
public void requestAddBuffer(int bufferId, int pos) {
_requestAddBuffer(bufferId, pos);
syncVar("requestAddBuffer", bufferId, pos);
sync("requestAddBuffer", new String[] { "BufferId", intName }, new Object[] { bufferId, pos });
}
@Override
......@@ -107,7 +110,7 @@ public abstract class ABufferViewConfig<T extends ABufferViewConfig<T>> extends
@Override
public void requestMoveBuffer(int bufferId, int pos) {
_requestMoveBuffer(bufferId, pos);
syncVar("requestMoveBuffer", bufferId, pos);
sync("requestMoveBuffer", new String[] { "BufferId", intName }, new Object[] { bufferId, pos });
}
@Override
......@@ -119,18 +122,18 @@ public abstract class ABufferViewConfig<T extends ABufferViewConfig<T>> extends
@Override
public void requestRemoveBuffer(int bufferId) {
_requestRemoveBuffer(bufferId);
syncVar("requestRemoveBuffer", bufferId);
sync("requestRemoveBuffer", new String[] { "BufferId" }, new Object[] { bufferId });
}
@Override
public void removeBufferPermanently(int bufferId) {
_removeBufferPermanently(bufferId);
syncVar("removeBufferPermanently", bufferId);
sync("removeBufferPermanently", new String[] { "BufferId" }, new Object[] { bufferId });
}
@Override
public void requestRemoveBufferPermanently(int bufferId) {
_requestRemoveBufferPermanently(bufferId);
syncVar("requestRemoveBufferPermanently", bufferId);
sync("requestRemoveBufferPermanently", new String[] { "BufferId" }, new Object[] { bufferId });
}
}
......@@ -41,6 +41,7 @@ import de.kuschku.libquassel.localtypes.BacklogFilter;
import de.kuschku.libquassel.localtypes.backlogstorage.BacklogStorage;
import de.kuschku.libquassel.message.Message;
import de.kuschku.libquassel.message.Message_Table;
import de.kuschku.libquassel.primitives.types.BufferInfo;
import de.kuschku.libquassel.primitives.types.QVariant;
import de.kuschku.libquassel.syncables.types.abstracts.ABacklogManager;
import de.kuschku.util.observables.lists.ObservableComparableSortedList;
......@@ -135,8 +136,9 @@ public class BacklogManager extends ABacklogManager<BacklogManager> {
Set<Integer> buffers = new HashSet<>();
for (Message message : messages) {
storage.insertMessages(message.bufferInfo.id, message);
buffers.add(message.bufferInfo.id);
BufferInfo bufferInfo = message.bufferInfo;
storage.insertMessages(bufferInfo.id, message);
buffers.add(bufferInfo.id);
}
for (int id : buffers) {
provider.sendEvent(new BacklogReceivedEvent(id));
......
......@@ -22,7 +22,9 @@
package de.kuschku.libquassel.syncables.types.impl;
import android.support.annotation.NonNull;
import android.util.Log;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
......@@ -30,6 +32,7 @@ import java.util.Map;
import de.kuschku.libquassel.BusProvider;
import de.kuschku.libquassel.client.Client;
import de.kuschku.libquassel.localtypes.buffers.Buffer;
import de.kuschku.libquassel.primitives.types.BufferInfo;
import de.kuschku.libquassel.primitives.types.QVariant;
import de.kuschku.libquassel.syncables.serializers.BufferViewConfigSerializer;
import de.kuschku.libquassel.syncables.types.abstracts.ABufferViewConfig;
......@@ -144,6 +147,41 @@ public class BufferViewConfig extends ABufferViewConfig<BufferViewConfig> {
}
}
@Override
public void checkAddBuffer(int id) {
if (!allBufferIds.contains(id)) {
Log.w("DEBUG", "buffer " + id + " needs to be added to config " + bufferViewName);
Buffer buffer1 = client.bufferManager().buffer(id);
if (addNewBuffersAutomatically && buffer1 != null) {
BufferInfo info = buffer1.getInfo();
int pos;
if (!sortAlphabetically) {
pos = visibleBufferIds.size();
} else {
List<String> infos = new ArrayList<>();
for (int bufferId : bufferList()) {
Buffer buffer = client.bufferManager().buffer(bufferId);
if (buffer == null)
Log.e("DEBUG", "Buffer is null: " + bufferId + " while adding buffer " + info);
BufferInfo info1 = buffer.getInfo();
if (info1.networkId == info.networkId)
infos.add(info1.name);
}
infos.add(info.name);
Collections.sort(infos);
pos = infos.indexOf(info.name);
}
requestAddBuffer(info.id, pos);
Log.w("DEBUG", "adding buffer: " + id);
} else {
requestRemoveBufferPermanently(id);
Log.w("DEBUG", "removing buffer permanently: " + id);
}
} else {
Log.w("DEBUG", "Buffer already exists: " + id);
}
}
@Override
public DisplayType mayDisplay(Buffer buffer) {
if (buffer != null &&
......@@ -262,6 +300,13 @@ public class BufferViewConfig extends ABufferViewConfig<BufferViewConfig> {
return allBufferIds;
}
@Override
public void checkAddBuffers() {
for (int bufferId : client.bufferManager().bufferIds()) {
checkAddBuffer(bufferId);
}
}
@NonNull
@Override
public ObservableSet<Integer> removedBuffers() {
......@@ -378,6 +423,7 @@ public class BufferViewConfig extends ABufferViewConfig<BufferViewConfig> {
super.init(objectName, provider, client);
client.bufferViewManager()._addBufferViewConfig(this);
updateNetworks();
checkAddBuffers();
_update();
}
......
......@@ -22,6 +22,7 @@
package de.kuschku.libquassel.syncables.types.impl;
import android.support.annotation.NonNull;
import android.util.Log;
import java.util.ArrayList;
import java.util.HashMap;
......@@ -32,6 +33,7 @@ import java.util.Set;
import de.kuschku.libquassel.BusProvider;
import de.kuschku.libquassel.client.Client;
import de.kuschku.libquassel.primitives.types.BufferInfo;
import de.kuschku.libquassel.primitives.types.QVariant;
import de.kuschku.libquassel.syncables.types.abstracts.ABufferViewManager;
import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig;
......@@ -104,6 +106,14 @@ public class BufferViewManager extends ABufferViewManager<BufferViewManager> {
// Do nothing, we’re on the client – the server will receive the sync just as expected
}
@Override
public void checkForNewBuffers(int bufferId) {
Log.w("DEBUG", "Checking if buffer needs to be added somewhere: " + bufferId + ": " + client.bufferManager().buffer(bufferId));
for (QBufferViewConfig config : bufferViewConfigs()) {
config.checkAddBuffer(bufferId);
}
}
@Override
public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull Client client) {
super.init(objectName, provider, client);
......
......@@ -779,7 +779,7 @@ public class Network extends ANetwork<Network> implements Observer {
@Override
public void _update() {
super._update();
if (client != null && client.connectionStatus() != ConnectionChangeEvent.Status.INITIALIZING_DATA) {
if (client != null && client.connectionStatus() != ConnectionChangeEvent.Status.INITIALIZING_DATA && client.bufferViewManager() != null) {
StatusBuffer buffer = client.bufferManager().network(networkInfo.networkId());
if (buffer != null) {
buffer.updateStatus();
......
......@@ -24,6 +24,7 @@ package de.kuschku.libquassel.syncables.types.interfaces;
import android.support.annotation.NonNull;
import de.kuschku.libquassel.localtypes.buffers.Buffer;
import de.kuschku.libquassel.primitives.types.BufferInfo;
import de.kuschku.libquassel.syncables.Synced;
import de.kuschku.util.observables.lists.ObservableList;
import de.kuschku.util.observables.lists.ObservableSet;
......@@ -160,11 +161,15 @@ public interface QBufferViewConfig extends QObservable {
void updateNetworks();
void checkAddBuffer(int id);
DisplayType mayDisplay(Buffer buffer);
@NonNull
ObservableSet<Integer> allBufferIds();
void checkAddBuffers();
enum DisplayType {
NONE,
ALWAYS,
......
......@@ -25,6 +25,7 @@ import android.support.annotation.NonNull;
import java.util.List;
import de.kuschku.libquassel.primitives.types.BufferInfo;
import de.kuschku.libquassel.syncables.Synced;
public interface QBufferViewManager extends QObservable {
......@@ -71,4 +72,6 @@ public interface QBufferViewManager extends QObservable {
void requestDeleteBufferViews(final List<Integer> bufferViews);
void _requestDeleteBufferViews(final List<Integer> bufferViews);
void checkForNewBuffers(int bufferId);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment