diff --git a/app/src/main/java/de/kuschku/libquassel/BusProvider.java b/app/src/main/java/de/kuschku/libquassel/BusProvider.java index f1b5c81cf43059eb0c3f604bec92b269dd938b26..f4848ec5a6c515ed35440b9cf6c8fc9786ac03b7 100644 --- a/app/src/main/java/de/kuschku/libquassel/BusProvider.java +++ b/app/src/main/java/de/kuschku/libquassel/BusProvider.java @@ -1,7 +1,5 @@ package de.kuschku.libquassel; -import android.util.Log; - import java.util.UUID; import de.greenrobot.event.EventBus; diff --git a/app/src/main/java/de/kuschku/libquassel/Client.java b/app/src/main/java/de/kuschku/libquassel/Client.java index 7d677b9196a91e68bb5855ca163fb89782c5583c..d556e4a4595edc063e7a0f2b07e32315f26b5e6d 100644 --- a/app/src/main/java/de/kuschku/libquassel/Client.java +++ b/app/src/main/java/de/kuschku/libquassel/Client.java @@ -1,7 +1,5 @@ package de.kuschku.libquassel; -import android.util.Log; - import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -23,7 +21,6 @@ import de.kuschku.libquassel.primitives.types.Message; import de.kuschku.libquassel.primitives.types.QVariant; import de.kuschku.libquassel.syncables.types.BufferSyncer; import de.kuschku.libquassel.syncables.types.BufferViewManager; -import de.kuschku.libquassel.syncables.types.IrcUser; import de.kuschku.libquassel.syncables.types.Network; import de.kuschku.libquassel.syncables.types.SyncableObject; import de.kuschku.util.Stream; @@ -35,6 +32,7 @@ public class Client { private final List<String> initDataQueue = new ArrayList<>(); private final BacklogManager backlogManager; private final BusProvider busProvider; + public int lag; private ConnectionChangeEvent.Status connectionStatus; private ClientInitAck core; private SessionState state; @@ -42,8 +40,6 @@ public class Client { private BufferSyncer bufferSyncer; private ClientData clientData; - public int lag; - public Client(final BusProvider busProvider) { this(new SimpleBacklogManager(busProvider), busProvider); } @@ -176,11 +172,6 @@ public class Client { this.core = core; } - public void setConnectionStatus(final ConnectionChangeEvent.Status connectionStatus) { - this.connectionStatus = connectionStatus; - busProvider.sendEvent(new ConnectionChangeEvent(connectionStatus)); - } - public void setClientData(ClientData clientData) { this.clientData = clientData; } @@ -196,4 +187,9 @@ public class Client { public ConnectionChangeEvent.Status getConnectionStatus() { return connectionStatus; } + + public void setConnectionStatus(final ConnectionChangeEvent.Status connectionStatus) { + this.connectionStatus = connectionStatus; + busProvider.sendEvent(new ConnectionChangeEvent(connectionStatus)); + } } diff --git a/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java b/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java index f429e682f36340583edddb733232205b05599bf5..c307a19ac1ffcbd0eccd1d25aa8aec01f7599d17 100644 --- a/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java +++ b/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java @@ -12,13 +12,13 @@ import de.kuschku.libquassel.functions.types.InitDataFunction; import de.kuschku.libquassel.functions.types.InitRequestFunction; import de.kuschku.libquassel.functions.types.RpcCallFunction; import de.kuschku.libquassel.functions.types.SyncFunction; -import de.kuschku.libquassel.syncables.SyncableRegistry; import de.kuschku.libquassel.objects.types.ClientInitAck; import de.kuschku.libquassel.objects.types.ClientInitReject; import de.kuschku.libquassel.objects.types.ClientLoginAck; import de.kuschku.libquassel.objects.types.ClientLoginReject; import de.kuschku.libquassel.objects.types.SessionInit; import de.kuschku.libquassel.primitives.types.BufferInfo; +import de.kuschku.libquassel.syncables.SyncableRegistry; import de.kuschku.util.ReflectionUtils; public class ProtocolHandler implements IProtocolHandler { diff --git a/app/src/main/java/de/kuschku/libquassel/exceptions/SyncInvocationException.java b/app/src/main/java/de/kuschku/libquassel/exceptions/SyncInvocationException.java index b9ffcda974c14ac1b5de147ca2502fa341137514..b4f34e7f09e7161d04d9ed3e73dd48334eb176aa 100644 --- a/app/src/main/java/de/kuschku/libquassel/exceptions/SyncInvocationException.java +++ b/app/src/main/java/de/kuschku/libquassel/exceptions/SyncInvocationException.java @@ -6,6 +6,10 @@ public class SyncInvocationException extends InvocationTargetException { public SyncInvocationException() { } + public SyncInvocationException(String detailMessage) { + super(null, detailMessage); + } + public SyncInvocationException(Throwable exception) { super(exception); } diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/ChannelBuffer.java b/app/src/main/java/de/kuschku/libquassel/localtypes/ChannelBuffer.java index 9c1dc07541bd747120a4e99c215c9a4a5b2f1bde..0f50962d3f233ac4972026293f8a55a62103b2bf 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/ChannelBuffer.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/ChannelBuffer.java @@ -2,20 +2,20 @@ package de.kuschku.libquassel.localtypes; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; -import de.kuschku.libquassel.syncables.types.IrcChannel; import de.kuschku.libquassel.primitives.types.BufferInfo; +import de.kuschku.libquassel.syncables.types.IrcChannel; import de.kuschku.quasseldroid_ng.BufferDrawerItem; public class ChannelBuffer implements Buffer { private final BufferInfo info; private IrcChannel channel; + private IDrawerItem drawerElement = new BufferDrawerItem(this); public ChannelBuffer(BufferInfo info, IrcChannel channel) { this.info = info; this.channel = channel; } - private IDrawerItem drawerElement = new BufferDrawerItem(this); public IDrawerItem getDrawerElement() { return drawerElement; } diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/QueryBuffer.java b/app/src/main/java/de/kuschku/libquassel/localtypes/QueryBuffer.java index a2f4b22afdf8b2f5d9d8c135d19445bf34022dd1..df5ad5268de6e0b2c9305900dcfc766d50733759 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/QueryBuffer.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/QueryBuffer.java @@ -2,20 +2,20 @@ package de.kuschku.libquassel.localtypes; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; -import de.kuschku.libquassel.syncables.types.IrcUser; import de.kuschku.libquassel.primitives.types.BufferInfo; +import de.kuschku.libquassel.syncables.types.IrcUser; import de.kuschku.quasseldroid_ng.BufferDrawerItem; public class QueryBuffer implements Buffer { private final BufferInfo info; private IrcUser user; + private IDrawerItem drawerElement = new BufferDrawerItem(this); public QueryBuffer(BufferInfo info, IrcUser user) { this.info = info; this.user = user; } - private IDrawerItem drawerElement = new BufferDrawerItem(this); public IDrawerItem getDrawerElement() { return drawerElement; } diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/StatusBuffer.java b/app/src/main/java/de/kuschku/libquassel/localtypes/StatusBuffer.java index c7a69e73f2a10c1f6060791b0a79b7f56f42d881..51a08e1e805e2c0ebf29d5632e829f46a5294372 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/StatusBuffer.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/StatusBuffer.java @@ -9,13 +9,13 @@ import de.kuschku.quasseldroid_ng.BufferDrawerItem; public class StatusBuffer implements Buffer { private final BufferInfo info; private final Network network; + private IDrawerItem drawerElement = new BufferDrawerItem(this); public StatusBuffer(BufferInfo info, Network network) { this.info = info; this.network = network; } - private IDrawerItem drawerElement = new BufferDrawerItem(this); public IDrawerItem getDrawerElement() { return drawerElement; } diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/QMetaType.java b/app/src/main/java/de/kuschku/libquassel/primitives/QMetaType.java index 7c2f40e7225ac9e7c696cdb24e282d7ccb858a7d..7fe683994758e21aec7af3a4090ba36c5dcedd5c 100644 --- a/app/src/main/java/de/kuschku/libquassel/primitives/QMetaType.java +++ b/app/src/main/java/de/kuschku/libquassel/primitives/QMetaType.java @@ -38,21 +38,23 @@ import de.kuschku.libquassel.primitives.serializers.PrimitiveSerializer; public class QMetaType<T> { public final Type type; public final String name; + public final Class cl; public final PrimitiveSerializer<T> serializer; - public QMetaType(Type type) { - this(type, type.getSerializableName()); + public QMetaType(Class cl, Type type) { + this(cl, type, type.getSerializableName()); } - public QMetaType(Type type, String name) { - this(type, name, null); + public QMetaType(Class cl, Type type, String name) { + this(cl, type, name, null); } - public QMetaType(Type type, PrimitiveSerializer<T> serializer) { - this(type, type.getSerializableName(), serializer); + public QMetaType(Class cl, Type type, PrimitiveSerializer<T> serializer) { + this(cl, type, type.getSerializableName(), serializer); } - public QMetaType(Type type, String name, PrimitiveSerializer<T> serializer) { + public QMetaType(Class cl, Type type, String name, PrimitiveSerializer<T> serializer) { + this.cl = cl; this.type = type; this.name = name; this.serializer = serializer; diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/QMetaTypeRegistry.java b/app/src/main/java/de/kuschku/libquassel/primitives/QMetaTypeRegistry.java index b8456603641626f8ddb48bfb8809083d42c931de..7219a30b57693a570cb126fdfc78630faed62675 100644 --- a/app/src/main/java/de/kuschku/libquassel/primitives/QMetaTypeRegistry.java +++ b/app/src/main/java/de/kuschku/libquassel/primitives/QMetaTypeRegistry.java @@ -3,6 +3,7 @@ package de.kuschku.libquassel.primitives; import org.joda.time.DateTime; import java.io.IOException; +import java.math.BigDecimal; import java.nio.ByteBuffer; import java.nio.channels.ByteChannel; import java.util.HashMap; @@ -42,85 +43,85 @@ public class QMetaTypeRegistry { private static final Map<String, QMetaType> stringSerializerMap = new HashMap<>(); static { - addType(QMetaType.Type.Void, new VoidSerializer()); - addType(QMetaType.Type.Bool, new BoolSerializer()); - addType(QMetaType.Type.Int, new IntSerializer()); - addType(QMetaType.Type.UserType, "BufferId", new IntSerializer()); - addType(QMetaType.Type.UserType, "NetworkId", new IntSerializer()); - addType(QMetaType.Type.UserType, "IdentityId", new IntSerializer()); - addType(QMetaType.Type.UserType, "MsgId", new IntSerializer()); - addType(QMetaType.Type.UserType, "BufferInfo", new BufferInfoSerializer()); - addType(QMetaType.Type.UserType, "Message", new MessageSerializer()); - addType(QMetaType.Type.UserType, "Identity", new UserTypeSerializer<>(new IdentitySerializer())); - addType(QMetaType.Type.UserType, "Network::Server", new UserTypeSerializer<>(new NetworkServerSerializer())); - addType(QMetaType.Type.UInt, new IntSerializer()); - addType(QMetaType.Type.UShort, new ShortSerializer()); + addType(Void.class, QMetaType.Type.Void, new VoidSerializer()); + addType(boolean.class, QMetaType.Type.Bool, new BoolSerializer()); + addType(int.class, QMetaType.Type.Int, new IntSerializer()); + addType(int.class, QMetaType.Type.UserType, "BufferId", new IntSerializer()); + addType(int.class, QMetaType.Type.UserType, "NetworkId", new IntSerializer()); + addType(int.class, QMetaType.Type.UserType, "IdentityId", new IntSerializer()); + addType(int.class, QMetaType.Type.UserType, "MsgId", new IntSerializer()); + addType(BufferInfo.class, QMetaType.Type.UserType, "BufferInfo", new BufferInfoSerializer()); + addType(Message.class, QMetaType.Type.UserType, "Message", new MessageSerializer()); + addType(Identity.class, QMetaType.Type.UserType, "Identity", new UserTypeSerializer<>(new IdentitySerializer())); + addType(NetworkServer.class, QMetaType.Type.UserType, "Network::Server", new UserTypeSerializer<>(new NetworkServerSerializer())); + addType(int.class, QMetaType.Type.UInt, new IntSerializer()); + addType(short.class, QMetaType.Type.UShort, new ShortSerializer()); // TODO: Implement more custom quassel types - addType(QMetaType.Type.QTime, new TimeSerializer()); - addType(QMetaType.Type.LongLong); - addType(QMetaType.Type.ULongLong); - addType(QMetaType.Type.Double); - addType(QMetaType.Type.QChar, new CharSerializer()); - addType(QMetaType.Type.QVariantList, new VariantListSerializer<>()); - addType(QMetaType.Type.QVariantMap, new VariantMapSerializer<>()); - addType(QMetaType.Type.QStringList, new StringListSerializer()); - addType(QMetaType.Type.QString, new StringSerializer()); - addType(QMetaType.Type.QByteArray, new ByteArraySerializer()); - addType(QMetaType.Type.QBitArray); - addType(QMetaType.Type.QDate); - addType(QMetaType.Type.QDateTime, new DateTimeSerializer()); - addType(QMetaType.Type.QUrl); - addType(QMetaType.Type.QLocale); - addType(QMetaType.Type.QRect); - addType(QMetaType.Type.QRectF); - addType(QMetaType.Type.QSize); - addType(QMetaType.Type.QSizeF); - addType(QMetaType.Type.QLine); - addType(QMetaType.Type.QLineF); - addType(QMetaType.Type.QPoint); - addType(QMetaType.Type.QPointF); + addType(DateTime.class, QMetaType.Type.QTime, new TimeSerializer()); + addType(BigDecimal.class, QMetaType.Type.LongLong); + addType(BigDecimal.class, QMetaType.Type.ULongLong); + addType(double.class, QMetaType.Type.Double); + addType(char.class, QMetaType.Type.QChar, new CharSerializer()); + addType(List.class, QMetaType.Type.QVariantList, new VariantListSerializer()); + addType(Map.class, QMetaType.Type.QVariantMap, new VariantMapSerializer()); + addType(List.class, QMetaType.Type.QStringList, new StringListSerializer()); + addType(String.class, QMetaType.Type.QString, new StringSerializer()); + addType(String.class, QMetaType.Type.QByteArray, new ByteArraySerializer()); + addType(void.class, QMetaType.Type.QBitArray); + addType(void.class, QMetaType.Type.QDate); + addType(DateTime.class, QMetaType.Type.QDateTime, new DateTimeSerializer()); + addType(void.class, QMetaType.Type.QUrl); + addType(void.class, QMetaType.Type.QLocale); + addType(void.class, QMetaType.Type.QRect); + addType(void.class, QMetaType.Type.QRectF); + addType(void.class, QMetaType.Type.QSize); + addType(void.class, QMetaType.Type.QSizeF); + addType(void.class, QMetaType.Type.QLine); + addType(void.class, QMetaType.Type.QLineF); + addType(void.class, QMetaType.Type.QPoint); + addType(void.class, QMetaType.Type.QPointF); // TODO: Handle QRegExp for the IgnoreListManager - addType(QMetaType.Type.QRegExp); - addType(QMetaType.Type.QVariantHash); - addType(QMetaType.Type.QEasingCurve); + addType(void.class, QMetaType.Type.QRegExp); + addType(void.class, QMetaType.Type.QVariantHash); + addType(void.class, QMetaType.Type.QEasingCurve); // UI Types - addType(QMetaType.Type.QFont); - addType(QMetaType.Type.QPixmap); - addType(QMetaType.Type.QBrush); - addType(QMetaType.Type.QColor); - addType(QMetaType.Type.QPalette); - addType(QMetaType.Type.QIcon); - addType(QMetaType.Type.QImage); - addType(QMetaType.Type.QPolygon); - addType(QMetaType.Type.QRegion); - addType(QMetaType.Type.QBitmap); - addType(QMetaType.Type.QCursor); - addType(QMetaType.Type.QSizePolicy); - addType(QMetaType.Type.QKeySequence); - addType(QMetaType.Type.QPen); - addType(QMetaType.Type.QTextLength); - addType(QMetaType.Type.QTextFormat); - addType(QMetaType.Type.QMatrix); - addType(QMetaType.Type.QTransform); - addType(QMetaType.Type.QMatrix4x4); - addType(QMetaType.Type.QVector2D); - addType(QMetaType.Type.QVector3D); - addType(QMetaType.Type.QVector4D); - addType(QMetaType.Type.QQuaternion); - - addType(QMetaType.Type.VoidStar, "void*"); - addType(QMetaType.Type.Long, new LongSerializer()); - addType(QMetaType.Type.Short, new ShortSerializer()); - addType(QMetaType.Type.Char, new ByteSerializer()); - addType(QMetaType.Type.ULong, new LongSerializer()); - addType(QMetaType.Type.UChar, new ByteSerializer()); - addType(QMetaType.Type.Float); - addType(QMetaType.Type.QObjectStar, "QObject*"); - addType(QMetaType.Type.QWidgetStar, "QWidget*"); - addType(QMetaType.Type.QVariant, new VariantSerializer()); + addType(void.class, QMetaType.Type.QFont); + addType(void.class, QMetaType.Type.QPixmap); + addType(void.class, QMetaType.Type.QBrush); + addType(void.class, QMetaType.Type.QColor); + addType(void.class, QMetaType.Type.QPalette); + addType(void.class, QMetaType.Type.QIcon); + addType(void.class, QMetaType.Type.QImage); + addType(void.class, QMetaType.Type.QPolygon); + addType(void.class, QMetaType.Type.QRegion); + addType(void.class, QMetaType.Type.QBitmap); + addType(void.class, QMetaType.Type.QCursor); + addType(void.class, QMetaType.Type.QSizePolicy); + addType(void.class, QMetaType.Type.QKeySequence); + addType(void.class, QMetaType.Type.QPen); + addType(void.class, QMetaType.Type.QTextLength); + addType(void.class, QMetaType.Type.QTextFormat); + addType(void.class, QMetaType.Type.QMatrix); + addType(void.class, QMetaType.Type.QTransform); + addType(void.class, QMetaType.Type.QMatrix4x4); + addType(void.class, QMetaType.Type.QVector2D); + addType(void.class, QMetaType.Type.QVector3D); + addType(void.class, QMetaType.Type.QVector4D); + addType(void.class, QMetaType.Type.QQuaternion); + + addType(void.class, QMetaType.Type.VoidStar, "void*"); + addType(long.class, QMetaType.Type.Long, new LongSerializer()); + addType(short.class, QMetaType.Type.Short, new ShortSerializer()); + addType(byte.class, QMetaType.Type.Char, new ByteSerializer()); + addType(long.class, QMetaType.Type.ULong, new LongSerializer()); + addType(byte.class, QMetaType.Type.UChar, new ByteSerializer()); + addType(void.class, QMetaType.Type.Float); + addType(void.class, QMetaType.Type.QObjectStar, "QObject*"); + addType(void.class, QMetaType.Type.QWidgetStar, "QWidget*"); + addType(QVariant.class, QMetaType.Type.QVariant, new VariantSerializer()); } // Disable Constructor @@ -128,20 +129,20 @@ public class QMetaTypeRegistry { } - private static <T> void addType(final QMetaType.Type type, final String name, final PrimitiveSerializer<T> serializer) { - addType(new QMetaType<T>(type, name, serializer)); + private static <T> void addType(final Class cl, final QMetaType.Type type, final String name, final PrimitiveSerializer<T> serializer) { + addType(new QMetaType<T>(cl, type, name, serializer)); } - private static <T> void addType(final QMetaType.Type type, final String name) { - addType(new QMetaType<T>(type, name)); + private static <T> void addType(final Class cl, final QMetaType.Type type, final String name) { + addType(new QMetaType<T>(cl, type, name)); } - private static <T> void addType(final QMetaType.Type type, final PrimitiveSerializer<T> serializer) { - addType(new QMetaType<T>(type, serializer)); + private static <T> void addType(final Class cl, final QMetaType.Type type, final PrimitiveSerializer<T> serializer) { + addType(new QMetaType<T>(cl, type, serializer)); } - private static <T> void addType(final QMetaType.Type type) { - addType(new QMetaType<T>(type)); + private static <T> void addType(final Class cl, final QMetaType.Type type) { + addType(new QMetaType<T>(cl, type)); } private static <T> void addType(final QMetaType<T> metaType) { @@ -213,7 +214,7 @@ public class QMetaTypeRegistry { if (((List) type).size() > 0 && ((List) type).get(0) instanceof String) return (QMetaType<T>) typeSerializerMap.get(QMetaType.Type.QStringList); else if (((List) type).size() > 0 && ((List) type).get(0) instanceof QVariant) - return (QMetaType<T>) new QMetaType<T>(QMetaType.Type.QVariantList, new VariantVariantListSerializer()); + return new QMetaType<>((Class) type.getClass(), QMetaType.Type.QVariantList, new VariantVariantListSerializer()); else return (QMetaType<T>) typeSerializerMap.get(QMetaType.Type.QVariantList); } else if (type instanceof Map) diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/types/Message.java b/app/src/main/java/de/kuschku/libquassel/primitives/types/Message.java index a08aeb9c277c50437b0a6c498746fddfac7bf521..cb68f51a8fc38f1551f77fb3a3967de536df2772 100644 --- a/app/src/main/java/de/kuschku/libquassel/primitives/types/Message.java +++ b/app/src/main/java/de/kuschku/libquassel/primitives/types/Message.java @@ -2,8 +2,6 @@ package de.kuschku.libquassel.primitives.types; import android.support.annotation.NonNull; -import com.mikepenz.fastadapter.IItem; - import org.joda.time.DateTime; import java.io.Serializable; diff --git a/app/src/main/java/de/kuschku/libquassel/protocols/LegacyPeer.java b/app/src/main/java/de/kuschku/libquassel/protocols/LegacyPeer.java index 2e44c7651fc27a8e28a84af8ff48ecf2c0aa1200..0a8d6f8a5880ef61aabcbee225a11fac10c0ac62 100644 --- a/app/src/main/java/de/kuschku/libquassel/protocols/LegacyPeer.java +++ b/app/src/main/java/de/kuschku/libquassel/protocols/LegacyPeer.java @@ -56,7 +56,7 @@ public class LegacyPeer implements RemotePeer { public final void onEventBackgroundThread(SyncFunction func) { final List serialize = new UnpackedSyncFunctionSerializer().serialize(func); connection.getOutputExecutor().submit(new OutputRunnable<>(new VariantSerializer<List>(), - new QVariant<>(new QMetaType<List>(QMetaType.Type.QVariantList, new VariantVariantListSerializer()), + new QVariant<>(new QMetaType<List>(List.class, QMetaType.Type.QVariantList, new VariantVariantListSerializer()), serialize))); } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/SyncableRegistry.java b/app/src/main/java/de/kuschku/libquassel/syncables/SyncableRegistry.java index 72fe5bc295fb2ba70bc770847a44b8a629b6b5b5..fb17008e7159fe69ec8eadf123913e249316963d 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/SyncableRegistry.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/SyncableRegistry.java @@ -17,6 +17,7 @@ import de.kuschku.libquassel.syncables.types.SyncableObject; public class SyncableRegistry { private static final Map<String, ObjectSerializer<? extends SyncableObject>> map = new HashMap<>(); + static { map.put("BufferSyncer", new BufferSyncerSerializer()); map.put("BufferViewConfig", new BufferViewConfigSerializer()); diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcChannelSerializer.java b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcChannelSerializer.java index 61ee5876c827af4b953acea684f4355961c2a320..489bcf9bbf8d8d1b64f599270cf73cbcc0d807b3 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcChannelSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcChannelSerializer.java @@ -8,8 +8,8 @@ import de.kuschku.libquassel.functions.types.SerializedFunction; import de.kuschku.libquassel.functions.types.UnpackedFunction; import de.kuschku.libquassel.objects.serializers.ObjectSerializer; import de.kuschku.libquassel.objects.serializers.StringObjectMapSerializer; -import de.kuschku.libquassel.syncables.types.IrcChannel; import de.kuschku.libquassel.primitives.types.QVariant; +import de.kuschku.libquassel.syncables.types.IrcChannel; public class IrcChannelSerializer implements ObjectSerializer<IrcChannel> { @Override diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java index cfd04fd7939910f11ddab462eff93d137378256f..bd32e1b35fc3a27bef94743e7374851a6424e366 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java @@ -10,8 +10,8 @@ import de.kuschku.libquassel.functions.types.PackedFunction; import de.kuschku.libquassel.functions.types.SerializedFunction; import de.kuschku.libquassel.functions.types.UnpackedFunction; import de.kuschku.libquassel.objects.serializers.ObjectSerializer; -import de.kuschku.libquassel.syncables.types.IrcUser; import de.kuschku.libquassel.primitives.types.QVariant; +import de.kuschku.libquassel.syncables.types.IrcUser; public class IrcUserSerializer implements ObjectSerializer<IrcUser> { @Override diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkSerializer.java b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkSerializer.java index 288ec45646fe1edb374055e10dd169aed0557eac..22308e1a55625d4ba65b1effd48de3977c58eb57 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkSerializer.java @@ -12,10 +12,10 @@ import de.kuschku.libquassel.functions.types.SerializedFunction; import de.kuschku.libquassel.functions.types.UnpackedFunction; import de.kuschku.libquassel.objects.serializers.ObjectSerializer; import de.kuschku.libquassel.objects.serializers.StringObjectMapSerializer; -import de.kuschku.libquassel.syncables.types.IrcChannel; -import de.kuschku.libquassel.syncables.types.IrcUser; import de.kuschku.libquassel.objects.types.NetworkServer; import de.kuschku.libquassel.primitives.types.QVariant; +import de.kuschku.libquassel.syncables.types.IrcChannel; +import de.kuschku.libquassel.syncables.types.IrcUser; import de.kuschku.libquassel.syncables.types.Network; public class NetworkSerializer implements ObjectSerializer<Network> { diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/IrcChannel.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/IrcChannel.java index c275fe771ce98c6d1018e6c6c15288dbe2dd7f2e..13fe475c4acee637684dba3b711ec7a18a92cfa1 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/IrcChannel.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/IrcChannel.java @@ -59,7 +59,7 @@ public class IrcChannel extends SyncableObject { if (UserModes.get(nick) == null) UserModes.put(nick, mode); else if (!UserModes.get(nick).contains(mode)) - UserModes.put(nick, UserModes.get(nick)+mode); + UserModes.put(nick, UserModes.get(nick) + mode); } public void removeUserMode(String nick, String mode) { diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/IrcUser.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/IrcUser.java index c43a00ade3d7c21a14ce6b42327ed080781a89b9..37765e277338873771fec027d0344634271703f2 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/IrcUser.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/IrcUser.java @@ -1,19 +1,12 @@ package de.kuschku.libquassel.syncables.types; -import android.util.Log; - -import com.google.common.collect.Lists; - import org.joda.time.DateTime; -import java.util.Arrays; import java.util.List; import de.kuschku.libquassel.BusProvider; import de.kuschku.libquassel.Client; import de.kuschku.libquassel.functions.types.InitDataFunction; -import de.kuschku.libquassel.syncables.types.SyncableObject; -import de.kuschku.util.Stream; public class IrcUser extends SyncableObject { public String server; diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/Network.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/Network.java index c62ff1b073eb5f66a925a38dca08a212d953cf75..a08e3d417a1027d789f73dee8f5e4dda2acd3e8d 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/Network.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/Network.java @@ -124,7 +124,7 @@ public class Network extends SyncableObject { } public void addIrcUser(String sender) { - provider.dispatch(new InitRequestFunction("IrcUser", getObjectName()+"/"+sender)); + provider.dispatch(new InitRequestFunction("IrcUser", getObjectName() + "/" + sender)); } public IrcUser getUser(String name) { diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/SyncableObject.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/SyncableObject.java index 4b5a7ac0d0d4b4b0e70e0987d15d05c9b4e097a8..318a2e2e7732c51da2f3e585d52b6fc74698ae0d 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/SyncableObject.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/SyncableObject.java @@ -27,13 +27,13 @@ public abstract class SyncableObject { return objectName; } - public void renameObject(String objectName) { - setObjectName(objectName); - } - public void setObjectName(String objectName) { this.objectName = objectName; } + public void renameObject(String objectName) { + setObjectName(objectName); + } + public abstract void init(InitDataFunction function, BusProvider provider, Client client); } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/BufferViewManagerChangedEvent.java b/app/src/main/java/de/kuschku/quasseldroid_ng/BufferViewManagerChangedEvent.java index 878e8a1c0f391f829993f9c936914d3227b6ecf4..32a2a562fd34556bec3a3a04bab31b0234a8d703 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/BufferViewManagerChangedEvent.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/BufferViewManagerChangedEvent.java @@ -1,17 +1,16 @@ package de.kuschku.quasseldroid_ng; public class BufferViewManagerChangedEvent { - public enum Action { - ADD, - REMOVE, - MODIFY - } - public final int id; public final Action action; - public BufferViewManagerChangedEvent(int id, Action action) { this.id = id; this.action = action; } + + public enum Action { + ADD, + REMOVE, + MODIFY + } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/MainActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/MainActivity.java index 332256159a300cbcada8dbc143f5c021c41c1162..4b4960b60702469b83f6645f3791734b9e47b4d0 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/MainActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/MainActivity.java @@ -162,7 +162,8 @@ public class MainActivity extends AppCompatActivity { .setPositiveButton("Connect", (dialog, which) -> { EditText hostname = ((EditText) coreview.findViewById(R.id.server)); EditText port = ((EditText) coreview.findViewById(R.id.port)); - if (binder.getBackgroundThread() != null) binder.getBackgroundThread().provider.event.unregister(this); + if (binder.getBackgroundThread() != null) + binder.getBackgroundThread().provider.event.unregister(this); binder.stopBackgroundThread(); BusProvider provider = new BusProvider(); provider.event.register(this); @@ -206,42 +207,6 @@ public class MainActivity extends AppCompatActivity { super.onConfigurationChanged(newConfig); } - class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> { - ObservableList<Message> messageList = new ObservableList<>(Message.class); - - public void setMessageList(ObservableList<Message> messageList) { - this.messageList.setCallback(null); - this.messageList = messageList; - this.messageList.setCallback(new ObservableList.RecyclerViewAdapterCallback(this)); - notifyDataSetChanged(); - } - - @Override - public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return new MessageViewHolder(LayoutInflater.from(MainActivity.this).inflate(android.R.layout.simple_list_item_1, parent, false)); - } - - @Override - public void onBindViewHolder(MessageViewHolder holder, int position) { - holder.text1.setText(messageList.list.get(position).toString()); - } - - @Override - public int getItemCount() { - return messageList.list.size(); - } - }; - - class MessageViewHolder extends RecyclerView.ViewHolder { - @Bind(android.R.id.text1) - TextView text1; - - public MessageViewHolder(View itemView) { - super(itemView); - ButterKnife.bind(this, itemView); - } - } - private void switchBuffer(int bufferId) { this.bufferId = bufferId; @@ -257,6 +222,8 @@ public class MainActivity extends AppCompatActivity { drawer.closeDrawer(); } + ; + @Override protected void onDestroy() { super.onDestroy(); @@ -314,7 +281,7 @@ public class MainActivity extends AppCompatActivity { ); break; } - Collections.sort(header.getProfiles(), (x,y) -> x.getIdentifier() - y.getIdentifier()); + Collections.sort(header.getProfiles(), (x, y) -> x.getIdentifier() - y.getIdentifier()); if (event.action == BufferViewManagerChangedEvent.Action.REMOVE && event.id == selectedProfile) { ArrayList<IProfile> profiles = header.getProfiles(); if (!profiles.isEmpty()) @@ -334,4 +301,40 @@ public class MainActivity extends AppCompatActivity { Snackbar.make(messages, event.toString(), Snackbar.LENGTH_LONG).show(); } } + + class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> { + ObservableList<Message> messageList = new ObservableList<>(Message.class); + + public void setMessageList(ObservableList<Message> messageList) { + this.messageList.setCallback(null); + this.messageList = messageList; + this.messageList.setCallback(new ObservableList.RecyclerViewAdapterCallback(this)); + notifyDataSetChanged(); + } + + @Override + public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + return new MessageViewHolder(LayoutInflater.from(MainActivity.this).inflate(android.R.layout.simple_list_item_1, parent, false)); + } + + @Override + public void onBindViewHolder(MessageViewHolder holder, int position) { + holder.text1.setText(messageList.list.get(position).toString()); + } + + @Override + public int getItemCount() { + return messageList.list.size(); + } + } + + class MessageViewHolder extends RecyclerView.ViewHolder { + @Bind(android.R.id.text1) + TextView text1; + + public MessageViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } + } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/NetworkDrawerItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/NetworkDrawerItem.java index c118a79214c953785899150ba12839cdc8362c07..eb97d3f94a88cad026fc960204efd1900b0e18c4 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/NetworkDrawerItem.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/NetworkDrawerItem.java @@ -32,6 +32,6 @@ public class NetworkDrawerItem extends PrimaryDrawerItem { @Override public int getIdentifier() { - return network.getNetworkId()* Short.MAX_VALUE; + return network.getNetworkId() * Short.MAX_VALUE; } } diff --git a/app/src/main/java/de/kuschku/util/ReflectionUtils.java b/app/src/main/java/de/kuschku/util/ReflectionUtils.java index 97bdfd1343991b39c8901e41490be4ee7f730d17..979d097db20ef2b1e2bb8f1c99cb593c1a46dafc 100644 --- a/app/src/main/java/de/kuschku/util/ReflectionUtils.java +++ b/app/src/main/java/de/kuschku/util/ReflectionUtils.java @@ -1,13 +1,13 @@ package de.kuschku.util; -import java.lang.reflect.InvocationTargetException; +import android.support.annotation.NonNull; + +import com.google.common.primitives.Primitives; + import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; -import de.kuschku.libquassel.Client; import de.kuschku.libquassel.exceptions.SyncInvocationException; public class ReflectionUtils { @@ -16,68 +16,53 @@ public class ReflectionUtils { } public static void invokeMethod(Object o, String name, Object[] argv) throws SyncInvocationException { - Method m; + name = stripName(name); + + Class<?>[] classes = new Class<?>[argv.length]; + for (int i = 0; i < argv.length; i++) { + classes[i] = argv[i].getClass(); + } + Method m = getMethodFromSignature(name, o.getClass(), classes); try { - m = getMethodFromSignature(name, argv.length, o.getClass()); - try { + + if (m != null) { m.invoke(o, argv); - } catch (Exception e) { - e.printStackTrace(); - throw new SyncInvocationException(e, String.format("Unknown method: %s::%s with arguments: %s", o.getClass().getSimpleName(), name, Arrays.toString(argv))); } - } catch (SyncInvocationException e) { - throw e; + } catch (Exception e) { - e.printStackTrace(); - throw new SyncInvocationException(e, String.format("Unknown method: %s::%s with arguments: %s", o.getClass().getSimpleName(), name, Arrays.toString(argv))); + throw new SyncInvocationException(e, String.format("Error invoking %s::%s with arguments %s", o.getClass().getSimpleName(), name, Arrays.toString(argv))); } + throw new SyncInvocationException(String.format("Error invoking %s::%s with arguments %s", o.getClass().getSimpleName(), name, Arrays.toString(argv))); + } + + @NonNull + private static String stripName(String name) { + return (name.contains("(")) ? name.substring(0, name.indexOf("(")) : name; } public static void invokeMethod(Object o, String name, List argv) throws SyncInvocationException { invokeMethod(o, name, argv.toArray(new Object[argv.size()])); } - private static Method getMethodFromSignature(String methodName, int parameterCount, Class cl) { - String[] types = new String[] {}; - if (methodName.contains("(")) { - types = methodName.substring(methodName.indexOf("(")+1, methodName.indexOf(")")).split(","); - methodName = methodName.substring(0, methodName.indexOf("(")); - } + private static Method getMethodFromSignature(String methodName, Class cl, Class<?>[] parameterTypes) { + Method[] methods = cl.getMethods(); + looper: + for (Method m : methods) { + if (m.getName().equals(methodName) && m.getParameterTypes().length == parameterTypes.length) { + for (int i = 0; i < parameterTypes.length; i++) { + Class mParam = m.getParameterTypes()[i]; + Class vParam = parameterTypes[i]; + if (mParam.isPrimitive() && Primitives.isWrapperType(vParam)) + vParam = Primitives.unwrap(vParam); - List<Method> candidates = new ArrayList<>(); - for (final Method m : cl.getDeclaredMethods()) { - if (m.getName().equals(methodName) && m.getParameterTypes().length == parameterCount) { - candidates.add(m); - } - } - if (candidates.size() == 1) return candidates.get(0); - else if (candidates.size() > 1){ - for (Method m : candidates) { - if (matches(types, m.getParameterTypes())) - return m; - } - } - - throw new IllegalArgumentException("Could not find a method with proper arguments"); - } - - private static boolean matches(String[] types, Class[] classes) { - paramater_loop: for (int i = 0; i < types.length; i++) { - Class cl = classes[i]; - while (cl != Object.class) { - if (cl.getSimpleName().equals(types[i])) { - continue paramater_loop; - } else { - for (Class in : cl.getInterfaces()) { - if (in.getSimpleName().equals(types[i])) { - continue paramater_loop; - } + if (mParam != vParam && !mParam.isAssignableFrom(vParam)) { + continue looper; } } - cl = cl.getSuperclass(); + return m; } - return false; } - return true; + + return null; } }