diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d3cd8acb2..5d198df0c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -256,4 +256,8 @@ kotlin { } } } +} + +ktorfit { + compilerPluginVersion.set("2.3.3") } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f2af2049c..04debd342 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ lifecycleViewmodelComposeVersion = "2.9.6" minSdk = "23" java = "21" agp = "8.13.2" -kotlin = "2.2.21" +kotlin = "2.3.0" core-ktx = "1.17.0" junit = "4.13.2" androidx-test-ext-junit = "1.3.0" diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index a931d4ab8..7f74fc771 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -128,6 +128,10 @@ room { schemaDirectory("$projectDir/schemas") } +ktorfit { + compilerPluginVersion.set("2.3.3") +} + ktlint { version.set(libs.versions.ktlint) filter { diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/Bluesky.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/Bluesky.kt index 9f2e9ebef..161555760 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/Bluesky.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/Bluesky.kt @@ -218,9 +218,8 @@ internal fun List.toDb( when (reason) { ListNotificationsNotificationReason.Repost -> it.decodeAs().subject ListNotificationsNotificationReason.Like -> it.decodeAs().subject - else -> null } - }?.uri + }.uri .let { references[it] } @@ -233,7 +232,6 @@ internal fun List.toDb( when (reason) { ListNotificationsNotificationReason.Repost -> "_repost" ListNotificationsNotificationReason.Like -> "_like" - else -> "" } val data = DbStatusWithUser( diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FansPagingSource.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FansPagingSource.kt index 30317eb80..456a42ec8 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FansPagingSource.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FansPagingSource.kt @@ -34,7 +34,7 @@ internal class FansPagingSource( it.follower?.render(accountKey = accountKey) }, prevKey = null, - nextKey = response?.lastOrNull()?.id, + nextKey = response.lastOrNull()?.id, ) } } diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FavouriteTimelineRemoteMediator.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FavouriteTimelineRemoteMediator.kt index 62acb24c3..f1401662b 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FavouriteTimelineRemoteMediator.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FavouriteTimelineRemoteMediator.kt @@ -50,9 +50,7 @@ internal class FavouriteTimelineRemoteMediator( ), ) } - } ?: return Result( - endOfPaginationReached = true, - ) + } val notes = response.map { it.note } val data = diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FollowingPagingSource.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FollowingPagingSource.kt index 74674f4d6..82ff87f24 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FollowingPagingSource.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FollowingPagingSource.kt @@ -35,7 +35,7 @@ internal class FollowingPagingSource( it.followee?.render(accountKey = accountKey) }, prevKey = null, - nextKey = response?.lastOrNull()?.id, + nextKey = response.lastOrNull()?.id, ) } } diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HomeTimelineRemoteMediator.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HomeTimelineRemoteMediator.kt index bfe6e1902..20f1f57d4 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HomeTimelineRemoteMediator.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HomeTimelineRemoteMediator.kt @@ -46,9 +46,7 @@ internal class HomeTimelineRemoteMediator( ), ) } - } ?: return Result( - endOfPaginationReached = true, - ) + } return Result( endOfPaginationReached = response.isEmpty(), diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HybridTimelineRemoteMediator.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HybridTimelineRemoteMediator.kt index ec0026421..86e654165 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HybridTimelineRemoteMediator.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HybridTimelineRemoteMediator.kt @@ -41,9 +41,7 @@ internal class HybridTimelineRemoteMediator( ), ) } - } ?: return Result( - endOfPaginationReached = true, - ) + } return Result( endOfPaginationReached = response.isEmpty(), diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/ListTimelineRemoteMediator.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/ListTimelineRemoteMediator.kt index 12434d95a..87eb512bb 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/ListTimelineRemoteMediator.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/ListTimelineRemoteMediator.kt @@ -55,9 +55,7 @@ internal class ListTimelineRemoteMediator( ), ) } - } ?: return Result( - endOfPaginationReached = true, - ) + } return Result( endOfPaginationReached = response.isEmpty(), diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/LocalTimelineRemoteMediator.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/LocalTimelineRemoteMediator.kt index 44488f6e0..b5b6fdc34 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/LocalTimelineRemoteMediator.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/LocalTimelineRemoteMediator.kt @@ -43,9 +43,7 @@ internal class LocalTimelineRemoteMediator( ), ) } - } ?: return Result( - endOfPaginationReached = true, - ) + } return Result( endOfPaginationReached = response.isEmpty(), diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MentionTimelineRemoteMediator.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MentionTimelineRemoteMediator.kt index 421302f7d..d91ca4941 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MentionTimelineRemoteMediator.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MentionTimelineRemoteMediator.kt @@ -43,9 +43,7 @@ internal class MentionTimelineRemoteMediator( ), ) } - } ?: return Result( - endOfPaginationReached = true, - ) + } return Result( endOfPaginationReached = response.isEmpty(), diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyDataSource.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyDataSource.kt index 697c390b1..ffcfefb76 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyDataSource.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyDataSource.kt @@ -209,9 +209,7 @@ internal class MisskeyDataSource( val user = service .usersShow(UsersShowRequest(username = name, host = host)) - - ?.toDbUser(accountKey.host) - ?: throw Exception("User not found") + .toDbUser(accountKey.host) database.userDao().insert(user) }, cacheSource = { @@ -231,9 +229,7 @@ internal class MisskeyDataSource( val user = service .usersShow(UsersShowRequest(userId = id)) - - ?.toDbUser(accountKey.host) - ?: throw Exception("User not found") + .toDbUser(accountKey.host) database.userDao().insert(user) }, cacheSource = { @@ -315,8 +311,7 @@ internal class MisskeyDataSource( val emojis = service .emojis() - - ?.emojis + .emojis .orEmpty() .toImmutableList() database.emojiDao().insert( @@ -921,7 +916,7 @@ internal class MisskeyDataSource( ) }.fold( onSuccess = { - emit(it?.isFavorited == true) + emit(it.isFavorited == true) }, onFailure = { emit(false) @@ -1053,19 +1048,17 @@ internal class MisskeyDataSource( ), ) }.onSuccess { response -> - if (response?.id != null) { - MemoryPagingSource.updateWith( - key = listKey, - ) { - it - .plus( - UiList( - id = response.id, - title = metaData.title, - platformType = PlatformType.Mastodon, - ), - ).toImmutableList() - } + MemoryPagingSource.updateWith( + key = listKey, + ) { + it + .plus( + UiList( + id = response.id, + title = metaData.title, + platformType = PlatformType.Mastodon, + ), + ).toImmutableList() } } } @@ -1122,7 +1115,7 @@ internal class MisskeyDataSource( UsersListsShowRequest( listId = listId, ), - )?.render() ?: throw Exception("List not found") + ).render() }, ) @@ -1207,8 +1200,8 @@ internal class MisskeyDataSource( UsersShowRequest( userId = userKey.id, ), - )?.toDbUser(accountKey.host) - ?.render(accountKey) + ).toDbUser(accountKey.host) + .render(accountKey) MemoryPagingSource.updateWith( key = listMemberKey(listId), ) { @@ -1224,14 +1217,12 @@ internal class MisskeyDataSource( listId = listId, ), ) - if (list?.id != null) { - MemCacheable.updateWith>( - key = userListsKey(userKey), - ) { - it - .plus(list.render()) - .toImmutableList() - } + MemCacheable.updateWith>( + key = userListsKey(userKey), + ) { + it + .plus(list.render()) + .toImmutableList() } } } diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/NotificationRemoteMediator.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/NotificationRemoteMediator.kt index 821dd1dc3..843c42ffc 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/NotificationRemoteMediator.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/NotificationRemoteMediator.kt @@ -43,9 +43,7 @@ internal class NotificationRemoteMediator( ), ) } - } ?: return Result( - endOfPaginationReached = true, - ) + } return Result( endOfPaginationReached = response.isEmpty(), diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/PublicTimelineRemoteMediator.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/PublicTimelineRemoteMediator.kt index 908c47ff5..a02a9de24 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/PublicTimelineRemoteMediator.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/PublicTimelineRemoteMediator.kt @@ -43,9 +43,7 @@ internal class PublicTimelineRemoteMediator( ), ) } - } ?: return Result( - endOfPaginationReached = true, - ) + } return Result( endOfPaginationReached = response.isEmpty(), diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchStatusRemoteMediator.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchStatusRemoteMediator.kt index 35441a0ec..1d78a4a9a 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchStatusRemoteMediator.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchStatusRemoteMediator.kt @@ -55,7 +55,7 @@ internal class SearchStatusRemoteMediator( ), ) } - } ?: emptyList() + } return Result( endOfPaginationReached = response.isEmpty(), diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchUserPagingSource.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchUserPagingSource.kt index f7fd351b2..8b5e2821d 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchUserPagingSource.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchUserPagingSource.kt @@ -23,7 +23,7 @@ internal class SearchUserPagingSource( limit = params.loadSize, offset = params.key ?: 0, ), - )?.let { + ).let { return LoadResult.Page( data = it.map { it.render(accountKey) }, prevKey = null, @@ -34,8 +34,6 @@ internal class SearchUserPagingSource( (params.key ?: 0) + params.loadSize }, ) - } ?: run { - return LoadResult.Error(Exception("No data")) - } + } } } diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendHashtagPagingSource.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendHashtagPagingSource.kt index c381d9750..d0812feb4 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendHashtagPagingSource.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendHashtagPagingSource.kt @@ -13,8 +13,7 @@ internal class TrendHashtagPagingSource( override suspend fun doLoad(params: LoadParams): LoadResult { service .hashtagsTrend() - - ?.map { + .map { UiHashtag( hashtag = it.tag, description = null, @@ -22,7 +21,7 @@ internal class TrendHashtagPagingSource( ) }.let { return LoadResult.Page( - data = it ?: emptyList(), + data = it, prevKey = null, nextKey = null, ) diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendsUserPagingSource.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendsUserPagingSource.kt index 817928801..7465cc77a 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendsUserPagingSource.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendsUserPagingSource.kt @@ -17,12 +17,11 @@ internal class TrendsUserPagingSource( override suspend fun doLoad(params: LoadParams): LoadResult { service .pinnedUsers(PinnedUsersRequest(limit = params.loadSize)) - - ?.map { + .map { it.render(accountKey) }.let { return LoadResult.Page( - data = it ?: emptyList(), + data = it, prevKey = null, nextKey = null, ) diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVODataSource.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVODataSource.kt index 295d2325b..2327507b1 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVODataSource.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVODataSource.kt @@ -229,7 +229,7 @@ internal class VVODataSource( ?.user requireNotNull(user) { "user not found" } UiRelation( - following = user.following ?: false, + following = user.following, isFans = user.followMe ?: false, ) }.toUi() diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/TimelineData.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/TimelineData.kt index a91ae9563..095c67ab6 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/TimelineData.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/TimelineData.kt @@ -45,7 +45,7 @@ internal data class VVOResponse( ) @OptIn(ExperimentalSerializationApi::class) -private class VVOResponseSerializer( +internal class VVOResponseSerializer( private val dataSer: KSerializer, ) : KSerializer> { override val descriptor: SerialDescriptor = diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Mastodon.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Mastodon.kt index c4fc08aca..e07893922 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Mastodon.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Mastodon.kt @@ -998,7 +998,7 @@ private fun parseName(status: Account): Element { "\"${it.shortcode}\"", ) } - return parseHtml(content) as? Element ?: Element("body") + return parseHtml(content) } internal fun parseMastodonContent( diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Misskey.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Misskey.kt index c5514d7ef..d2d2d4655 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Misskey.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Misskey.kt @@ -832,7 +832,7 @@ private fun parseName( if (name.isEmpty()) { return Element("body") } - return misskeyNameParser.parse(name).toHtml(accountKey, emojis, accountKey.host) as? Element ?: Element("body") + return misskeyNameParser.parse(name).toHtml(accountKey, emojis, accountKey.host) } private fun moe.tlaster.mfm.parser.tree.Node.toHtml( diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQT.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQT.kt index 0b0b6bd3d..d12878a8e 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQT.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQT.kt @@ -85,7 +85,7 @@ internal fun TopLevel.renderNotifications( val users = data?.template?.aggregateUserActionsV1?.fromUsers?.mapNotNull { ref -> globalObjects - ?.users + .users ?.get(ref.user?.id) ?.let { userLegacy -> User(