From d1f1ad51d933033e8f77eddc9cefee306ed5bfc5 Mon Sep 17 00:00:00 2001 From: Diego Beraldin Date: Wed, 29 Nov 2023 12:59:49 +0100 Subject: [PATCH] fix(api): improve Lemmy 0.19 compatibility (#173) * fix: optional fields * fix: back to top when changing instance in anon mode --- .../raccoonforlemmy/core/api/dto/CommentAggregates.kt | 2 +- .../raccoonforlemmy/core/api/dto/CommunityAggregates.kt | 2 +- .../raccoonforlemmy/core/api/dto/PersonAggregates.kt | 6 +++--- .../raccoonforlemmy/core/api/dto/PostAggregates.kt | 2 +- .../raccoonforlemmy/core/api/dto/SiteAggregates.kt | 2 +- .../diegoberaldin/raccoonforlemmy/core/api/dto/SiteView.kt | 2 +- .../domain/lemmy/repository/utils/Mappings.kt | 4 ++-- .../feature/home/postlist/PostListViewModel.kt | 3 ++- 8 files changed, 12 insertions(+), 11 deletions(-) diff --git a/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/CommentAggregates.kt b/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/CommentAggregates.kt index d0a5b79fe..a4af43d2a 100644 --- a/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/CommentAggregates.kt +++ b/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/CommentAggregates.kt @@ -5,7 +5,7 @@ import kotlinx.serialization.Serializable @Serializable data class CommentAggregates( - @SerialName("id") val id: Int, + @SerialName("id") val id: Int? = null, @SerialName("comment_id") val commentId: CommentId, @SerialName("score") val score: Int, @SerialName("upvotes") val upvotes: Int, diff --git a/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/CommunityAggregates.kt b/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/CommunityAggregates.kt index 4e2ab37f4..bd0eb7aec 100644 --- a/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/CommunityAggregates.kt +++ b/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/CommunityAggregates.kt @@ -5,7 +5,7 @@ import kotlinx.serialization.Serializable @Serializable data class CommunityAggregates( - @SerialName("id") val id: Int, + @SerialName("id") val id: Int? = null, @SerialName("community_id") val communityId: CommunityId, @SerialName("subscribers") val subscribers: Int, @SerialName("posts") val posts: Int, diff --git a/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/PersonAggregates.kt b/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/PersonAggregates.kt index d6a3b3906..a7e0094aa 100644 --- a/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/PersonAggregates.kt +++ b/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/PersonAggregates.kt @@ -5,10 +5,10 @@ import kotlinx.serialization.Serializable @Serializable data class PersonAggregates( - @SerialName("id") val id: Int, + @SerialName("id") val id: Int? = null, @SerialName("person_id") val personId: PersonId, @SerialName("post_count") val postCount: Int, - @SerialName("post_score") val postScore: Int, + @SerialName("post_score") val postScore: Int? = null, @SerialName("comment_count") val commentCount: Int, - @SerialName("comment_score") val commentScore: Int, + @SerialName("comment_score") val commentScore: Int? = null, ) diff --git a/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/PostAggregates.kt b/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/PostAggregates.kt index 0c7f8721a..159e44807 100644 --- a/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/PostAggregates.kt +++ b/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/PostAggregates.kt @@ -5,7 +5,7 @@ import kotlinx.serialization.Serializable @Serializable data class PostAggregates( - @SerialName("id") val id: Int, + @SerialName("id") val id: Int? = null, @SerialName("post_id") val postId: PostId, @SerialName("comments") val comments: Int, @SerialName("score") val score: Int, diff --git a/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/SiteAggregates.kt b/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/SiteAggregates.kt index 6cd5763be..3634d2d44 100644 --- a/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/SiteAggregates.kt +++ b/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/SiteAggregates.kt @@ -5,7 +5,7 @@ import kotlinx.serialization.Serializable @Serializable data class SiteAggregates( - @SerialName("id") val id: Int, + @SerialName("id") val id: Int? = null, @SerialName("site_id") val siteOd: SiteId, @SerialName("users") val users: Int, @SerialName("posts") val posts: Int, diff --git a/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/SiteView.kt b/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/SiteView.kt index 1e4d1cea4..18af39228 100644 --- a/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/SiteView.kt +++ b/core-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/api/dto/SiteView.kt @@ -7,6 +7,6 @@ import kotlinx.serialization.Serializable data class SiteView( @SerialName("site") val site: Site, @SerialName("local_site") val localSite: LocalSite, - @SerialName("local_site_rate_limit") val localSiteRateLimit: LocalSiteRateLimit, + @SerialName("local_site_rate_limit") val localSiteRateLimit: LocalSiteRateLimit?, @SerialName("counts") val counts: SiteAggregates, ) diff --git a/domain-lemmy/repository/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/lemmy/repository/utils/Mappings.kt b/domain-lemmy/repository/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/lemmy/repository/utils/Mappings.kt index e54b46a3a..e52388bea 100644 --- a/domain-lemmy/repository/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/lemmy/repository/utils/Mappings.kt +++ b/domain-lemmy/repository/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/lemmy/repository/utils/Mappings.kt @@ -99,8 +99,8 @@ internal fun Person.toModel() = UserModel( internal fun PersonView.toModel() = person.toModel() internal fun PersonAggregates.toModel() = UserScoreModel( - postScore = postScore, - commentScore = commentScore, + postScore = postScore ?: 0, + commentScore = commentScore ?: 0, ) internal fun PostView.toModel() = PostModel( diff --git a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostListViewModel.kt b/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostListViewModel.kt index 79ade1020..95de0e13a 100644 --- a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostListViewModel.kt +++ b/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostListViewModel.kt @@ -60,8 +60,9 @@ class PostListViewModel( it.copy(instance = instance) } }.launchIn(this) - apiConfigRepository.instance.drop(1).onEach { instance -> + apiConfigRepository.instance.drop(1).onEach { _ -> refresh() + mvi.emitEffect(PostListMviModel.Effect.BackToTop) }.launchIn(this) identityRepository.authToken.map { !it.isNullOrEmpty() }.onEach { isLogged ->