From bbe605d119befc456e00c0dc2ad3d13e6da0c101 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Sun, 28 Aug 2016 18:21:59 +0200 Subject: [PATCH] Fixed joining and leaving buffers --- .../libquassel/client/BufferManager.java | 4 ++ .../libquassel/localtypes/BacklogFilter.java | 2 + .../types/abstracts/ABufferViewConfig.java | 13 ++++-- .../syncables/types/impl/BacklogManager.java | 6 ++- .../types/impl/BufferViewConfig.java | 46 +++++++++++++++++++ .../types/impl/BufferViewManager.java | 10 ++++ .../syncables/types/impl/Network.java | 2 +- .../types/interfaces/QBufferViewConfig.java | 5 ++ .../types/interfaces/QBufferViewManager.java | 3 ++ 9 files changed, 83 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java b/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java index 3befa33e0..e41614135 100644 --- a/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java +++ b/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java @@ -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) { diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/BacklogFilter.java b/app/src/main/java/de/kuschku/libquassel/localtypes/BacklogFilter.java index 1a0c4bc0c..482e78f5c 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/BacklogFilter.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/BacklogFilter.java @@ -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) { diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferViewConfig.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferViewConfig.java index c3de44e18..7c3bfa6d3 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferViewConfig.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferViewConfig.java @@ -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 }); } } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java index dd3cac345..67d7af8b2 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java @@ -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)); diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java index 6167a7527..f41b5035d 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java @@ -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(); } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewManager.java index 11ff20776..2ef6d81fc 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewManager.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewManager.java @@ -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); diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java index f32f15a2a..a5e33688b 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java @@ -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(); diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewConfig.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewConfig.java index 919a482df..0dce495a7 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewConfig.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewConfig.java @@ -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, diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewManager.java index 1359b8421..d34328459 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewManager.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewManager.java @@ -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); } -- GitLab