From 6fa13bcf5f2decff8a0624c8522890b02b301ef3 Mon Sep 17 00:00:00 2001 From: Diego Beraldin Date: Fri, 22 Dec 2023 13:48:34 +0100 Subject: [PATCH] feat: add block to post list; closes #339 (#343) --- .../core/commonui/lemmyui/BlockActionType.kt | 24 +++ core/commonui/modals/build.gradle.kts | 3 + .../core/commonui/modals/BlockBottomSheet.kt | 145 ++++++++++++++++++ .../notifications/NotificationCenterEvent.kt | 5 + .../commonMain/resources/MR/ar/strings.xml | 2 + .../commonMain/resources/MR/base/strings.xml | 2 + .../commonMain/resources/MR/bg/strings.xml | 2 + .../commonMain/resources/MR/cs/strings.xml | 2 + .../commonMain/resources/MR/da/strings.xml | 2 + .../commonMain/resources/MR/de/strings.xml | 2 + .../commonMain/resources/MR/el/strings.xml | 4 +- .../commonMain/resources/MR/eo/strings.xml | 2 + .../commonMain/resources/MR/es/strings.xml | 2 + .../commonMain/resources/MR/et/strings.xml | 2 + .../commonMain/resources/MR/fi/strings.xml | 2 + .../commonMain/resources/MR/fr/strings.xml | 2 + .../commonMain/resources/MR/ga/strings.xml | 2 + .../commonMain/resources/MR/hr/strings.xml | 2 + .../commonMain/resources/MR/hu/strings.xml | 2 + .../commonMain/resources/MR/it/strings.xml | 2 + .../commonMain/resources/MR/lt/strings.xml | 2 + .../commonMain/resources/MR/lv/strings.xml | 2 + .../commonMain/resources/MR/mt/strings.xml | 2 + .../commonMain/resources/MR/nl/strings.xml | 2 + .../commonMain/resources/MR/no/strings.xml | 2 + .../commonMain/resources/MR/pl/strings.xml | 4 +- .../commonMain/resources/MR/pt/strings.xml | 2 + .../commonMain/resources/MR/ro/strings.xml | 2 + .../commonMain/resources/MR/ru/strings.xml | 4 +- .../commonMain/resources/MR/se/strings.xml | 2 + .../commonMain/resources/MR/sk/strings.xml | 2 + .../commonMain/resources/MR/sl/strings.xml | 2 + .../commonMain/resources/MR/sq/strings.xml | 2 + .../commonMain/resources/MR/tr/strings.xml | 2 + .../commonMain/resources/MR/uk/strings.xml | 2 + .../unit/postlist/PostListScreen.kt | 65 ++++++-- .../unit/postlist/PostListViewModel.kt | 57 ++++++- .../unit/postlist/di/PostListModule.kt | 2 + 38 files changed, 347 insertions(+), 22 deletions(-) create mode 100644 core/commonui/lemmyui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/lemmyui/BlockActionType.kt create mode 100644 core/commonui/modals/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/modals/BlockBottomSheet.kt diff --git a/core/commonui/lemmyui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/lemmyui/BlockActionType.kt b/core/commonui/lemmyui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/lemmyui/BlockActionType.kt new file mode 100644 index 000000000..3a131cb1e --- /dev/null +++ b/core/commonui/lemmyui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/lemmyui/BlockActionType.kt @@ -0,0 +1,24 @@ +package com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui + +import androidx.compose.runtime.Composable +import com.github.diegoberaldin.raccoonforlemmy.resources.MR +import dev.icerock.moko.resources.compose.stringResource + +sealed interface BlockActionType { + data object User : BlockActionType + data object Community : BlockActionType + data object Instance : BlockActionType +} + +fun Int.toBlockActionType(): BlockActionType = when (this) { + 2 -> BlockActionType.Instance + 1 -> BlockActionType.Community + else -> BlockActionType.User +} + +@Composable +fun BlockActionType.toReadableName(): String = when (this) { + BlockActionType.Community -> stringResource(MR.strings.block_action_community) + BlockActionType.Instance -> stringResource(MR.strings.community_detail_block_instance) + BlockActionType.User -> stringResource(MR.strings.block_action_user) +} \ No newline at end of file diff --git a/core/commonui/modals/build.gradle.kts b/core/commonui/modals/build.gradle.kts index 82e782830..cc5a6d235 100644 --- a/core/commonui/modals/build.gradle.kts +++ b/core/commonui/modals/build.gradle.kts @@ -43,10 +43,13 @@ kotlin { implementation(projects.core.utils) implementation(projects.core.appearance) implementation(projects.core.commonui.components) + implementation(projects.core.commonui.lemmyui) implementation(projects.core.navigation) implementation(projects.core.persistence) implementation(projects.core.notifications) + implementation(projects.domain.lemmy.data) + implementation(projects.resources) } } diff --git a/core/commonui/modals/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/modals/BlockBottomSheet.kt b/core/commonui/modals/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/modals/BlockBottomSheet.kt new file mode 100644 index 000000000..02c96e5a8 --- /dev/null +++ b/core/commonui/modals/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/modals/BlockBottomSheet.kt @@ -0,0 +1,145 @@ +package com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import cafe.adriel.voyager.core.screen.Screen +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.lemmyui.BlockActionType +import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.toReadableName +import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getNavigationCoordinator +import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterEvent +import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter +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 + +class BlockBottomSheet( + private val userName: String? = null, + private val userId: Int? = null, + private val communityName: String? = null, + private val communityId: Int? = null, + private val instanceName: String? = null, + private val instanceId: Int? = null, + private val userInstanceName: String? = null, + private val userInstanceId: Int? = null, +) : Screen { + + @Composable + override fun Content() { + val navigationCoordinator = remember { getNavigationCoordinator() } + val notificationCenter = remember { getNotificationCenter() } + + Column( + modifier = Modifier.padding( + top = Spacing.s, + start = Spacing.s, + end = Spacing.s, + bottom = Spacing.m, + ), + verticalArrangement = Arrangement.spacedBy(Spacing.s), + ) { + Column( + horizontalAlignment = Alignment.CenterHorizontally + ) { + BottomSheetHandle() + Text( + modifier = Modifier.padding(start = Spacing.s, top = Spacing.s), + text = stringResource(MR.strings.community_detail_block), + style = MaterialTheme.typography.titleLarge, + color = MaterialTheme.colorScheme.onBackground, + ) + Column( + modifier = Modifier.fillMaxWidth().verticalScroll(rememberScrollState()), + verticalArrangement = Arrangement.spacedBy(Spacing.xxxs), + ) { + val values: List> = buildList { + if (userName != null && userId != null) { + this += Triple( + BlockActionType.User, + userId, + userName, + ) + } + if (communityName != null && communityId != null) { + this += Triple( + BlockActionType.Community, + communityId, + communityName, + ) + } + if (instanceName != null && instanceId != null) { + this += Triple( + BlockActionType.Instance, + instanceId, + instanceName, + ) + } + if (userInstanceName != null && userInstanceId != null && userInstanceName != instanceName) { + this += Triple( + BlockActionType.Instance, + userInstanceId, + userInstanceName, + ) + } + } + for (value in values) { + Row( + modifier = Modifier.padding( + horizontal = Spacing.s, + vertical = Spacing.m, + ).fillMaxWidth().onClick( + onClick = rememberCallback { + val event = when (value.first) { + BlockActionType.Community -> NotificationCenterEvent.BlockActionSelected( + communityId = value.second + ) + + BlockActionType.Instance -> + NotificationCenterEvent.BlockActionSelected( + instanceId = value.second + ) + + BlockActionType.User -> NotificationCenterEvent.BlockActionSelected( + userId = value.second + ) + } + notificationCenter.send(event) + navigationCoordinator.hideBottomSheet() + }, + ), + ) { + val valueText = buildString { + append(value.first.toReadableName()) + val additionalText = value.third + if (additionalText.isNotEmpty()) { + append("\n") + append("(") + append(additionalText) + append(")") + } + } + Text( + text = valueText, + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onBackground, + ) + } + } + } + } + } + } +} diff --git a/core/notifications/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/notifications/NotificationCenterEvent.kt b/core/notifications/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/notifications/NotificationCenterEvent.kt index bd0a46818..f556581dd 100644 --- a/core/notifications/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/notifications/NotificationCenterEvent.kt +++ b/core/notifications/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/notifications/NotificationCenterEvent.kt @@ -53,4 +53,9 @@ sealed interface NotificationCenterEvent { data class UserBannedPost(val postId: Int, val user: UserModel) : NotificationCenterEvent data class UserBannedComment(val commentId: Int, val user: UserModel) : NotificationCenterEvent data class ChangeCommentBarTheme(val value: CommentBarTheme) : NotificationCenterEvent + data class BlockActionSelected( + val userId: Int? = null, + val communityId: Int? = null, + val instanceId: Int? = null, + ) : NotificationCenterEvent } diff --git a/resources/src/commonMain/resources/MR/ar/strings.xml b/resources/src/commonMain/resources/MR/ar/strings.xml index 7e18dea88..3fa9cfab8 100644 --- a/resources/src/commonMain/resources/MR/ar/strings.xml +++ b/resources/src/commonMain/resources/MR/ar/strings.xml @@ -278,4 +278,6 @@ تمت إزالته من التعليقات تمت استعادته في تعليقات تم نقل المجتمع إلى + مستخدم محضور + منع المجتمع \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/base/strings.xml b/resources/src/commonMain/resources/MR/base/strings.xml index d0f941cc9..07d0b5b2c 100755 --- a/resources/src/commonMain/resources/MR/base/strings.xml +++ b/resources/src/commonMain/resources/MR/base/strings.xml @@ -309,4 +309,6 @@ was removed from the comments of was restored in the comments of the community was transferred to + Block user + Block community \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/bg/strings.xml b/resources/src/commonMain/resources/MR/bg/strings.xml index e987acce4..f3a8792d2 100644 --- a/resources/src/commonMain/resources/MR/bg/strings.xml +++ b/resources/src/commonMain/resources/MR/bg/strings.xml @@ -289,4 +289,6 @@ беше премахнат от коментарите на беше възстановено в коментарите на общността беше прехвърлена на + Блокиране на потребител + Блокиране на общността \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/cs/strings.xml b/resources/src/commonMain/resources/MR/cs/strings.xml index 0ab5eb707..7a040e407 100644 --- a/resources/src/commonMain/resources/MR/cs/strings.xml +++ b/resources/src/commonMain/resources/MR/cs/strings.xml @@ -280,4 +280,6 @@ byl odstraněn z komentářů uživatele byl obnoven v komentářích komunita byla převedena do + Blokovat uživatele + Blokovat komunitu \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/da/strings.xml b/resources/src/commonMain/resources/MR/da/strings.xml index 0b4ee13fb..4a6b700a1 100644 --- a/resources/src/commonMain/resources/MR/da/strings.xml +++ b/resources/src/commonMain/resources/MR/da/strings.xml @@ -280,4 +280,6 @@ blev fjernet fra kommentarerne til blev gendannet i kommentarerne til samfundet blev overført til + Bloker bruger + Bloker fællesskabet \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/de/strings.xml b/resources/src/commonMain/resources/MR/de/strings.xml index 05e33d922..16c0c01b1 100755 --- a/resources/src/commonMain/resources/MR/de/strings.xml +++ b/resources/src/commonMain/resources/MR/de/strings.xml @@ -288,4 +288,6 @@ wurde in den Kommentaren von wiederhergestellt die Gemeinde wurde übertragen + Benutzer blockieren + Community blockieren \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/el/strings.xml b/resources/src/commonMain/resources/MR/el/strings.xml index fe625d773..9307ac196 100644 --- a/resources/src/commonMain/resources/MR/el/strings.xml +++ b/resources/src/commonMain/resources/MR/el/strings.xml @@ -14,7 +14,7 @@ Προσπάθησε ξανά Διάγραψε Απόκλεισε - Απόκλεισε διακομιστή + Αποκλεισμός διακομιστή Πληροφορίες κοινότητας Πληροφορίες διακομιστή σχόλια @@ -290,4 +290,6 @@ αφαιρέθηκε από τα σχόλια του αποκαταστάθηκε στα σχόλια του η κοινότητα μεταφέρθηκε σε + Αποκλεισμός χρήστη + Αποκλεισμός κοινότητας \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/eo/strings.xml b/resources/src/commonMain/resources/MR/eo/strings.xml index 8751349ca..f39b64f91 100644 --- a/resources/src/commonMain/resources/MR/eo/strings.xml +++ b/resources/src/commonMain/resources/MR/eo/strings.xml @@ -279,4 +279,6 @@ estis forigita de la komentoj de estis restarigita en la komentoj de la komunumo estis translokigita al + Bloki uzanton + Bloki komunumon \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/es/strings.xml b/resources/src/commonMain/resources/MR/es/strings.xml index 9479c296e..c2d6ba4fe 100755 --- a/resources/src/commonMain/resources/MR/es/strings.xml +++ b/resources/src/commonMain/resources/MR/es/strings.xml @@ -286,4 +286,6 @@ se removió de los comentarios de se restauró en los comentarios de la comunidad se trasladó a + Bloquear usuario + Bloquear comunidad \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/et/strings.xml b/resources/src/commonMain/resources/MR/et/strings.xml index f0684381f..fa80611ac 100644 --- a/resources/src/commonMain/resources/MR/et/strings.xml +++ b/resources/src/commonMain/resources/MR/et/strings.xml @@ -280,4 +280,6 @@ eemaldati kasutaja kommentaaridest aasta kommentaarides taastati kogukond viidi üle + Blokeeri kasutaja + Blokeeri kogukond \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/fi/strings.xml b/resources/src/commonMain/resources/MR/fi/strings.xml index 4312f7383..960b8e7a2 100644 --- a/resources/src/commonMain/resources/MR/fi/strings.xml +++ b/resources/src/commonMain/resources/MR/fi/strings.xml @@ -280,4 +280,6 @@ poistettiin kommenteista palautettiin kommenteissa yhteisö siirrettiin + Estä käyttäjä + Estä yhteisö \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/fr/strings.xml b/resources/src/commonMain/resources/MR/fr/strings.xml index a5d9b1d6d..ea0710cd9 100755 --- a/resources/src/commonMain/resources/MR/fr/strings.xml +++ b/resources/src/commonMain/resources/MR/fr/strings.xml @@ -286,4 +286,6 @@ a été supprimé des commentaires de a été restauré dans les commentaires de la communauté a été transférée à + Bloquer l\'utilisateur + Bloquer la communauté \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/ga/strings.xml b/resources/src/commonMain/resources/MR/ga/strings.xml index 199121b8f..412c180ed 100644 --- a/resources/src/commonMain/resources/MR/ga/strings.xml +++ b/resources/src/commonMain/resources/MR/ga/strings.xml @@ -289,4 +289,6 @@ baineadh de thuairimí ó a athchóiriú i dtuairimí ó aistríodh an pobal go + Cuir bac ar úsáideoir + Bloc pobail \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/hr/strings.xml b/resources/src/commonMain/resources/MR/hr/strings.xml index 9306b3187..aeb61f8f9 100644 --- a/resources/src/commonMain/resources/MR/hr/strings.xml +++ b/resources/src/commonMain/resources/MR/hr/strings.xml @@ -285,4 +285,6 @@ uklonjen je iz komentara korisnika vraćeno je u komentarima zajednica je prebačena u + Blokirati korisnika + Blokiraj zajednicu \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/hu/strings.xml b/resources/src/commonMain/resources/MR/hu/strings.xml index 94745e7f6..fba3ca849 100644 --- a/resources/src/commonMain/resources/MR/hu/strings.xml +++ b/resources/src/commonMain/resources/MR/hu/strings.xml @@ -284,4 +284,6 @@ eltávolítva a megjegyzései közül megjegyzésében helyreállították a közösség átkerült + Felhasználó letiltása + Közösség letiltása \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/it/strings.xml b/resources/src/commonMain/resources/MR/it/strings.xml index 6b035927a..a2dfc0446 100755 --- a/resources/src/commonMain/resources/MR/it/strings.xml +++ b/resources/src/commonMain/resources/MR/it/strings.xml @@ -284,4 +284,6 @@ è stato rimosso dai commenti di è stato ripristinato nei commenti dif la comunità è stata trasferita a + Blocca utente + Blocca comunità \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/lt/strings.xml b/resources/src/commonMain/resources/MR/lt/strings.xml index 23f7aa10a..07d3ae189 100644 --- a/resources/src/commonMain/resources/MR/lt/strings.xml +++ b/resources/src/commonMain/resources/MR/lt/strings.xml @@ -283,4 +283,6 @@ buvo pašalintas iš komentarų buvo atkurta komentaruose bendruomenė buvo perduota + Blokuoti vartotoją + Blokuoti bendruomenę \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/lv/strings.xml b/resources/src/commonMain/resources/MR/lv/strings.xml index df90a8628..92ac6efff 100644 --- a/resources/src/commonMain/resources/MR/lv/strings.xml +++ b/resources/src/commonMain/resources/MR/lv/strings.xml @@ -284,4 +284,6 @@ tika noņemts no komentāriem gada komentāros tika atjaunots kopiena tika pārcelta uz + Bloķēt lietotāju + Bloķēt kopienu \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/mt/strings.xml b/resources/src/commonMain/resources/MR/mt/strings.xml index 367545875..426ee250b 100644 --- a/resources/src/commonMain/resources/MR/mt/strings.xml +++ b/resources/src/commonMain/resources/MR/mt/strings.xml @@ -285,4 +285,6 @@ tneħħa mill-kummenti ta ġie restawrat fil-kummenti ta il-komunità ġiet trasferita + Blokk utent + Blokk komunità \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/nl/strings.xml b/resources/src/commonMain/resources/MR/nl/strings.xml index 434ecc8fb..40ede828d 100644 --- a/resources/src/commonMain/resources/MR/nl/strings.xml +++ b/resources/src/commonMain/resources/MR/nl/strings.xml @@ -284,4 +284,6 @@ werd verwijderd uit de reacties van werd hersteld in de opmerkingen van de gemeenschap werd overgedragen + Blokkeer gebruiker + Blokkeer gemeenschap \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/no/strings.xml b/resources/src/commonMain/resources/MR/no/strings.xml index 90ff20109..4dd5de108 100644 --- a/resources/src/commonMain/resources/MR/no/strings.xml +++ b/resources/src/commonMain/resources/MR/no/strings.xml @@ -283,4 +283,6 @@ ble fjernet fra kommentarene til ble gjenopprettet i kommentarene til fellesskapet ble overført til + Blokker bruker + Blokker fellesskapet \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/pl/strings.xml b/resources/src/commonMain/resources/MR/pl/strings.xml index 20e8f41ef..6baaec524 100644 --- a/resources/src/commonMain/resources/MR/pl/strings.xml +++ b/resources/src/commonMain/resources/MR/pl/strings.xml @@ -14,7 +14,7 @@ Próba Usunąć Blok - Instancja bloku + Zablokui instancję Informacje o społeczności Szczegóły instancji Komentarze @@ -283,4 +283,6 @@ został usunięty z komentarzy został przywrócony w komentarzach gmina została przeniesiona + Zablokuj użytkownika + Zablokuj społeczność \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/pt/strings.xml b/resources/src/commonMain/resources/MR/pt/strings.xml index 624f11e09..be1f23d49 100755 --- a/resources/src/commonMain/resources/MR/pt/strings.xml +++ b/resources/src/commonMain/resources/MR/pt/strings.xml @@ -283,4 +283,6 @@ foi removido dos comentários de foi restaurado nos comentários de a comunidade foi transferida para + Bloquear usuário + Bloquear comunidade \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/ro/strings.xml b/resources/src/commonMain/resources/MR/ro/strings.xml index 30b0888bf..9c213ba01 100755 --- a/resources/src/commonMain/resources/MR/ro/strings.xml +++ b/resources/src/commonMain/resources/MR/ro/strings.xml @@ -281,4 +281,6 @@ a fost eliminat din comentariile de a fost restaurat în comentariile de comunitatea a fost transferată la + Blochează utilizatorul + Blochează comunitatea \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/ru/strings.xml b/resources/src/commonMain/resources/MR/ru/strings.xml index 4491978bc..037bb550c 100644 --- a/resources/src/commonMain/resources/MR/ru/strings.xml +++ b/resources/src/commonMain/resources/MR/ru/strings.xml @@ -13,7 +13,7 @@ Повторить Удалить Блок - Экземпляр блока + Заблокировать экземпляр Информация о микрорайоне Сведения об экземпляре Комментарии @@ -284,4 +284,6 @@ удалили из комментариев восстановлено в комментариях община была переведена в + Заблокировать пользователя + Заблокировать сообщество \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/se/strings.xml b/resources/src/commonMain/resources/MR/se/strings.xml index 5c0bf2b64..73d2be5ea 100644 --- a/resources/src/commonMain/resources/MR/se/strings.xml +++ b/resources/src/commonMain/resources/MR/se/strings.xml @@ -281,4 +281,6 @@ togs bort från kommentarerna till återställdes i kommentarerna till samhället överfördes till + Blockera användare + Blockera gemenskap \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/sk/strings.xml b/resources/src/commonMain/resources/MR/sk/strings.xml index d7feef9b0..664d32c97 100644 --- a/resources/src/commonMain/resources/MR/sk/strings.xml +++ b/resources/src/commonMain/resources/MR/sk/strings.xml @@ -282,4 +282,6 @@ bol odstránený z komentárov používateľa bol obnovený v komentároch o komunita bola prevedená na + Blokovať používateľa + Blokovať komunitu \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/sl/strings.xml b/resources/src/commonMain/resources/MR/sl/strings.xml index 146a0a1c9..71377c662 100644 --- a/resources/src/commonMain/resources/MR/sl/strings.xml +++ b/resources/src/commonMain/resources/MR/sl/strings.xml @@ -280,4 +280,6 @@ je bil odstranjen iz komentarjev osebe je bil obnovljen v komentarjih skupnost je bila prenesena na + Blokiraj uporabnika + Blokiraj skupnost \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/sq/strings.xml b/resources/src/commonMain/resources/MR/sq/strings.xml index f4eb5a62b..73c21cb43 100644 --- a/resources/src/commonMain/resources/MR/sq/strings.xml +++ b/resources/src/commonMain/resources/MR/sq/strings.xml @@ -286,4 +286,6 @@ u hoq nga komentet e u rivendos në komentet e komuniteti u transferua në + Blloko përdoruesin + Blloko komunitetin \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/tr/strings.xml b/resources/src/commonMain/resources/MR/tr/strings.xml index 18c683325..93eaa7ff5 100644 --- a/resources/src/commonMain/resources/MR/tr/strings.xml +++ b/resources/src/commonMain/resources/MR/tr/strings.xml @@ -283,4 +283,6 @@ yorumlarından kaldırıldı yorumlarında geri yüklendi topluluk şuraya transfer edildi + Kullanıcıyı engelle + Topluluğu engelle \ No newline at end of file diff --git a/resources/src/commonMain/resources/MR/uk/strings.xml b/resources/src/commonMain/resources/MR/uk/strings.xml index 35eb79aa8..ff758fbd5 100644 --- a/resources/src/commonMain/resources/MR/uk/strings.xml +++ b/resources/src/commonMain/resources/MR/uk/strings.xml @@ -283,4 +283,6 @@ було видалено з коментарів користувача було відновлено в коментарях громаду було передано с + Заблокувати користувача + Заблокувати спільноту \ No newline at end of file diff --git a/unit/postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListScreen.kt b/unit/postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListScreen.kt index b3b11d30a..a151bb193 100644 --- a/unit/postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListScreen.kt +++ b/unit/postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListScreen.kt @@ -66,6 +66,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.OptionId import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.PostCard import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.PostCardPlaceholder import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.di.getFabNestedScrollConnection +import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.BlockBottomSheet import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.ListingTypeBottomSheet import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.RawContentDialog import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.SortBottomSheet @@ -421,49 +422,55 @@ class PostListScreen : Screen { add( Option( OptionId.Share, - stringResource(MR.strings.post_action_share) - ) + stringResource(MR.strings.post_action_share), + ), ) if (uiState.isLogged) { add( Option( OptionId.Hide, - stringResource(MR.strings.post_action_hide) - ) + stringResource(MR.strings.post_action_hide), + ), + ) + add( + Option( + OptionId.Block, + stringResource(MR.strings.community_detail_block), + ), ) } add( Option( OptionId.SeeRaw, - stringResource(MR.strings.post_action_see_raw) - ) + stringResource(MR.strings.post_action_see_raw), + ), ) if (uiState.isLogged) { add( Option( OptionId.CrossPost, - stringResource(MR.strings.post_action_cross_post) - ) + stringResource(MR.strings.post_action_cross_post), + ), ) add( Option( OptionId.Report, - stringResource(MR.strings.post_action_report) - ) + stringResource(MR.strings.post_action_report), + ), ) } if (post.creator?.id == uiState.currentUserId) { add( Option( OptionId.Edit, - stringResource(MR.strings.post_action_edit) - ) + stringResource(MR.strings.post_action_edit), + ), ) add( Option( OptionId.Delete, - stringResource(MR.strings.comment_action_delete) - ) + stringResource(MR.strings.comment_action_delete), + ), ) } }, @@ -511,6 +518,36 @@ class PostListScreen : Screen { PostListMviModel.Intent.SharePost(post.id) ) + OptionId.Block -> { + val screen = BlockBottomSheet( + userName = buildString { + post.creator?.also { + append(it.name) + if (it.host.isNotEmpty()) { + append("@") + append(it.host) + } + } + }, + userId = post.creator?.id, + communityName = buildString { + post.community?.also { + append(it.name) + if (it.host.isNotEmpty()) { + append("@") + append(it.host) + } + } + }, + communityId = post.community?.id, + instanceName = post.community?.host, + instanceId = post.community?.instanceId, + userInstanceName = post.creator?.host, + userInstanceId = post.creator?.instanceId, + ) + navigationCoordinator.showBottomSheet(screen) + } + else -> Unit } } diff --git a/unit/postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListViewModel.kt b/unit/postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListViewModel.kt index a9f7c4180..c3dbca534 100644 --- a/unit/postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListViewModel.kt +++ b/unit/postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListViewModel.kt @@ -19,9 +19,11 @@ import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.imageUrl import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toListingType import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toSortType +import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.CommunityRepository import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.GetSortTypesUseCase import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.PostRepository import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.SiteRepository +import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.UserRepository import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO import kotlinx.coroutines.flow.drop @@ -38,6 +40,8 @@ class PostListViewModel( private val themeRepository: ThemeRepository, private val shareHelper: ShareHelper, private val settingsRepository: SettingsRepository, + private val userRepository: UserRepository, + private val communityRepository: CommunityRepository, private val notificationCenter: NotificationCenter, private val hapticFeedback: HapticFeedback, private val zombieModeHelper: ZombieModeHelper, @@ -89,6 +93,7 @@ class PostListViewModel( ) } }.launchIn(this) + notificationCenter.subscribe(NotificationCenterEvent.PostUpdated::class) .onEach { evt -> handlePostUpdate(evt.model) @@ -101,11 +106,24 @@ class PostListViewModel( .onEach { evt -> applyListingType(evt.value) }.launchIn(this) - notificationCenter.subscribe(NotificationCenterEvent.ChangeSortType::class) .onEach { evt -> applySortType(evt.value) }.launchIn(this) + notificationCenter.subscribe(NotificationCenterEvent.Logout::class).onEach { + handleLogout() + }.launchIn(this) + notificationCenter.subscribe(NotificationCenterEvent.BlockActionSelected::class) + .onEach { evt -> + val userId = evt.userId + val communityId = evt.communityId + val instanceId = evt.instanceId + when { + userId != null -> blockUser(userId) + communityId != null -> blockCommunity(communityId) + instanceId != null -> blockInstance(instanceId) + } + }.launchIn(this) zombieModeHelper.index.onEach { index -> if (uiState.value.zombieModeActive) { @@ -113,10 +131,6 @@ class PostListViewModel( } }.launchIn(this) - notificationCenter.subscribe(NotificationCenterEvent.Logout::class).onEach { - handleLogout() - }.launchIn(this) - val auth = identityRepository.authToken.value.orEmpty() val user = siteRepository.getCurrentUser(auth) mvi.updateState { it.copy(currentUserId = user?.id ?: 0) } @@ -475,4 +489,37 @@ class PostListViewModel( } markAsRead(post) } + + private fun blockUser(userId: Int) { + mvi.scope?.launch(Dispatchers.IO) { + try { + val auth = identityRepository.authToken.value + userRepository.block(userId, true, auth).getOrThrow() + } catch (e: Throwable) { + e.printStackTrace() + } + } + } + + private fun blockCommunity(communityId: Int) { + mvi.scope?.launch(Dispatchers.IO) { + try { + val auth = identityRepository.authToken.value + communityRepository.block(communityId, true, auth).getOrThrow() + } catch (e: Throwable) { + e.printStackTrace() + } + } + } + + private fun blockInstance(instanceId: Int) { + mvi.scope?.launch(Dispatchers.IO) { + try { + val auth = identityRepository.authToken.value + siteRepository.block(instanceId, true, auth) + } catch (e: Throwable) { + e.printStackTrace() + } + } + } } diff --git a/unit/postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/PostListModule.kt b/unit/postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/PostListModule.kt index bdf060efb..cb089a357 100644 --- a/unit/postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/PostListModule.kt +++ b/unit/postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/PostListModule.kt @@ -15,6 +15,8 @@ val postListModule = module { siteRepository = get(), themeRepository = get(), settingsRepository = get(), + userRepository = get(), + communityRepository = get(), shareHelper = get(), notificationCenter = get(), hapticFeedback = get(),