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 8d8e10b31bc839965651deb76edc72399cb6f568..3b2c11994c5be4ffe13571023a79449e1224048f 100644 --- a/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java +++ b/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java @@ -25,20 +25,12 @@ import android.support.annotation.IntRange; import android.support.annotation.NonNull; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import de.kuschku.libquassel.localtypes.buffers.Buffer; import de.kuschku.libquassel.localtypes.buffers.Buffers; -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.interfaces.QIrcChannel; -import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser; -import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; import static de.kuschku.util.AndroidAssert.assertNotNull; @@ -47,10 +39,6 @@ public class BufferManager { private final Map<Integer, Buffer> buffers = new HashMap<>(); private final Client client; - // We cache those, because the networks might not be initialized at begin - @NonNull - private Map<String, Set<BufferInfo>> bufferInfos = new HashMap<>(); - public BufferManager(Client client) { this.client = client; } @@ -75,56 +63,17 @@ public class BufferManager { public void init(List<BufferInfo> bufferInfos) { for (BufferInfo info : bufferInfos) { - if (this.bufferInfos.get(objectName(info)) == null) - this.bufferInfos.put(objectName(info), new HashSet<>()); - - this.bufferInfos.get(objectName(info)).add(info); + createBuffer(info); } } - private String objectName(BufferInfo info) { - if (info.type() == BufferInfo.Type.STATUS) - return String.valueOf(info.networkId()); - else - return info.networkId() + "/" + info.name(); - } - - public void postInit(String objectName, QIrcUser ircUser) { - if (bufferInfos.get(objectName) != null) - for (BufferInfo info : bufferInfos.get(objectName)) { - QNetwork network = client.networkManager().network(info.networkId()); - assertNotNull(network); - createBuffer(new QueryBuffer(info, ircUser)); - } - } - - public void postInit(String objectName, QNetwork ircUser) { - if (bufferInfos.get(objectName) != null) - for (BufferInfo info : bufferInfos.get(objectName)) { - QNetwork network = client.networkManager().network(info.networkId()); - assertNotNull(network); - createBuffer(new StatusBuffer(info, ircUser)); - } - } - public Map<Integer, Buffer> buffers() { return buffers; } - public void postInit(String objectName, QIrcChannel ircChannel) { - if (bufferInfos.get(objectName) != null) - for (BufferInfo info : bufferInfos.get(objectName)) { - QNetwork network = client.networkManager().network(info.networkId()); - assertNotNull(network); - createBuffer(new ChannelBuffer(info, ircChannel)); - } - } - public void createBuffer(BufferInfo info) { - QNetwork network = client.networkManager().network(info.networkId()); - if (network == null) return; - Buffer buffer = Buffers.fromType(info, network); - if (buffer == null) return; + Buffer buffer = Buffers.fromType(info, client); + assertNotNull(buffer); createBuffer(buffer); } diff --git a/app/src/main/java/de/kuschku/libquassel/client/Client.java b/app/src/main/java/de/kuschku/libquassel/client/Client.java index 6401bd5f62eb2882a77746bdfe76df5fa90b7c59..6ce6497cb8a018918f9eb1749ff7bbb9ffdda344 100644 --- a/app/src/main/java/de/kuschku/libquassel/client/Client.java +++ b/app/src/main/java/de/kuschku/libquassel/client/Client.java @@ -193,6 +193,9 @@ public class Client extends AClient { this.connectionStatus = connectionStatus; if (connectionStatus == ConnectionChangeEvent.Status.LOADING_BACKLOG) { + for (QNetwork network : networkManager().networks()) { + Log.d("libquassel", String.valueOf(network.channels())); + } setConnectionStatus(ConnectionChangeEvent.Status.CONNECTED); } provider.sendEvent(new ConnectionChangeEvent(connectionStatus)); @@ -457,7 +460,7 @@ public class Client extends AClient { Log.d("libquassel", "Creating buffer from message info: " + info.id()); } if (bufferedBuffers.containsKey(info.id())) { - Pair<QBufferViewConfig, Integer> pair = bufferedBuffers.remove(info.id()); + Pair<QBufferViewConfig, Integer> pair = bufferedBuffers.get(info.id()); pair.first._addBuffer(info.id(), pair.second); Log.d("libquassel", "Un-Queueing buffer: " + info.id()); } diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/Buffers.java b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/Buffers.java index 10627998eb8dad7a91de5db614e63d443d4190f6..a1ab5b5b7f779b3195f7112055cbb3d7a8d60f83 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/Buffers.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/Buffers.java @@ -24,46 +24,25 @@ package de.kuschku.libquassel.localtypes.buffers; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import de.kuschku.libquassel.client.Client; import de.kuschku.libquassel.primitives.types.BufferInfo; -import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; - -import static de.kuschku.util.AndroidAssert.assertNotNull; public class Buffers { private Buffers() { } - public static boolean exists(@NonNull BufferInfo info, @NonNull QNetwork network) { - switch (info.type()) { - case QUERY: - return info.name() != null && network.ircUser(info.name()) != null; - case CHANNEL: - return info.name() != null && network.ircChannel(info.name()) != null; - case STATUS: - return true; - default: - return false; - } - } - @Nullable - public static Buffer fromType(@NonNull BufferInfo info, @NonNull QNetwork network) { - Buffer result; + public static Buffer fromType(@NonNull BufferInfo info, @NonNull Client client) { switch (info.type()) { case QUERY: - assertNotNull(info.name()); - result = new QueryBuffer(info, network.ircUser(info.name())); - break; + return new QueryBuffer(info, client); case CHANNEL: - result = new ChannelBuffer(info, network.ircChannel(info.name())); - break; + return new ChannelBuffer(info, client); case STATUS: - result = new StatusBuffer(info, network); - break; + return new StatusBuffer(info, client); default: return null; } - return result; } } diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/ChannelBuffer.java b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/ChannelBuffer.java index ea3d4db269a99a9c219e5b32579a3b4dee096d8e..3a0451742c332843eab15458431df5d48775d42a 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/ChannelBuffer.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/ChannelBuffer.java @@ -24,21 +24,19 @@ package de.kuschku.libquassel.localtypes.buffers; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import de.kuschku.libquassel.client.Client; import de.kuschku.libquassel.primitives.types.BufferInfo; import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel; -import static de.kuschku.util.AndroidAssert.assertNotNull; - public class ChannelBuffer implements Buffer { + @NonNull + private final Client client; @NonNull private BufferInfo info; - @Nullable - private QIrcChannel channel; - public ChannelBuffer(@NonNull BufferInfo info, @Nullable QIrcChannel channel) { - assertNotNull(channel); + public ChannelBuffer(@NonNull BufferInfo info, @NonNull Client client) { this.info = info; - this.channel = channel; + this.client = client; } @NonNull @@ -61,21 +59,17 @@ public class ChannelBuffer implements Buffer { @NonNull @Override public BufferInfo.BufferStatus getStatus() { - return channel == null ? BufferInfo.BufferStatus.OFFLINE : BufferInfo.BufferStatus.ONLINE; + return getChannel() == null ? BufferInfo.BufferStatus.OFFLINE : BufferInfo.BufferStatus.ONLINE; } @Override public void renameBuffer(@NonNull String newName) { - + info.setName(newName); } @Nullable public QIrcChannel getChannel() { - return channel; - } - - public void setChannel(@Nullable QIrcChannel channel) { - this.channel = channel; + return client.networkManager().network(info.networkId()).ircChannel(info.name()); } @NonNull @@ -83,7 +77,6 @@ public class ChannelBuffer implements Buffer { public String toString() { return "ChannelBuffer{" + "info=" + info + - ", channel=" + channel + '}'; } } diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/QueryBuffer.java b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/QueryBuffer.java index 48cee59997ff698426063bb4aecc075ed3ce77d8..0b862ab5c80d0bec18e3c74a698f7f6044403ba3 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/QueryBuffer.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/QueryBuffer.java @@ -24,21 +24,19 @@ package de.kuschku.libquassel.localtypes.buffers; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import de.kuschku.libquassel.client.Client; import de.kuschku.libquassel.primitives.types.BufferInfo; import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser; -import static de.kuschku.util.AndroidAssert.assertNotNull; - public class QueryBuffer implements Buffer { - @Nullable - private final QIrcUser user; + @NonNull + private final Client client; @NonNull private BufferInfo info; - public QueryBuffer(@NonNull BufferInfo info, @Nullable QIrcUser user) { - assertNotNull(user); + public QueryBuffer(@NonNull BufferInfo info, @NonNull Client client) { this.info = info; - this.user = user; + this.client = client; } @NonNull @@ -61,19 +59,19 @@ public class QueryBuffer implements Buffer { @NonNull @Override public BufferInfo.BufferStatus getStatus() { - return (user == null) ? BufferInfo.BufferStatus.OFFLINE : - (user.isAway()) ? BufferInfo.BufferStatus.AWAY : + return (getUser() == null) ? BufferInfo.BufferStatus.OFFLINE : + (getUser().isAway()) ? BufferInfo.BufferStatus.AWAY : BufferInfo.BufferStatus.ONLINE; } @Override public void renameBuffer(@NonNull String newName) { - + info.setName(newName); } @Nullable public QIrcUser getUser() { - return user; + return client.networkManager().network(info.networkId()).ircUser(info.name()); } @NonNull @@ -81,7 +79,6 @@ public class QueryBuffer implements Buffer { public String toString() { return "QueryBuffer{" + "info=" + info + - ", user=" + user + '}'; } } diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/StatusBuffer.java b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/StatusBuffer.java index 36041b9fba83283cc4f9d786ab7946326f77aae9..cd172cf586b151c08f7b052a8ed6e09855d505e5 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/StatusBuffer.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/StatusBuffer.java @@ -24,18 +24,19 @@ package de.kuschku.libquassel.localtypes.buffers; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import de.kuschku.libquassel.client.Client; import de.kuschku.libquassel.primitives.types.BufferInfo; import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; public class StatusBuffer implements Buffer { @NonNull - private final QNetwork network; + private final Client client; @NonNull private BufferInfo info; - public StatusBuffer(@NonNull BufferInfo info, @NonNull QNetwork network) { + public StatusBuffer(@NonNull BufferInfo info, @NonNull Client client) { this.info = info; - this.network = network; + this.client = client; } @NonNull @@ -49,16 +50,20 @@ public class StatusBuffer implements Buffer { this.info = info; } + public QNetwork getNetwork() { + return client.networkManager().network(info.networkId()); + } + @Nullable @Override public String getName() { - return network.networkName(); + return getNetwork().networkName(); } @NonNull @Override public BufferInfo.BufferStatus getStatus() { - return network.isConnected() ? BufferInfo.BufferStatus.ONLINE : BufferInfo.BufferStatus.OFFLINE; + return getNetwork().isConnected() ? BufferInfo.BufferStatus.ONLINE : BufferInfo.BufferStatus.OFFLINE; } @Override @@ -71,7 +76,6 @@ public class StatusBuffer implements Buffer { public String toString() { return "StatusBuffer{" + "info=" + info + - ", network=" + network + '}'; } } 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 2cfd900a0f1080ca1fc6de2b0447c94f02ee0b1d..da883087954edb5f3ed784341170418eddab5af3 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,6 @@ package de.kuschku.libquassel.syncables.types.impl; import android.support.annotation.NonNull; -import android.util.Log; import java.util.Collections; import java.util.List; @@ -275,8 +274,6 @@ public class BufferViewConfig extends ABufferViewConfig<BufferViewConfig> { @Override public void _removeBuffer(int bufferId) { - Log.d("after", String.valueOf(buffers)); - int index; if ((index = buffers.indexOf(bufferId)) != -1) { buffers.remove(index); @@ -286,8 +283,6 @@ public class BufferViewConfig extends ABufferViewConfig<BufferViewConfig> { removedBuffers.remove(bufferId); temporarilyRemovedBuffers.add(bufferId); - - Log.d("after", String.valueOf(buffers)); _update(); } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java index 520837eb3b5a169fdaefeb0983ea2ae6180c3db1..bf9e3eb95f147a48b777a79ecf8833b058be997c 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java @@ -444,8 +444,6 @@ public class IrcChannel extends AIrcChannel<IrcChannel> { cachedChanModes = null; this.network._addIrcChannel(this); - - client.bufferManager().postInit(network.networkId() + "/" + name(), this); _update(); } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java index 063c4344cff2ca45f3e1f4c9c8b6f127f3e57740..3b36b2ab01407d6904fba047c56dad7777b4011c 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java @@ -440,7 +440,6 @@ public class IrcUser extends AIrcUser<IrcUser> { for (String channelName : cachedChannels) { channels.add(network().newIrcChannel(channelName)); } - client.bufferManager().postInit(network.networkId() + "/" + nick(), this); _update(); } 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 2878e8420aaae8b22c9cfd8ea28c7013c2865e89..0d74ab0d6d9109833c92d9dc0b55becc760cfaa4 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 @@ -405,9 +405,12 @@ public class Network extends ANetwork<Network> implements Observer { @Override public QIrcChannel newIrcChannel(@NonNull String channelname) { - QIrcChannel channel = IrcChannel.create(channelname); - channels.put(IrcCaseMapper.toLowerCase(channelname), channel); - return channel; + if (!channels.containsKey(IrcCaseMapper.toLowerCase(channelname))) { + QIrcChannel channel = IrcChannel.create(channelname); + channels.put(IrcCaseMapper.toLowerCase(channelname), channel); + channel.init(this, client); + } + return channels.get(IrcCaseMapper.toLowerCase(channelname)); } @Nullable @@ -757,7 +760,6 @@ public class Network extends ANetwork<Network> implements Observer { for (QIrcUser name : ircUsers()) { client.requestInitObject("IrcUser", networkId() + "/" + name.nick()); } - client.bufferManager().postInit(String.valueOf(networkId()), this); } @Override