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
No related branches found
No related tags found
No related merge requests found
Showing
with 45 additions and 126 deletions
......@@ -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,35 +63,7 @@ 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);
}
}
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));
createBuffer(info);
}
}
......@@ -111,20 +71,9 @@ public class BufferManager {
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);
}
......
......@@ -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());
}
......
......@@ -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;
}
}
......@@ -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 +
'}';
}
}
......@@ -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 +
'}';
}
}
......@@ -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 +
'}';
}
}
......@@ -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();
}
......
......@@ -444,8 +444,6 @@ public class IrcChannel extends AIrcChannel<IrcChannel> {
cachedChanModes = null;
this.network._addIrcChannel(this);
client.bufferManager().postInit(network.networkId() + "/" + name(), this);
_update();
}
......
......@@ -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();
}
......
......@@ -405,9 +405,12 @@ public class Network extends ANetwork<Network> implements Observer {
@Override
public QIrcChannel newIrcChannel(@NonNull String channelname) {
if (!channels.containsKey(IrcCaseMapper.toLowerCase(channelname))) {
QIrcChannel channel = IrcChannel.create(channelname);
channels.put(IrcCaseMapper.toLowerCase(channelname), channel);
return 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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment