chore: add crash reporting (#129)

* refactor: organize core-utils

* feat: add crash report sender
This commit is contained in:
Diego Beraldin 2023-11-12 22:26:19 +01:00 committed by GitHub
parent 52c980b881
commit aecf2549fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
134 changed files with 585 additions and 420 deletions

View File

@ -4,6 +4,8 @@ plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.compose)
alias(libs.plugins.crashlytics)
alias(libs.plugins.gms)
}
android {

View File

@ -1,9 +1,9 @@
package com.github.diegoberaldin.raccoonforlemmy.android
import android.app.Application
import com.github.diegoberaldin.raccoonforlemmy.core.utils.AppInfo
import com.github.diegoberaldin.raccoonforlemmy.core.utils.CrashReportConfiguration
import com.github.diegoberaldin.raccoonforlemmy.core.utils.CrashReportWriter
import com.github.diegoberaldin.raccoonforlemmy.core.utils.debug.AppInfo
import com.github.diegoberaldin.raccoonforlemmy.core.utils.debug.CrashReportConfiguration
import com.github.diegoberaldin.raccoonforlemmy.core.utils.debug.CrashReportWriter
import com.github.diegoberaldin.raccoonforlemmy.di.sharedHelperModule
import org.koin.android.ext.android.inject
import org.koin.android.ext.koin.androidContext

View File

@ -10,6 +10,8 @@ plugins {
alias(libs.plugins.ktorfit).apply(false)
alias(libs.plugins.kotlinx.serialization).apply(false)
alias(libs.plugins.sqldelight).apply(false)
alias(libs.plugins.crashlytics).apply(false)
alias(libs.plugins.gms).apply(false)
}
tasks.register("clean", Delete::class) {

View File

@ -8,7 +8,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.api.service.PrivateMessageS
import com.github.diegoberaldin.raccoonforlemmy.core.api.service.SearchService
import com.github.diegoberaldin.raccoonforlemmy.core.api.service.SiteService
import com.github.diegoberaldin.raccoonforlemmy.core.api.service.UserService
import com.github.diegoberaldin.raccoonforlemmy.core.utils.provideHttpClientEngineFactory
import com.github.diegoberaldin.raccoonforlemmy.core.utils.network.provideHttpClientEngineFactory
import de.jensklingenberg.ktorfit.Ktorfit
import io.ktor.client.HttpClient
import io.ktor.client.plugins.HttpTimeout

View File

@ -1,6 +1,6 @@
package com.github.diegoberaldin.raccoonforlemmy.core.api.provider
import com.github.diegoberaldin.raccoonforlemmy.core.utils.Log
import com.github.diegoberaldin.raccoonforlemmy.core.utils.debug.Log
import io.ktor.client.plugins.logging.Logger
internal val defaultLogger = object : Logger {

View File

@ -37,8 +37,8 @@ import androidx.compose.ui.unit.dp
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.CornerSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.IconSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
data class FloatingActionButtonMenuItem(
val icon: ImageVector,

View File

@ -22,7 +22,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallbackArgs
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn

View File

@ -54,8 +54,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.CustomI
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getDrawerCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getInboxChatViewModel
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource

View File

@ -24,7 +24,7 @@ import androidx.compose.ui.unit.dp
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.CornerSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.ScaledContent
import com.github.diegoberaldin.raccoonforlemmy.core.utils.prettifyDate
import com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime.prettifyDate
@Composable
internal fun MessageCard(

View File

@ -43,8 +43,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.BottomS
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.PostCardBody
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.ScaledContent
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getCommunityInfoViewModel
import com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime.prettifyDate
import com.github.diegoberaldin.raccoonforlemmy.core.utils.getPrettyNumber
import com.github.diegoberaldin.raccoonforlemmy.core.utils.prettifyDate
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommunityModel
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource

View File

@ -100,9 +100,9 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.userdetail.UserDet
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.di.getSettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallbackArgs
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLocalDp
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommentModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommunityModel

View File

@ -5,9 +5,9 @@ import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviMode
import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.image.ImagePreloadManager
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.HapticFeedback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.ShareHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.ZombieModeHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.share.ShareHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.vibrate.HapticFeedback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.zombiemode.ZombieModeHelper
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.IdentityRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommunityModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel

View File

@ -20,8 +20,8 @@ import androidx.compose.ui.unit.toSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.di.getThemeRepository
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.IconSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLocalDp
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommentModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommunityModel

View File

@ -20,7 +20,7 @@ import androidx.compose.ui.unit.dp
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.CornerSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.IconSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.utils.shimmerEffect
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.shimmerEffect
@Composable
fun CommentCardPlaceholder(

View File

@ -22,8 +22,8 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.unit.Dp
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.IconSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommunityModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.UserModel

View File

@ -29,9 +29,9 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.IconSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.getPrettyNumber
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommunityModel
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource

View File

@ -14,8 +14,8 @@ import androidx.compose.ui.unit.dp
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.data.PostLayout
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.CornerSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommentModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommunityModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PersonMentionModel

View File

@ -18,7 +18,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.appearance.data.PostLayout
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.CornerSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.IconSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.utils.shimmerEffect
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.shimmerEffect
@Composable
fun InboxCardPlaceholder(

View File

@ -33,9 +33,9 @@ import androidx.compose.ui.unit.dp
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.di.getThemeRepository
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.IconSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.prettifyDate
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime.prettifyDate
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommunityModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.UserModel

View File

@ -32,9 +32,9 @@ import androidx.compose.ui.unit.toSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.data.PostLayout
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.CornerSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.looksLikeAnImage
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLocalPixel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommunityModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel

View File

@ -37,9 +37,9 @@ import androidx.compose.ui.unit.dp
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.di.getThemeRepository
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.IconSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.prettifyDate
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime.prettifyDate
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLocalDp
@Composable

View File

@ -18,8 +18,8 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource

View File

@ -23,7 +23,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.appearance.data.PostLayout
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.CornerSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.IconSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.utils.shimmerEffect
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.shimmerEffect
@Composable
fun PostCardPlaceholder(

View File

@ -21,8 +21,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.web.WebViewScreen
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.di.getSettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
@Composable
fun PostLinkBanner(

View File

@ -18,8 +18,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.TextFieldValue
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
@Composable
fun TextFormattingBar(

View File

@ -32,10 +32,10 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.IconSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime.prettifyDate
import com.github.diegoberaldin.raccoonforlemmy.core.utils.getPrettyNumber
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.prettifyDate
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.UserModel
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource

View File

@ -64,7 +64,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCo
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.RawContentDialog
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.utils.getGalleryHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.gallery.getGalleryHelper
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommentModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel
import com.github.diegoberaldin.raccoonforlemmy.resources.MR

View File

@ -67,10 +67,10 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCo
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.selectcommunity.SelectCommunityDialog
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.utils.getGalleryHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallbackArgs
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs
import com.github.diegoberaldin.raccoonforlemmy.core.utils.gallery.getGalleryHelper
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommunityModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.shareUrl

View File

@ -65,8 +65,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.MultiCo
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.PlaceholderImage
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getDrawerCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getModalDrawerViewModel
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.UserModel
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import com.github.diegoberaldin.raccoonforlemmy.resources.di.getLanguageRepository

View File

@ -35,8 +35,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.Zoomabl
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getDrawerCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getZoomableImageViewModel
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource
import kotlinx.coroutines.flow.launchIn

View File

@ -3,10 +3,10 @@ package com.github.diegoberaldin.raccoonforlemmy.core.commonui.image
import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel
import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.DateTime
import com.github.diegoberaldin.raccoonforlemmy.core.utils.GalleryHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.ShareHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.download
import com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime.DateTime
import com.github.diegoberaldin.raccoonforlemmy.core.utils.gallery.GalleryHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.gallery.download
import com.github.diegoberaldin.raccoonforlemmy.core.utils.share.ShareHelper
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import kotlinx.coroutines.flow.launchIn

View File

@ -50,8 +50,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.selectcommunity.Co
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.di.getSettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.getAdditionalLabel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toIcon

View File

@ -34,8 +34,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCo
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.di.getSettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource

View File

@ -19,9 +19,9 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.BottomS
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.utils.getPrettyDuration
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime.getPrettyDuration
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource
import kotlin.time.Duration

View File

@ -21,8 +21,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.BottomS
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.fontFamilyResource
import dev.icerock.moko.resources.compose.stringResource

View File

@ -21,8 +21,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.BottomSheetHandle
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource

View File

@ -19,8 +19,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.BottomS
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource

View File

@ -19,8 +19,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.BottomS
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLanguageName
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource

View File

@ -22,8 +22,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.BottomS
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.ListingType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toIcon
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toReadableName

View File

@ -21,8 +21,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.BottomS
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource

View File

@ -26,8 +26,8 @@ import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.unit.dp
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getCustomTextToolbar
import com.github.diegoberaldin.raccoonforlemmy.core.utils.getShareHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.share.getShareHelper
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource

View File

@ -30,8 +30,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.BottomS
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toIcon
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toReadableName

View File

@ -25,8 +25,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.BottomS
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource

View File

@ -99,9 +99,9 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.userdetail.UserDet
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.di.getSettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallbackArgs
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommentModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType

View File

@ -6,8 +6,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.HapticFeedback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.ShareHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.share.ShareHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.vibrate.HapticFeedback
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.IdentityRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommentModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel

View File

@ -73,8 +73,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.userdetail.UserDet
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.di.getSettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommentModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType

View File

@ -6,8 +6,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.HapticFeedback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.ShareHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.share.ShareHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.vibrate.HapticFeedback
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.IdentityRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommentModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel

View File

@ -18,7 +18,7 @@ import androidx.compose.ui.unit.dp
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.CornerSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.IconSize
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
import com.github.diegoberaldin.raccoonforlemmy.core.utils.shimmerEffect
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.shimmerEffect
@Composable
fun CommunityItemPlaceholder() {

View File

@ -41,8 +41,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.Communi
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getSelectCommunityViewModel
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource

View File

@ -97,9 +97,9 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.report.CreateRepor
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.di.getSettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallbackArgs
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLocalDp
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommentModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel

View File

@ -7,8 +7,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.image.ImagePreload
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.HapticFeedback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.ShareHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.share.ShareHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.vibrate.HapticFeedback
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.IdentityRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommentModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel

View File

@ -23,9 +23,9 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.CustomW
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.rememberWebViewNavigator
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getDrawerCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCoordinator
import com.github.diegoberaldin.raccoonforlemmy.core.utils.getShareHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.share.getShareHelper
class WebViewScreen(
private val url: String,

View File

@ -31,6 +31,7 @@ kotlin {
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.activity)
implementation(libs.ktor.android)
implementation(libs.firebase.crashlytics)
}
}
val commonMain by getting {
@ -43,6 +44,8 @@ kotlin {
implementation(libs.koin.core)
implementation(libs.ktor.cio)
implementation(libs.crashkios)
implementation(projects.resources)
}
}

View File

@ -1,67 +0,0 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
import android.content.Context
import android.os.Environment
import com.github.diegoberaldin.raccoonforlemmy.core.utils.CrashReportConfiguration.Companion.PREFERENCES_NAME
import org.koin.dsl.module
import java.io.File
import java.io.FileWriter
class DefaultCrashReportConfiguration(
private val context: Context,
) : CrashReportConfiguration {
companion object {
const val KEY = "crashReportEnabled"
}
override fun isEnabled(): Boolean =
context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE)
.getBoolean(KEY, false)
override fun setEnabled(value: Boolean) {
context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE).apply {
edit().putBoolean(KEY, value).apply()
}
}
}
class DefaultCrashReportWriter(
private val context: Context,
) : CrashReportWriter {
companion object {
const val FILE_NAME = "crash_report.txt"
}
override fun write(reportText: String) {
val dir = context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)
val state = Environment.getExternalStorageState()
val logFile = if (Environment.MEDIA_MOUNTED == state) {
File(dir, FILE_NAME)
} else {
File(context.cacheDir, FILE_NAME)
}
try {
val writer = FileWriter(logFile, false)
writer.append(reportText)
writer.flush()
writer.close()
} catch (e: Exception) {
e.printStackTrace()
}
}
}
actual val crashReportModule = module {
single<CrashReportConfiguration> {
DefaultCrashReportConfiguration(
context = get(),
)
}
single<CrashReportWriter> {
DefaultCrashReportWriter(
context = get(),
)
}
}

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime
import java.time.Period
import java.time.ZonedDateTime
@ -77,4 +77,4 @@ actual object DateTime {
private fun getDateFromIso8601Timestamp(string: String): ZonedDateTime {
return ZonedDateTime.parse(string)
}
}
}

View File

@ -0,0 +1,33 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
import org.koin.dsl.module
import org.koin.java.KoinJavaComponent.inject
actual val crashReportModule = module {
single<CrashReportConfiguration> {
DefaultCrashReportConfiguration(
context = get(),
)
}
single<CrashReportWriter> {
DefaultCrashReportWriter(
context = get(),
)
}
single<CrashReportSender> {
DefaultCrashReportSender(
context = get(),
)
}
}
actual fun getCrashReportSender(): CrashReportSender {
val res: CrashReportSender by inject(CrashReportSender::class.java)
return res
}
actual fun getCrashReportConfiguration(): CrashReportConfiguration {
val res: CrashReportConfiguration by inject(CrashReportConfiguration::class.java)
return res
}

View File

@ -0,0 +1,23 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
import android.content.Context
import com.github.diegoberaldin.raccoonforlemmy.core.utils.debug.CrashReportConfiguration.Companion.PREFERENCES_NAME
class DefaultCrashReportConfiguration(
private val context: Context,
) : CrashReportConfiguration {
companion object {
const val KEY = "crashReportEnabled"
}
override fun isEnabled(): Boolean =
context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE)
.getBoolean(KEY, false)
override fun setEnabled(value: Boolean) {
context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE).apply {
edit().putBoolean(KEY, value).apply()
}
}
}

View File

@ -0,0 +1,40 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
import android.content.Context
import co.touchlab.crashkios.crashlytics.CrashlyticsKotlin
import co.touchlab.crashkios.crashlytics.enableCrashlytics
import com.google.firebase.FirebaseApp
class DefaultCrashReportSender(
private val context: Context,
) : CrashReportSender {
private var enabled = false
override fun initialize() {
FirebaseApp.initializeApp(context)
enableCrashlytics()
}
override fun setEnabled(value: Boolean) {
enabled = value
}
override fun sendFatalException(error: Throwable) {
if (enabled) {
CrashlyticsKotlin.sendFatalException(error)
}
}
override fun sendNonFatalException(error: Throwable) {
if (enabled) {
CrashlyticsKotlin.sendHandledException(error)
}
}
override fun log(message: String) {
if (enabled) {
CrashlyticsKotlin.logMessage(message)
}
}
}

View File

@ -0,0 +1,33 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
import android.content.Context
import android.os.Environment
import java.io.File
import java.io.FileWriter
class DefaultCrashReportWriter(
private val context: Context,
) : CrashReportWriter {
companion object {
const val FILE_NAME = "crash_report.txt"
}
override fun write(reportText: String) {
val dir = context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)
val state = Environment.getExternalStorageState()
val logFile = if (Environment.MEDIA_MOUNTED == state) {
File(dir, FILE_NAME)
} else {
File(context.cacheDir, FILE_NAME)
}
try {
val writer = FileWriter(logFile, false)
writer.append(reportText)
writer.flush()
writer.close()
} catch (e: Exception) {
e.printStackTrace()
}
}
}

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
actual object Log {

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.gallery
import android.content.ContentValues
import android.content.Context

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.network
import io.ktor.client.engine.HttpClientEngineFactory
import io.ktor.client.engine.android.Android

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.share
import android.content.Context
import android.content.Intent

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.vibrate
import android.annotation.SuppressLint
import android.content.Context

View File

@ -1,5 +0,0 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
object AppInfo {
var versionCode = ""
}

View File

@ -1,20 +0,0 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
import org.koin.core.module.Module
interface CrashReportConfiguration {
companion object {
const val PREFERENCES_NAME = "CrashReportPreferences"
}
fun isEnabled(): Boolean
fun setEnabled(value: Boolean)
}
interface CrashReportWriter {
fun write(reportText: String)
}
expect val crashReportModule: Module

View File

@ -5,18 +5,7 @@ import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Dp
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource
import io.ktor.client.HttpClient
import io.ktor.client.call.body
import io.ktor.client.request.prepareGet
import io.ktor.http.contentLength
import io.ktor.utils.io.ByteReadChannel
import io.ktor.utils.io.core.isEmpty
import io.ktor.utils.io.core.readBytes
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import kotlinx.coroutines.withContext
import kotlin.math.round
import kotlin.time.Duration
@Composable
fun String.toLanguageName() = when (this) {
@ -73,71 +62,3 @@ fun Int.getPrettyNumber(
}
}
}
fun Duration.getPrettyDuration(
secondsLabel: String,
minutesLabel: String,
hoursLabel: String,
): String = when {
inWholeHours > 0 -> buildString {
append(inWholeHours)
append(hoursLabel)
val remainderMinutes = inWholeMinutes % 60
val remainderSeconds = inWholeSeconds % 60
if (remainderMinutes > 0 || remainderSeconds > 0) {
append(" ")
append(remainderMinutes)
append(minutesLabel)
}
if (remainderSeconds > 0) {
append(" ")
append(remainderSeconds)
append(secondsLabel)
}
}
inWholeMinutes > 0 -> buildString {
append(inWholeMinutes)
append(minutesLabel)
val remainderSeconds = inWholeSeconds % 60
if (remainderSeconds > 0) {
append(" ")
append(remainderSeconds)
append(secondsLabel)
}
}
else -> buildString {
val rounded = round((inWholeMilliseconds / 1000.0) * 10.0) / 10.0
if (rounded % 1 <= 0) {
append(rounded.toInt())
} else {
append(rounded)
}
append(secondsLabel)
}
}
suspend fun GalleryHelper.download(url: String): ByteArray = withContext(Dispatchers.IO) {
val factory = provideHttpClientEngineFactory()
val client = HttpClient(factory)
client.prepareGet(url).execute { httpResponse ->
val channel: ByteReadChannel = httpResponse.body()
var result = byteArrayOf()
while (!channel.isClosedForRead) {
val packet = channel.readRemaining(4096)
while (!packet.isEmpty) {
val bytes = packet.readBytes()
result += bytes
println("Received ${result.size} bytes / ${httpResponse.contentLength()}")
}
}
result
}
}
val String.looksLikeAnImage: Boolean
get() {
val imageExtensions = listOf(".jpeg", ".jpg", ".png", ".webp")
return imageExtensions.any { this.endsWith(it) }
}

View File

@ -1,5 +0,0 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
expect object Log {
fun d(message: String)
}

View File

@ -3,4 +3,10 @@ package com.github.diegoberaldin.raccoonforlemmy.core.utils
expect object StringUtils {
fun String.isValidUrl(): Boolean
fun Int.toHexDigit(): String
}
}
val String.looksLikeAnImage: Boolean
get() {
val imageExtensions = listOf(".jpeg", ".jpg", ".png", ".webp")
return imageExtensions.any { this.endsWith(it) }
}

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.compose
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.compose
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.compose
import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.infiniteRepeatable

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime
expect object DateTime {
fun epochMillis(): Long

View File

@ -1,8 +1,10 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime
import androidx.compose.runtime.Composable
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
import dev.icerock.moko.resources.compose.stringResource
import kotlin.math.round
import kotlin.time.Duration
@Composable
fun String.prettifyDate(): String = let {
@ -52,4 +54,48 @@ fun String.prettifyDate(): String = let {
)
}
}
}
fun Duration.getPrettyDuration(
secondsLabel: String,
minutesLabel: String,
hoursLabel: String,
): String = when {
inWholeHours > 0 -> buildString {
append(inWholeHours)
append(hoursLabel)
val remainderMinutes = inWholeMinutes % 60
val remainderSeconds = inWholeSeconds % 60
if (remainderMinutes > 0 || remainderSeconds > 0) {
append(" ")
append(remainderMinutes)
append(minutesLabel)
}
if (remainderSeconds > 0) {
append(" ")
append(remainderSeconds)
append(secondsLabel)
}
}
inWholeMinutes > 0 -> buildString {
append(inWholeMinutes)
append(minutesLabel)
val remainderSeconds = inWholeSeconds % 60
if (remainderSeconds > 0) {
append(" ")
append(remainderSeconds)
append(secondsLabel)
}
}
else -> buildString {
val rounded = round((inWholeMilliseconds / 1000.0) * 10.0) / 10.0
if (rounded % 1 <= 0) {
append(rounded.toInt())
} else {
append(rounded)
}
append(secondsLabel)
}
}

View File

@ -0,0 +1,5 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
object AppInfo {
var versionCode = ""
}

View File

@ -0,0 +1,12 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
interface CrashReportConfiguration {
companion object {
const val PREFERENCES_NAME = "CrashReportPreferences"
}
fun isEnabled(): Boolean
fun setEnabled(value: Boolean)
}

View File

@ -0,0 +1,8 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
import org.koin.core.module.Module
expect val crashReportModule: Module
expect fun getCrashReportSender(): CrashReportSender
expect fun getCrashReportConfiguration(): CrashReportConfiguration

View File

@ -0,0 +1,9 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
interface CrashReportSender {
fun initialize()
fun setEnabled(value: Boolean)
fun sendFatalException(error: Throwable)
fun sendNonFatalException(error: Throwable)
fun log(message: String)
}

View File

@ -0,0 +1,5 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
interface CrashReportWriter {
fun write(reportText: String)
}

View File

@ -0,0 +1,5 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
expect object Log {
fun d(message: String)
}

View File

@ -1,7 +1,7 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.di
import com.github.diegoberaldin.raccoonforlemmy.core.utils.DefaultZombieModeHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.ZombieModeHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.zombiemode.DefaultZombieModeHelper
import com.github.diegoberaldin.raccoonforlemmy.core.utils.zombiemode.ZombieModeHelper
import org.koin.dsl.module
val utilsModule = module {

View File

@ -0,0 +1,31 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.gallery
import com.github.diegoberaldin.raccoonforlemmy.core.utils.network.provideHttpClientEngineFactory
import io.ktor.client.HttpClient
import io.ktor.client.call.body
import io.ktor.client.request.prepareGet
import io.ktor.http.contentLength
import io.ktor.utils.io.ByteReadChannel
import io.ktor.utils.io.core.isEmpty
import io.ktor.utils.io.core.readBytes
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import kotlinx.coroutines.withContext
suspend fun GalleryHelper.download(url: String): ByteArray = withContext(Dispatchers.IO) {
val factory = provideHttpClientEngineFactory()
val client = HttpClient(factory)
client.prepareGet(url).execute { httpResponse ->
val channel: ByteReadChannel = httpResponse.body()
var result = byteArrayOf()
while (!channel.isClosedForRead) {
val packet = channel.readRemaining(4096)
while (!packet.isEmpty) {
val bytes = packet.readBytes()
result += bytes
println("Received ${result.size} bytes / ${httpResponse.contentLength()}")
}
}
result
}
}

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.gallery
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.network
import io.ktor.client.engine.HttpClientEngineFactory

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.share
import androidx.compose.runtime.Stable
import org.koin.core.module.Module

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.vibrate
import org.koin.core.module.Module

View File

@ -1,10 +1,9 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.zombiemode
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.isActive
@ -12,18 +11,6 @@ import kotlinx.coroutines.launch
import kotlin.time.Duration
import kotlin.time.Duration.Companion.seconds
interface ZombieModeHelper {
val index: Flow<Int>
fun start(
initialValue: Int = 0,
interval: Duration = 2.5.seconds,
)
fun pause()
}
internal class DefaultZombieModeHelper : ZombieModeHelper {
private val scope = CoroutineScope(SupervisorJob())
override val index = MutableStateFlow(-1)
@ -45,4 +32,4 @@ internal class DefaultZombieModeHelper : ZombieModeHelper {
job?.cancel()
index.value = -1
}
}
}

View File

@ -0,0 +1,17 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.zombiemode
import kotlinx.coroutines.flow.Flow
import kotlin.time.Duration
import kotlin.time.Duration.Companion.seconds
interface ZombieModeHelper {
val index: Flow<Int>
fun start(
initialValue: Int = 0,
interval: Duration = 2.5.seconds,
)
fun pause()
}

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime
import platform.Foundation.NSCalendar
import platform.Foundation.NSCalendarIdentifierGregorian
@ -94,4 +94,4 @@ actual object DateTime {
private fun getDateFromIso8601Timestamp(string: String): NSDate? {
return NSISO8601DateFormatter().dateFromString(string)
}
}
}

View File

@ -0,0 +1,26 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import org.koin.dsl.module
actual val crashReportModule = module {
single<CrashReportConfiguration> {
DefaultCrashReportConfiguration()
}
single<CrashReportWriter> {
DefaultCrashReportWriter()
}
single<CrashReportSender> {
DefaultCrashReportSender()
}
}
actual fun getCrashReportSender(): CrashReportSender = CrashReportDiHelper.crashReportSender
actual fun getCrashReportConfiguration(): CrashReportConfiguration =
CrashReportDiHelper.crashReportConfiguration
internal object CrashReportDiHelper : KoinComponent {
val crashReportSender: CrashReportSender by inject()
val crashReportConfiguration: CrashReportConfiguration by inject()
}

View File

@ -0,0 +1,18 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
import platform.Foundation.NSUserDefaults
class DefaultCrashReportConfiguration(
) : CrashReportConfiguration {
companion object {
const val KEY = "crashReportEnabled"
}
override fun isEnabled(): Boolean =
NSUserDefaults.standardUserDefaults.boolForKey(KEY)
override fun setEnabled(value: Boolean) {
NSUserDefaults.standardUserDefaults.setBool(value, KEY)
}
}

View File

@ -0,0 +1,37 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
import co.touchlab.crashkios.crashlytics.CrashlyticsKotlin
import co.touchlab.crashkios.crashlytics.enableCrashlytics
import co.touchlab.crashkios.crashlytics.setCrashlyticsUnhandledExceptionHook
class DefaultCrashReportSender : CrashReportSender {
private var enabled = false
override fun initialize() {
enableCrashlytics()
setCrashlyticsUnhandledExceptionHook()
}
override fun setEnabled(value: Boolean) {
enabled = value
}
override fun sendFatalException(error: Throwable) {
if (enabled) {
CrashlyticsKotlin.sendFatalException(error)
}
}
override fun sendNonFatalException(error: Throwable) {
if (enabled) {
CrashlyticsKotlin.sendHandledException(error)
}
}
override fun log(message: String) {
if (enabled) {
CrashlyticsKotlin.logMessage(message)
}
}
}

View File

@ -1,32 +1,15 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
import org.koin.dsl.module
import platform.Foundation.NSCachesDirectory
import platform.Foundation.NSFileManager
import platform.Foundation.NSSearchPathForDirectoriesInDomains
import platform.Foundation.NSString
import platform.Foundation.NSUTF8StringEncoding
import platform.Foundation.NSUserDefaults
import platform.Foundation.NSUserDomainMask
import platform.Foundation.create
import platform.Foundation.dataUsingEncoding
import platform.Foundation.stringByAppendingPathComponent
class DefaultCrashReportConfiguration(
) : CrashReportConfiguration {
companion object {
const val KEY = "crashReportEnabled"
}
override fun isEnabled(): Boolean =
NSUserDefaults.standardUserDefaults.boolForKey(KEY)
override fun setEnabled(value: Boolean) {
NSUserDefaults.standardUserDefaults.setBool(value, KEY)
}
}
class DefaultCrashReportWriter : CrashReportWriter {
companion object {
@ -40,12 +23,3 @@ class DefaultCrashReportWriter : CrashReportWriter {
NSFileManager.defaultManager.createFileAtPath(file, data, null)
}
}
actual val crashReportModule = module {
single<CrashReportConfiguration> {
DefaultCrashReportConfiguration()
}
single<CrashReportWriter> {
DefaultCrashReportWriter()
}
}

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.debug
import platform.Foundation.NSLog

View File

@ -1,6 +1,6 @@
@file:OptIn(ExperimentalForeignApi::class)
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.gallery
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.network
import io.ktor.client.engine.HttpClientEngineFactory
import io.ktor.client.engine.cio.CIO

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.share
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject

View File

@ -1,4 +1,4 @@
package com.github.diegoberaldin.raccoonforlemmy.core.utils
package com.github.diegoberaldin.raccoonforlemmy.core.utils.vibrate
import org.koin.dsl.module
import platform.UIKit.UIImpactFeedbackGenerator

View File

@ -3,7 +3,7 @@ package com.github.diegoberaldin.raccoonforlemmy.domain.identity.usecase
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.AccountModel
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.AccountRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.Log
import com.github.diegoberaldin.raccoonforlemmy.core.utils.debug.Log
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.ApiConfigurationRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.AuthRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.IdentityRepository

View File

@ -80,8 +80,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.userdetail.UserDet
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterContractKeys
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.di.getSettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.rememberCallbackArgs
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.ListingType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType

Some files were not shown because too many files have changed in this diff Show More