parse blocking command pushes
This commit is contained in:
parent
164ac450d4
commit
fe32526de8
|
@ -2,9 +2,11 @@ package im.conversations.android.database.dao;
|
||||||
|
|
||||||
import androidx.room.Dao;
|
import androidx.room.Dao;
|
||||||
import androidx.room.Insert;
|
import androidx.room.Insert;
|
||||||
|
import androidx.room.OnConflictStrategy;
|
||||||
import androidx.room.Query;
|
import androidx.room.Query;
|
||||||
import androidx.room.Transaction;
|
import androidx.room.Transaction;
|
||||||
import com.google.common.collect.Collections2;
|
import com.google.common.collect.Collections2;
|
||||||
|
import eu.siacs.conversations.xmpp.Jid;
|
||||||
import im.conversations.android.database.entity.BlockedItemEntity;
|
import im.conversations.android.database.entity.BlockedItemEntity;
|
||||||
import im.conversations.android.database.model.Account;
|
import im.conversations.android.database.model.Account;
|
||||||
import im.conversations.android.xmpp.model.blocking.Item;
|
import im.conversations.android.xmpp.model.blocking.Item;
|
||||||
|
@ -13,17 +15,25 @@ import java.util.Collection;
|
||||||
@Dao
|
@Dao
|
||||||
public abstract class BlockingDao {
|
public abstract class BlockingDao {
|
||||||
|
|
||||||
@Insert
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
abstract void insert(Collection<BlockedItemEntity> entities);
|
abstract void insert(Collection<BlockedItemEntity> entities);
|
||||||
|
|
||||||
@Query("DELETE FROM blocked WHERE accountId=:account")
|
@Query("DELETE FROM blocked WHERE accountId=:account")
|
||||||
abstract void clear(final long account);
|
public abstract void clear(final long account);
|
||||||
|
|
||||||
@Transaction
|
@Transaction
|
||||||
public void setBlocklist(final Account account, final Collection<Item> blockedItems) {
|
public void set(final Account account, final Collection<Item> blockedItems) {
|
||||||
final var entities =
|
final var entities =
|
||||||
Collections2.transform(blockedItems, i -> BlockedItemEntity.of(account.id, i));
|
Collections2.transform(
|
||||||
|
blockedItems, i -> BlockedItemEntity.of(account.id, i.getJid()));
|
||||||
clear(account.id);
|
clear(account.id);
|
||||||
insert(entities);
|
insert(entities);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void add(Account account, Collection<Jid> addresses) {
|
||||||
|
insert(Collections2.transform(addresses, a -> BlockedItemEntity.of(account.id, a)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Query("DELETE from blocked WHERE accountId=:account AND address IN(:addresses)")
|
||||||
|
public abstract void remove(final long account, Collection<Jid> addresses);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@ import androidx.room.ForeignKey;
|
||||||
import androidx.room.Index;
|
import androidx.room.Index;
|
||||||
import androidx.room.PrimaryKey;
|
import androidx.room.PrimaryKey;
|
||||||
import eu.siacs.conversations.xmpp.Jid;
|
import eu.siacs.conversations.xmpp.Jid;
|
||||||
import im.conversations.android.xmpp.model.blocking.Item;
|
|
||||||
|
|
||||||
@Entity(
|
@Entity(
|
||||||
tableName = "blocked",
|
tableName = "blocked",
|
||||||
|
@ -30,10 +29,10 @@ public class BlockedItemEntity {
|
||||||
|
|
||||||
@NonNull public Jid address;
|
@NonNull public Jid address;
|
||||||
|
|
||||||
public static BlockedItemEntity of(final long accountId, final Item item) {
|
public static BlockedItemEntity of(final long accountId, final Jid address) {
|
||||||
final var entity = new BlockedItemEntity();
|
final var entity = new BlockedItemEntity();
|
||||||
entity.accountId = accountId;
|
entity.accountId = accountId;
|
||||||
entity.address = item.getJid();
|
entity.address = address;
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.google.common.collect.Collections2;
|
||||||
import im.conversations.android.xmpp.XmppConnection;
|
import im.conversations.android.xmpp.XmppConnection;
|
||||||
import im.conversations.android.xmpp.model.blocking.Block;
|
import im.conversations.android.xmpp.model.blocking.Block;
|
||||||
import im.conversations.android.xmpp.model.blocking.Blocklist;
|
import im.conversations.android.xmpp.model.blocking.Blocklist;
|
||||||
|
import im.conversations.android.xmpp.model.blocking.Item;
|
||||||
import im.conversations.android.xmpp.model.blocking.Unblock;
|
import im.conversations.android.xmpp.model.blocking.Unblock;
|
||||||
import im.conversations.android.xmpp.model.stanza.IQ;
|
import im.conversations.android.xmpp.model.stanza.IQ;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
@ -15,9 +16,26 @@ public class BlockingManager extends AbstractManager {
|
||||||
super(context, connection);
|
super(context, connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handlePush(final Block block) {}
|
public void handlePush(final Block block) {
|
||||||
|
final var items = block.getExtensions(Item.class);
|
||||||
|
final var addresses =
|
||||||
|
Collections2.transform(
|
||||||
|
Collections2.filter(items, i -> Objects.nonNull(i.getJid())), Item::getJid);
|
||||||
|
getDatabase().blockingDao().add(getAccount(), addresses);
|
||||||
|
}
|
||||||
|
|
||||||
public void handlePush(final Unblock unblock) {}
|
public void handlePush(final Unblock unblock) {
|
||||||
|
final var items = unblock.getExtensions(Item.class);
|
||||||
|
if (items.isEmpty()) {
|
||||||
|
getDatabase().blockingDao().clear(getAccount().id);
|
||||||
|
} else {
|
||||||
|
final var addresses =
|
||||||
|
Collections2.transform(
|
||||||
|
Collections2.filter(items, i -> Objects.nonNull(i.getJid())),
|
||||||
|
Item::getJid);
|
||||||
|
getDatabase().blockingDao().remove(getAccount().id, addresses);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void fetch() {
|
public void fetch() {
|
||||||
final IQ iqPacket = new IQ(IQ.Type.GET);
|
final IQ iqPacket = new IQ(IQ.Type.GET);
|
||||||
|
@ -37,6 +55,6 @@ public class BlockingManager extends AbstractManager {
|
||||||
final var items =
|
final var items =
|
||||||
blocklist.getExtensions(im.conversations.android.xmpp.model.blocking.Item.class);
|
blocklist.getExtensions(im.conversations.android.xmpp.model.blocking.Item.class);
|
||||||
final var filteredItems = Collections2.filter(items, i -> Objects.nonNull(i.getJid()));
|
final var filteredItems = Collections2.filter(items, i -> Objects.nonNull(i.getJid()));
|
||||||
getDatabase().blockingDao().setBlocklist(account, filteredItems);
|
getDatabase().blockingDao().set(account, filteredItems);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue