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 index 691ed9e6..d17e3867 100644 --- 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 index c05eae5b..cee0f34f 100644 --- 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 index 5fb51d63..78bda279 100644 --- 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 { + fun getFeedEntries(limit: Int, whereClause: String? = null): List { val entries = mutableListOf() 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()) {