store roster groups in DB

This commit is contained in:
Daniel Gultsch 2023-02-13 15:36:10 +01:00
parent 405445afbe
commit acb297ac96
No known key found for this signature in database
GPG key ID: F43D18AD2A0982C2
4 changed files with 38 additions and 2 deletions

View file

@ -6,8 +6,10 @@ import androidx.room.Dao;
import androidx.room.Insert; import androidx.room.Insert;
import androidx.room.Query; import androidx.room.Query;
import androidx.room.Transaction; import androidx.room.Transaction;
import com.google.common.collect.Collections2;
import eu.siacs.conversations.xmpp.Jid; import eu.siacs.conversations.xmpp.Jid;
import im.conversations.android.database.entity.RosterItemEntity; import im.conversations.android.database.entity.RosterItemEntity;
import im.conversations.android.database.entity.RosterItemGroupEntity;
import im.conversations.android.database.model.Account; import im.conversations.android.database.model.Account;
import im.conversations.android.xmpp.model.roster.Item; import im.conversations.android.xmpp.model.roster.Item;
import java.util.Collection; import java.util.Collection;
@ -33,7 +35,9 @@ public abstract class RosterDao {
clear(account.id); clear(account.id);
for (final Item item : rosterItems) { for (final Item item : rosterItems) {
final long id = insert(RosterItemEntity.of(account.id, item)); final long id = insert(RosterItemEntity.of(account.id, item));
// TODO insert groups insertRosterGroups(
Collections2.transform(
item.getGroups(), name -> RosterItemGroupEntity.of(id, name)));
} }
setRosterVersion(account.id, version); setRosterVersion(account.id, version);
} }
@ -50,8 +54,13 @@ public abstract class RosterDao {
} }
final RosterItemEntity entity = RosterItemEntity.of(account.id, item); final RosterItemEntity entity = RosterItemEntity.of(account.id, item);
final long id = insert(entity); final long id = insert(entity);
// TODO groups insertRosterGroups(
Collections2.transform(
item.getGroups(), name -> RosterItemGroupEntity.of(id, name)));
} }
setRosterVersion(account.id, version); setRosterVersion(account.id, version);
} }
@Insert
protected abstract void insertRosterGroups(Collection<RosterItemGroupEntity> entities);
} }

View file

@ -23,4 +23,11 @@ public class RosterItemGroupEntity {
@NonNull public Long rosterItemId; @NonNull public Long rosterItemId;
public String name; public String name;
public static RosterItemGroupEntity of(long rosterItemId, final String name) {
final var entity = new RosterItemGroupEntity();
entity.rosterItemId = rosterItemId;
entity.name = name;
return entity;
}
} }

View file

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

View file

@ -1,11 +1,15 @@
package im.conversations.android.xmpp.model.roster; package im.conversations.android.xmpp.model.roster;
import com.google.common.collect.Collections2;
import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xmpp.Jid; import eu.siacs.conversations.xmpp.Jid;
import im.conversations.android.annotation.XmlElement; import im.conversations.android.annotation.XmlElement;
import im.conversations.android.xmpp.model.Extension; import im.conversations.android.xmpp.model.Extension;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Objects;
@XmlElement @XmlElement
public class Item extends Extension { public class Item extends Extension {
@ -38,6 +42,12 @@ public class Item extends Extension {
} }
} }
public Collection<String> getGroups() {
return Collections2.filter(
Collections2.transform(getExtensions(Group.class), Element::getContent),
Objects::nonNull);
}
public enum Subscription { public enum Subscription {
NONE, NONE,
TO, TO,