commit 2f808685e8522beb9379ca1c6dc2b1492d25aedd parent 3951d30f2b6e5a1071ccb48be5793fda23baa9ba Author: rhunk <101876869+rhunk@users.noreply.github.com> Date: Wed, 6 Aug 2025 09:51:45 +0200 fix(core): streak expiration Signed-off-by: rhunk <101876869+rhunk@users.noreply.github.com> Diffstat:
3 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/database/impl/FriendFeedEntry.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/database/impl/FriendFeedEntry.kt @@ -26,6 +26,8 @@ data class FriendFeedEntry( var friendLinkType: Int? = null, var bitmojiAvatarId: String? = null, var bitmojiSelfieId: String? = null, + var streakCount: Int? = null, + var streakExpirationTimestampMs: Long? = null, ) : DatabaseObject { @SuppressLint("Range") override fun write(cursor: Cursor) { @@ -47,6 +49,9 @@ data class FriendFeedEntry( friendLinkType = getIntOrNull("friendLinkType") bitmojiAvatarId = getStringOrNull("bitmojiAvatarId") bitmojiSelfieId = getStringOrNull("bitmojiSelfieId") + + streakCount = getIntOrNull("streak_count") + streakExpirationTimestampMs = getLongOrNull("streak_expiration_timestamp_ms") } } } diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/SnapEnhance.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/SnapEnhance.kt @@ -337,6 +337,11 @@ class SnapEnhance { } private fun syncRemote() { + val myUserId = appContext.database.myUserId + val streakEntries = appContext.database.getFeedEntries(Int.MAX_VALUE, whereClause = "streak_count IS NOT NULL AND streak_count > 0").associate { + (it.friendUserId ?: it.participants?.firstOrNull { it != myUserId }) to it + }.filter { it.key != null } + appContext.bridgeClient.sync(object : SyncCallback.Stub() { override fun syncFriend(uuid: String): String? { return appContext.database.getFriendInfo(uuid)?.let { @@ -352,7 +357,12 @@ class SnapEnhance { expirationTimestamp = it.streakExpirationTimestamp, length = it.streakLength ) - } else null + } else streakEntries[it.userId]?.let { + FriendStreaks( + expirationTimestamp = it.streakExpirationTimestampMs ?: return@let null, + length = it.streakCount ?: return@let null + ) + } ).toSerialized() } } diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/database/DatabaseAccess.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/database/DatabaseAccess.kt @@ -283,11 +283,11 @@ class DatabaseAccess( } ?: emptyList() } - fun getFeedEntries(limit: Int): List<FriendFeedEntry> { + fun getFeedEntries(limit: Int, whereClause: String? = null): List<FriendFeedEntry> { val entries = mutableListOf<FriendFeedEntry>() return useDatabase(DatabaseType.ARROYO)?.performOperation { safeRawQuery( - "SELECT * FROM feed_entry ORDER BY last_updated_timestamp DESC LIMIT ?", + "SELECT * FROM feed_entry ${whereClause?.let { "WHERE $it" }.orEmpty()} ORDER BY last_updated_timestamp DESC LIMIT ?", arrayOf(limit.toString()) )?.use { query -> while (query.moveToNext()) {