diff --git a/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt b/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt index 0e1b0430..b491c4b9 100644 --- a/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt +++ b/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt @@ -175,6 +175,21 @@ object RealtimeSocket { ) } + // Remove servers that are not in the ready frame + val serversThatExist = readyFrame.servers.mapNotNull { it.id } + val serversInDatabase = database.serverQueries.selectAllIds().executeAsList() + val serversToDelete = serversInDatabase.filter { it !in serversThatExist } + + serversToDelete.forEach { + database.serverQueries.delete(it) + Log.d( + "RealtimeSocket", + "Deleted server $it from local database due to not being in ready frame." + ) + // Conversely, remove the server from the API state + RevoltAPI.serverCache.remove(it) + } + Log.d("RealtimeSocket", "Adding channels to cache.") val channelMap = readyFrame.channels.associateBy { it.id!! } RevoltAPI.channelCache.putAll(channelMap) @@ -201,6 +216,21 @@ object RealtimeSocket { ) } + // Remove channels that are not in the ready frame + val channelsThatExist = readyFrame.channels.mapNotNull { it.id } + val channelsInDatabase = database.channelQueries.selectAllIds().executeAsList() + val channelsToDelete = channelsInDatabase.filter { it !in channelsThatExist } + + channelsToDelete.forEach { + database.channelQueries.delete(it) + Log.d( + "RealtimeSocket", + "Deleted channel $it from local database due to not being in ready frame." + ) + // Conversely, remove the channel from the API state + RevoltAPI.channelCache.remove(it) + } + Log.d("RealtimeSocket", "Adding emojis to cache.") val emojiMap = readyFrame.emojis.associateBy { it.id!! } RevoltAPI.emojiCache.putAll(emojiMap) diff --git a/app/src/main/sqldelight/chat/revolt/persistence/cache/Channel.sq b/app/src/main/sqldelight/chat/revolt/persistence/cache/Channel.sq index ef2e63a3..4baea202 100644 --- a/app/src/main/sqldelight/chat/revolt/persistence/cache/Channel.sq +++ b/app/src/main/sqldelight/chat/revolt/persistence/cache/Channel.sq @@ -24,6 +24,10 @@ selectAll: SELECT * FROM Channel; +selectAllIds: +SELECT id +FROM Channel; + upsert: INSERT OR REPLACE INTO Channel (id, channelType, userId, name, owner, description, dmPartner, iconId, lastMessageId, active, nsfw, server) diff --git a/app/src/main/sqldelight/chat/revolt/persistence/cache/Server.sq b/app/src/main/sqldelight/chat/revolt/persistence/cache/Server.sq index 54eb323c..a2f04aa8 100644 --- a/app/src/main/sqldelight/chat/revolt/persistence/cache/Server.sq +++ b/app/src/main/sqldelight/chat/revolt/persistence/cache/Server.sq @@ -15,6 +15,10 @@ selectAll: SELECT * FROM Server; +selectAllIds: +SELECT id +FROM Server; + upsert: INSERT OR REPLACE INTO Server (id, owner, name, description, iconId, bannerId, flags)