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

Fixed issue where newly created channels wouldn’t be properly initialized.

parent 39b2d8d6
Branches
Tags
No related merge requests found
Showing
with 45 additions and 126 deletions
...@@ -25,20 +25,12 @@ import android.support.annotation.IntRange; ...@@ -25,20 +25,12 @@ import android.support.annotation.IntRange;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import de.kuschku.libquassel.localtypes.buffers.Buffer; import de.kuschku.libquassel.localtypes.buffers.Buffer;
import de.kuschku.libquassel.localtypes.buffers.Buffers; 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.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; import static de.kuschku.util.AndroidAssert.assertNotNull;
...@@ -47,10 +39,6 @@ public class BufferManager { ...@@ -47,10 +39,6 @@ public class BufferManager {
private final Map<Integer, Buffer> buffers = new HashMap<>(); private final Map<Integer, Buffer> buffers = new HashMap<>();
private final Client client; 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) { public BufferManager(Client client) {
this.client = client; this.client = client;
} }
...@@ -75,35 +63,7 @@ public class BufferManager { ...@@ -75,35 +63,7 @@ public class BufferManager {
public void init(List<BufferInfo> bufferInfos) { public void init(List<BufferInfo> bufferInfos) {
for (BufferInfo info : bufferInfos) { for (BufferInfo info : bufferInfos) {
if (this.bufferInfos.get(objectName(info)) == null) createBuffer(info);
this.bufferInfos.put(objectName(info), new HashSet<>());
this.bufferInfos.get(objectName(info)).add(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));
} }
} }
...@@ -111,20 +71,9 @@ public class BufferManager { ...@@ -111,20 +71,9 @@ public class BufferManager {
return 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) { public void createBuffer(BufferInfo info) {
QNetwork network = client.networkManager().network(info.networkId()); Buffer buffer = Buffers.fromType(info, client);
if (network == null) return; assertNotNull(buffer);
Buffer buffer = Buffers.fromType(info, network);
if (buffer == null) return;
createBuffer(buffer); createBuffer(buffer);
} }
......
...@@ -193,6 +193,9 @@ public class Client extends AClient { ...@@ -193,6 +193,9 @@ public class Client extends AClient {
this.connectionStatus = connectionStatus; this.connectionStatus = connectionStatus;
if (connectionStatus == ConnectionChangeEvent.Status.LOADING_BACKLOG) { if (connectionStatus == ConnectionChangeEvent.Status.LOADING_BACKLOG) {
for (QNetwork network : networkManager().networks()) {
Log.d("libquassel", String.valueOf(network.channels()));
}
setConnectionStatus(ConnectionChangeEvent.Status.CONNECTED); setConnectionStatus(ConnectionChangeEvent.Status.CONNECTED);
} }
provider.sendEvent(new ConnectionChangeEvent(connectionStatus)); provider.sendEvent(new ConnectionChangeEvent(connectionStatus));
...@@ -457,7 +460,7 @@ public class Client extends AClient { ...@@ -457,7 +460,7 @@ public class Client extends AClient {
Log.d("libquassel", "Creating buffer from message info: " + info.id()); Log.d("libquassel", "Creating buffer from message info: " + info.id());
} }
if (bufferedBuffers.containsKey(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); pair.first._addBuffer(info.id(), pair.second);
Log.d("libquassel", "Un-Queueing buffer: " + info.id()); Log.d("libquassel", "Un-Queueing buffer: " + info.id());
} }
......
...@@ -24,46 +24,25 @@ package de.kuschku.libquassel.localtypes.buffers; ...@@ -24,46 +24,25 @@ package de.kuschku.libquassel.localtypes.buffers;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import de.kuschku.libquassel.client.Client;
import de.kuschku.libquassel.primitives.types.BufferInfo; 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 { public class Buffers {
private 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 @Nullable
public static Buffer fromType(@NonNull BufferInfo info, @NonNull QNetwork network) { public static Buffer fromType(@NonNull BufferInfo info, @NonNull Client client) {
Buffer result;
switch (info.type()) { switch (info.type()) {
case QUERY: case QUERY:
assertNotNull(info.name()); return new QueryBuffer(info, client);
result = new QueryBuffer(info, network.ircUser(info.name()));
break;
case CHANNEL: case CHANNEL:
result = new ChannelBuffer(info, network.ircChannel(info.name())); return new ChannelBuffer(info, client);
break;
case STATUS: case STATUS:
result = new StatusBuffer(info, network); return new StatusBuffer(info, client);
break;
default: default:
return null; return null;
} }
return result;
} }
} }
...@@ -24,21 +24,19 @@ package de.kuschku.libquassel.localtypes.buffers; ...@@ -24,21 +24,19 @@ package de.kuschku.libquassel.localtypes.buffers;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import de.kuschku.libquassel.client.Client;
import de.kuschku.libquassel.primitives.types.BufferInfo; import de.kuschku.libquassel.primitives.types.BufferInfo;
import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel; import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel;
import static de.kuschku.util.AndroidAssert.assertNotNull;
public class ChannelBuffer implements Buffer { public class ChannelBuffer implements Buffer {
@NonNull
private final Client client;
@NonNull @NonNull
private BufferInfo info; private BufferInfo info;
@Nullable
private QIrcChannel channel;
public ChannelBuffer(@NonNull BufferInfo info, @Nullable QIrcChannel channel) { public ChannelBuffer(@NonNull BufferInfo info, @NonNull Client client) {
assertNotNull(channel);
this.info = info; this.info = info;
this.channel = channel; this.client = client;
} }
@NonNull @NonNull
...@@ -61,21 +59,17 @@ public class ChannelBuffer implements Buffer { ...@@ -61,21 +59,17 @@ public class ChannelBuffer implements Buffer {
@NonNull @NonNull
@Override @Override
public BufferInfo.BufferStatus getStatus() { public BufferInfo.BufferStatus getStatus() {
return channel == null ? BufferInfo.BufferStatus.OFFLINE : BufferInfo.BufferStatus.ONLINE; return getChannel() == null ? BufferInfo.BufferStatus.OFFLINE : BufferInfo.BufferStatus.ONLINE;
} }
@Override @Override
public void renameBuffer(@NonNull String newName) { public void renameBuffer(@NonNull String newName) {
info.setName(newName);
} }
@Nullable @Nullable
public QIrcChannel getChannel() { public QIrcChannel getChannel() {
return channel; return client.networkManager().network(info.networkId()).ircChannel(info.name());
}
public void setChannel(@Nullable QIrcChannel channel) {
this.channel = channel;
} }
@NonNull @NonNull
...@@ -83,7 +77,6 @@ public class ChannelBuffer implements Buffer { ...@@ -83,7 +77,6 @@ public class ChannelBuffer implements Buffer {
public String toString() { public String toString() {
return "ChannelBuffer{" + return "ChannelBuffer{" +
"info=" + info + "info=" + info +
", channel=" + channel +
'}'; '}';
} }
} }
...@@ -24,21 +24,19 @@ package de.kuschku.libquassel.localtypes.buffers; ...@@ -24,21 +24,19 @@ package de.kuschku.libquassel.localtypes.buffers;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import de.kuschku.libquassel.client.Client;
import de.kuschku.libquassel.primitives.types.BufferInfo; import de.kuschku.libquassel.primitives.types.BufferInfo;
import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser; import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser;
import static de.kuschku.util.AndroidAssert.assertNotNull;
public class QueryBuffer implements Buffer { public class QueryBuffer implements Buffer {
@Nullable @NonNull
private final QIrcUser user; private final Client client;
@NonNull @NonNull
private BufferInfo info; private BufferInfo info;
public QueryBuffer(@NonNull BufferInfo info, @Nullable QIrcUser user) { public QueryBuffer(@NonNull BufferInfo info, @NonNull Client client) {
assertNotNull(user);
this.info = info; this.info = info;
this.user = user; this.client = client;
} }
@NonNull @NonNull
...@@ -61,19 +59,19 @@ public class QueryBuffer implements Buffer { ...@@ -61,19 +59,19 @@ public class QueryBuffer implements Buffer {
@NonNull @NonNull
@Override @Override
public BufferInfo.BufferStatus getStatus() { public BufferInfo.BufferStatus getStatus() {
return (user == null) ? BufferInfo.BufferStatus.OFFLINE : return (getUser() == null) ? BufferInfo.BufferStatus.OFFLINE :
(user.isAway()) ? BufferInfo.BufferStatus.AWAY : (getUser().isAway()) ? BufferInfo.BufferStatus.AWAY :
BufferInfo.BufferStatus.ONLINE; BufferInfo.BufferStatus.ONLINE;
} }
@Override @Override
public void renameBuffer(@NonNull String newName) { public void renameBuffer(@NonNull String newName) {
info.setName(newName);
} }
@Nullable @Nullable
public QIrcUser getUser() { public QIrcUser getUser() {
return user; return client.networkManager().network(info.networkId()).ircUser(info.name());
} }
@NonNull @NonNull
...@@ -81,7 +79,6 @@ public class QueryBuffer implements Buffer { ...@@ -81,7 +79,6 @@ public class QueryBuffer implements Buffer {
public String toString() { public String toString() {
return "QueryBuffer{" + return "QueryBuffer{" +
"info=" + info + "info=" + info +
", user=" + user +
'}'; '}';
} }
} }
...@@ -24,18 +24,19 @@ package de.kuschku.libquassel.localtypes.buffers; ...@@ -24,18 +24,19 @@ package de.kuschku.libquassel.localtypes.buffers;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import de.kuschku.libquassel.client.Client;
import de.kuschku.libquassel.primitives.types.BufferInfo; import de.kuschku.libquassel.primitives.types.BufferInfo;
import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
public class StatusBuffer implements Buffer { public class StatusBuffer implements Buffer {
@NonNull @NonNull
private final QNetwork network; private final Client client;
@NonNull @NonNull
private BufferInfo info; private BufferInfo info;
public StatusBuffer(@NonNull BufferInfo info, @NonNull QNetwork network) { public StatusBuffer(@NonNull BufferInfo info, @NonNull Client client) {
this.info = info; this.info = info;
this.network = network; this.client = client;
} }
@NonNull @NonNull
...@@ -49,16 +50,20 @@ public class StatusBuffer implements Buffer { ...@@ -49,16 +50,20 @@ public class StatusBuffer implements Buffer {
this.info = info; this.info = info;
} }
public QNetwork getNetwork() {
return client.networkManager().network(info.networkId());
}
@Nullable @Nullable
@Override @Override
public String getName() { public String getName() {
return network.networkName(); return getNetwork().networkName();
} }
@NonNull @NonNull
@Override @Override
public BufferInfo.BufferStatus getStatus() { public BufferInfo.BufferStatus getStatus() {
return network.isConnected() ? BufferInfo.BufferStatus.ONLINE : BufferInfo.BufferStatus.OFFLINE; return getNetwork().isConnected() ? BufferInfo.BufferStatus.ONLINE : BufferInfo.BufferStatus.OFFLINE;
} }
@Override @Override
...@@ -71,7 +76,6 @@ public class StatusBuffer implements Buffer { ...@@ -71,7 +76,6 @@ public class StatusBuffer implements Buffer {
public String toString() { public String toString() {
return "StatusBuffer{" + return "StatusBuffer{" +
"info=" + info + "info=" + info +
", network=" + network +
'}'; '}';
} }
} }
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
package de.kuschku.libquassel.syncables.types.impl; package de.kuschku.libquassel.syncables.types.impl;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.util.Log;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
...@@ -275,8 +274,6 @@ public class BufferViewConfig extends ABufferViewConfig<BufferViewConfig> { ...@@ -275,8 +274,6 @@ public class BufferViewConfig extends ABufferViewConfig<BufferViewConfig> {
@Override @Override
public void _removeBuffer(int bufferId) { public void _removeBuffer(int bufferId) {
Log.d("after", String.valueOf(buffers));
int index; int index;
if ((index = buffers.indexOf(bufferId)) != -1) { if ((index = buffers.indexOf(bufferId)) != -1) {
buffers.remove(index); buffers.remove(index);
...@@ -286,8 +283,6 @@ public class BufferViewConfig extends ABufferViewConfig<BufferViewConfig> { ...@@ -286,8 +283,6 @@ public class BufferViewConfig extends ABufferViewConfig<BufferViewConfig> {
removedBuffers.remove(bufferId); removedBuffers.remove(bufferId);
temporarilyRemovedBuffers.add(bufferId); temporarilyRemovedBuffers.add(bufferId);
Log.d("after", String.valueOf(buffers));
_update(); _update();
} }
......
...@@ -444,8 +444,6 @@ public class IrcChannel extends AIrcChannel<IrcChannel> { ...@@ -444,8 +444,6 @@ public class IrcChannel extends AIrcChannel<IrcChannel> {
cachedChanModes = null; cachedChanModes = null;
this.network._addIrcChannel(this); this.network._addIrcChannel(this);
client.bufferManager().postInit(network.networkId() + "/" + name(), this);
_update(); _update();
} }
......
...@@ -440,7 +440,6 @@ public class IrcUser extends AIrcUser<IrcUser> { ...@@ -440,7 +440,6 @@ public class IrcUser extends AIrcUser<IrcUser> {
for (String channelName : cachedChannels) { for (String channelName : cachedChannels) {
channels.add(network().newIrcChannel(channelName)); channels.add(network().newIrcChannel(channelName));
} }
client.bufferManager().postInit(network.networkId() + "/" + nick(), this);
_update(); _update();
} }
......
...@@ -405,9 +405,12 @@ public class Network extends ANetwork<Network> implements Observer { ...@@ -405,9 +405,12 @@ public class Network extends ANetwork<Network> implements Observer {
@Override @Override
public QIrcChannel newIrcChannel(@NonNull String channelname) { public QIrcChannel newIrcChannel(@NonNull String channelname) {
if (!channels.containsKey(IrcCaseMapper.toLowerCase(channelname))) {
QIrcChannel channel = IrcChannel.create(channelname); QIrcChannel channel = IrcChannel.create(channelname);
channels.put(IrcCaseMapper.toLowerCase(channelname), channel); channels.put(IrcCaseMapper.toLowerCase(channelname), channel);
return channel; channel.init(this, client);
}
return channels.get(IrcCaseMapper.toLowerCase(channelname));
} }
@Nullable @Nullable
...@@ -757,7 +760,6 @@ public class Network extends ANetwork<Network> implements Observer { ...@@ -757,7 +760,6 @@ public class Network extends ANetwork<Network> implements Observer {
for (QIrcUser name : ircUsers()) { for (QIrcUser name : ircUsers()) {
client.requestInitObject("IrcUser", networkId() + "/" + name.nick()); client.requestInitObject("IrcUser", networkId() + "/" + name.nick());
} }
client.bufferManager().postInit(String.valueOf(networkId()), this);
} }
@Override @Override
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment