add models for Displayed and replace

This commit is contained in:
Daniel Gultsch 2023-02-09 10:43:21 +01:00
parent a43160b13d
commit dc371d7017
No known key found for this signature in database
GPG key ID: F43D18AD2A0982C2
8 changed files with 93 additions and 1 deletions

View file

@ -26,6 +26,8 @@ public class MessageEntity {
public Instant receivedAt;
public Instant sentAt;
public boolean outgoing;
public String bareTo;
public String toResource;
public String bareFrom;
@ -35,6 +37,8 @@ public class MessageEntity {
public String messageId;
public String stanzaId;
// the stanza id might not be verified if this MessageEntity was created as a stub parent to attach reactions to or new versions (created by LMC etc)
public String stanzaIdVerified;
public boolean acknowledged = false;
}

View file

@ -1,12 +1,15 @@
package im.conversations.android.transformer;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import eu.siacs.conversations.xmpp.Jid;
import im.conversations.android.xmpp.model.DeliveryReceiptRequest;
import im.conversations.android.xmpp.model.Extension;
import im.conversations.android.xmpp.model.axolotl.Encrypted;
import im.conversations.android.xmpp.model.jabber.Body;
import im.conversations.android.xmpp.model.jabber.Thread;
import im.conversations.android.xmpp.model.oob.OutOfBandData;
import im.conversations.android.xmpp.model.stanza.Message;
import java.util.Arrays;
import java.util.Collection;
@ -15,7 +18,7 @@ import java.util.List;
public class Transformation {
private static final List<Class<? extends Extension>> EXTENSION_FOR_TRANSFORMATION =
Arrays.asList(Body.class, Thread.class, Encrypted.class);
Arrays.asList(Body.class, Thread.class, Encrypted.class, OutOfBandData.class);
public final Jid to;
public final Jid from;
@ -48,6 +51,16 @@ public class Transformation {
return this.extensions.size() > 0;
}
public <E extends Extension> E getExtension(final Class<E> clazz) {
final var extension = Iterables.find(this.extensions, clazz::isInstance, null);
return extension == null ? null : clazz.cast(extension);
}
public <E extends Extension> Collection<E> getExtensions(final Class<E> clazz) {
return Collections2.transform(
Collections2.filter(this.extensions, clazz::isInstance), clazz::cast);
}
public static Transformation of(final Message message, final String stanzaId) {
final var to = message.getTo();
final var from = message.getFrom();

View file

@ -2,6 +2,9 @@ package im.conversations.android.transformer;
import android.content.Context;
import im.conversations.android.database.model.Account;
import im.conversations.android.xmpp.model.axolotl.Encrypted;
import im.conversations.android.xmpp.model.jabber.Body;
import im.conversations.android.xmpp.model.oob.OutOfBandData;
public class Transformer {
@ -13,7 +16,23 @@ public class Transformer {
this.account = account;
}
/**
* @param transformation
* @return returns true if there is something we want to send a delivery receipt for. Basically
* anything that created a new message in the database. Notably not something that only
* updated a status somewhere
*/
public boolean transform(final Transformation transformation) {
final var encrypted = transformation.getExtension(Encrypted.class);
final var bodies = transformation.getExtensions(Body.class);
final var outOfBandData = transformation.getExtensions(OutOfBandData.class);
// TODO get or create Chat
// TODO create MessageEntity or get existing entity
// TODO for replaced message create a new version; re-target latestVersion
// TODO apply errors, displayed, received etc
// TODO apply reactions
return true;
}
}

View file

@ -0,0 +1,10 @@
package im.conversations.android.xmpp.model.correction;
import im.conversations.android.xmpp.model.Extension;
public class Replace extends Extension {
public Replace() {
super(Replace.class);
}
}

View file

@ -0,0 +1,12 @@
package im.conversations.android.xmpp.model.markers;
import im.conversations.android.annotation.XmlElement;
import im.conversations.android.xmpp.model.Extension;
@XmlElement
public class Displayed extends Extension {
public Displayed() {
super(Displayed.class);
}
}

View file

@ -0,0 +1,17 @@
package im.conversations.android.xmpp.model.oob;
import im.conversations.android.annotation.XmlElement;
import im.conversations.android.xmpp.model.Extension;
@XmlElement(name = "x")
public class OutOfBandData extends Extension {
public OutOfBandData() {
super(OutOfBandData.class);
}
public String getURL() {
final URL url = this.getExtension(URL.class);
return url == null ? null : url.getContent();
}
}

View file

@ -0,0 +1,12 @@
package im.conversations.android.xmpp.model.oob;
import im.conversations.android.annotation.XmlElement;
import im.conversations.android.xmpp.model.Extension;
@XmlElement(name = "url")
public class URL extends Extension {
public URL() {
super(URL.class);
}
}

View file

@ -0,0 +1,5 @@
@XmlPackage(namespace = Namespace.OOB)
package im.conversations.android.xmpp.model.oob;
import eu.siacs.conversations.xml.Namespace;
import im.conversations.android.annotation.XmlPackage;