diff --git a/core/commonui/detailopener-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/detailopener/api/DetailOpener.kt b/core/commonui/detailopener-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/detailopener/api/DetailOpener.kt
index 8dbdf99b9..95410f14a 100644
--- a/core/commonui/detailopener-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/detailopener/api/DetailOpener.kt
+++ b/core/commonui/detailopener-api/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/detailopener/api/DetailOpener.kt
@@ -27,7 +27,7 @@ interface DetailOpener {
fun openReply(
draftId: Long? = null,
- originalPost: PostModel? = null,
+ originalPost: PostModel,
originalComment: CommentModel? = null,
editedComment: CommentModel? = null,
initialText: String? = null,
diff --git a/core/commonui/detailopener-impl/src/androidUnitTest/kotlin/DefaultDetailOpenerTest.kt b/core/commonui/detailopener-impl/src/androidUnitTest/kotlin/DefaultDetailOpenerTest.kt
index a0b47a39c..2728074cc 100644
--- a/core/commonui/detailopener-impl/src/androidUnitTest/kotlin/DefaultDetailOpenerTest.kt
+++ b/core/commonui/detailopener-impl/src/androidUnitTest/kotlin/DefaultDetailOpenerTest.kt
@@ -185,7 +185,7 @@ class DefaultDetailOpenerTest {
val comment = CommentModel(text = "test", id = 1)
launch {
- sut.openReply(originalComment = comment)
+ sut.openReply(originalComment = comment, originalPost = PostModel(id = 0))
}
advanceTimeBy(OPEN_DELAY)
diff --git a/core/commonui/detailopener-impl/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/detailopener/impl/DefaultDetailOpener.kt b/core/commonui/detailopener-impl/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/detailopener/impl/DefaultDetailOpener.kt
index 1759ccde5..4d362910c 100644
--- a/core/commonui/detailopener-impl/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/detailopener/impl/DefaultDetailOpener.kt
+++ b/core/commonui/detailopener-impl/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/detailopener/impl/DefaultDetailOpener.kt
@@ -102,16 +102,14 @@ class DefaultDetailOpener(
override fun openReply(
draftId: Long?,
- originalPost: PostModel?,
+ originalPost: PostModel,
originalComment: CommentModel?,
editedComment: CommentModel?,
initialText: String?,
) {
scope.launch {
withContext(Dispatchers.IO) {
- if (originalPost != null) {
- itemCache.putPost(originalPost)
- }
+ itemCache.putPost(originalPost)
if (originalComment != null) {
itemCache.putComment(originalComment)
}
@@ -122,7 +120,7 @@ class DefaultDetailOpener(
val screen =
CreateCommentScreen(
draftId = draftId,
- originalPostId = originalPost?.id,
+ originalPostId = originalPost.id,
originalCommentId = originalComment?.id,
editedCommentId = editedComment?.id,
initialText = initialText,
diff --git a/core/commonui/lemmyui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/lemmyui/Options.kt b/core/commonui/lemmyui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/lemmyui/Options.kt
index 666b4e8f3..468e4f76d 100644
--- a/core/commonui/lemmyui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/lemmyui/Options.kt
+++ b/core/commonui/lemmyui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/lemmyui/Options.kt
@@ -30,6 +30,8 @@ sealed class OptionId(val value: Int) {
data object AdminFeaturePost : OptionId(11)
+ data object SetPreferredLanguage : OptionId(12)
+
data object FeaturePost : OptionId(13)
data object LockPost : OptionId(14)
diff --git a/core/l10n/src/androidMain/res/values-ar/strings.xml b/core/l10n/src/androidMain/res/values-ar/strings.xml
index 0e9421cc3..ff321ca88 100644
--- a/core/l10n/src/androidMain/res/values-ar/strings.xml
+++ b/core/l10n/src/androidMain/res/values-ar/strings.xml
@@ -398,4 +398,5 @@
تطهير
وضع علامة مميزة (مثال)
إلغاء تحديد علامة مميزة (مثال)
+ تعيين اللغة المفضلة
diff --git a/core/l10n/src/androidMain/res/values-bg/strings.xml b/core/l10n/src/androidMain/res/values-bg/strings.xml
index e6cef72c6..def56f310 100644
--- a/core/l10n/src/androidMain/res/values-bg/strings.xml
+++ b/core/l10n/src/androidMain/res/values-bg/strings.xml
@@ -398,4 +398,5 @@
Прочистване
Маркиране като представено (екземпляр)
Демаркиране като представено (екземпляр)
+ Задаване на предпочитанияезик
diff --git a/core/l10n/src/androidMain/res/values-cs/strings.xml b/core/l10n/src/androidMain/res/values-cs/strings.xml
index 31616e3b4..2e2976e79 100644
--- a/core/l10n/src/androidMain/res/values-cs/strings.xml
+++ b/core/l10n/src/androidMain/res/values-cs/strings.xml
@@ -398,4 +398,5 @@
Očistit
Označit jako doporučené (instance)
Zrušit označení jako doporučené (instance)
+ Nastavení preferovaného jazyka
diff --git a/core/l10n/src/androidMain/res/values-da/strings.xml b/core/l10n/src/androidMain/res/values-da/strings.xml
index 4ba0d125b..2c5ddc26d 100644
--- a/core/l10n/src/androidMain/res/values-da/strings.xml
+++ b/core/l10n/src/androidMain/res/values-da/strings.xml
@@ -398,4 +398,5 @@
Udrensning
Markér som fremhævet (forekomst)
Fjern markering som fremhævet (forekomst)
+ Indstil foretrukket sprog
diff --git a/core/l10n/src/androidMain/res/values-de/strings.xml b/core/l10n/src/androidMain/res/values-de/strings.xml
index 83ac6f3aa..a964b835e 100755
--- a/core/l10n/src/androidMain/res/values-de/strings.xml
+++ b/core/l10n/src/androidMain/res/values-de/strings.xml
@@ -398,4 +398,5 @@
Säubern
Als vorgestellt markieren (Instanz)
Markierung als vorgestellt aufheben (Instanz)
+ Bevorzugte Sprache festlegen
diff --git a/core/l10n/src/androidMain/res/values-el/strings.xml b/core/l10n/src/androidMain/res/values-el/strings.xml
index 6f49bf86f..a44fc3136 100644
--- a/core/l10n/src/androidMain/res/values-el/strings.xml
+++ b/core/l10n/src/androidMain/res/values-el/strings.xml
@@ -398,4 +398,5 @@
Καθάρισε
Επισήμανση ως χαρακτηρισμένου (παράδειγμα)
Κατάργηση επισήμανσης ως επιλεγμένου (παράδειγμα)
+ Ορισμός προτιμώμενης γλώσσας
diff --git a/core/l10n/src/androidMain/res/values-eo/strings.xml b/core/l10n/src/androidMain/res/values-eo/strings.xml
index 2b47b0d31..5699d3996 100644
--- a/core/l10n/src/androidMain/res/values-eo/strings.xml
+++ b/core/l10n/src/androidMain/res/values-eo/strings.xml
@@ -398,4 +398,5 @@
Elpurigi
Marki kiel elstara (nodo)
Malmarki kiel elstara (nodo)
+ Agordi preferatan lingvon
diff --git a/core/l10n/src/androidMain/res/values-es/strings.xml b/core/l10n/src/androidMain/res/values-es/strings.xml
index fff5a4e32..27553187c 100755
--- a/core/l10n/src/androidMain/res/values-es/strings.xml
+++ b/core/l10n/src/androidMain/res/values-es/strings.xml
@@ -398,4 +398,5 @@
Purgar
Marcar como destacado (instancia)
Desmarcar como destacado (instancia)
+ Elegir idioma preferido
diff --git a/core/l10n/src/androidMain/res/values-et/strings.xml b/core/l10n/src/androidMain/res/values-et/strings.xml
index cf80437df..4372a87e1 100644
--- a/core/l10n/src/androidMain/res/values-et/strings.xml
+++ b/core/l10n/src/androidMain/res/values-et/strings.xml
@@ -398,4 +398,5 @@
Puhastamine
Märgi esiletõstetuks (näide)
Tühista esiletõstetud märgistus (näide)
+ Eelistatud keele määramine
diff --git a/core/l10n/src/androidMain/res/values-fi/strings.xml b/core/l10n/src/androidMain/res/values-fi/strings.xml
index 61f049454..657df3144 100644
--- a/core/l10n/src/androidMain/res/values-fi/strings.xml
+++ b/core/l10n/src/androidMain/res/values-fi/strings.xml
@@ -398,4 +398,5 @@
Puhdistaa
Merkitse esittelyyn (esim.)
Poista suositellun merkintä (esim.)
+ Aseta ensisijainen kieli
diff --git a/core/l10n/src/androidMain/res/values-fr/strings.xml b/core/l10n/src/androidMain/res/values-fr/strings.xml
index 7f8e5636b..a1296b389 100755
--- a/core/l10n/src/androidMain/res/values-fr/strings.xml
+++ b/core/l10n/src/androidMain/res/values-fr/strings.xml
@@ -398,4 +398,5 @@
Purger
Marquer comme présenté (instance)
Démarquer comme présenté (instance)
+ Définir la langue préférée
diff --git a/core/l10n/src/androidMain/res/values-ga/strings.xml b/core/l10n/src/androidMain/res/values-ga/strings.xml
index f7a3c974b..93700b784 100644
--- a/core/l10n/src/androidMain/res/values-ga/strings.xml
+++ b/core/l10n/src/androidMain/res/values-ga/strings.xml
@@ -398,4 +398,5 @@
Glanadh
Marcáil mar atá léirithe (cás)
Dímharcáil mar atá i gceist (cás)
+ An teanga rogha a shocrú
diff --git a/core/l10n/src/androidMain/res/values-hr/strings.xml b/core/l10n/src/androidMain/res/values-hr/strings.xml
index 7533c270c..8afb1c70c 100644
--- a/core/l10n/src/androidMain/res/values-hr/strings.xml
+++ b/core/l10n/src/androidMain/res/values-hr/strings.xml
@@ -398,4 +398,5 @@
Čišćenje
Označi kao istaknuto (instanca)
Ukloni oznaku kao istaknuto (instanca)
+ Postavljanje preferiranog jezik
diff --git a/core/l10n/src/androidMain/res/values-hu/strings.xml b/core/l10n/src/androidMain/res/values-hu/strings.xml
index d50a3d20e..e6eb39c53 100644
--- a/core/l10n/src/androidMain/res/values-hu/strings.xml
+++ b/core/l10n/src/androidMain/res/values-hu/strings.xml
@@ -398,4 +398,5 @@
Tisztítás
Megjelölés kiemeltként (példány)
Kiemeltként való megjelölés visszavonása (példány)
+ Előnyben részesítettnyelv beállítása
diff --git a/core/l10n/src/androidMain/res/values-it/strings.xml b/core/l10n/src/androidMain/res/values-it/strings.xml
index d1fe70e4c..0aea1989e 100755
--- a/core/l10n/src/androidMain/res/values-it/strings.xml
+++ b/core/l10n/src/androidMain/res/values-it/strings.xml
@@ -398,4 +398,5 @@
Epura
Contrassegna come fissato (istanza)
Contrassegna come non fisasto (istanza)
+ Imposta lingua preferita
diff --git a/core/l10n/src/androidMain/res/values-lt/strings.xml b/core/l10n/src/androidMain/res/values-lt/strings.xml
index 2f978926d..7c0b714f9 100644
--- a/core/l10n/src/androidMain/res/values-lt/strings.xml
+++ b/core/l10n/src/androidMain/res/values-lt/strings.xml
@@ -398,4 +398,5 @@
Valymas
Pažymėti kaip siūlomą (pavyzdys)
Panaikinkite žymėjimą kaip panašų (pavyzdys)
+ Nustatyti pageidaujamą kalbą
diff --git a/core/l10n/src/androidMain/res/values-lv/strings.xml b/core/l10n/src/androidMain/res/values-lv/strings.xml
index 9ad28b140..372fb15e7 100644
--- a/core/l10n/src/androidMain/res/values-lv/strings.xml
+++ b/core/l10n/src/androidMain/res/values-lv/strings.xml
@@ -398,4 +398,5 @@
Iztīrīšana
Atzīmēt kā piedāvātu (piemērs)
Noņemt atzīmēto kā piedāvāto (piemērs)
+ Iestatīt vēlamo valodu
diff --git a/core/l10n/src/androidMain/res/values-mt/strings.xml b/core/l10n/src/androidMain/res/values-mt/strings.xml
index 9b0440c4d..656cf2ebf 100644
--- a/core/l10n/src/androidMain/res/values-mt/strings.xml
+++ b/core/l10n/src/androidMain/res/values-mt/strings.xml
@@ -398,4 +398,5 @@
Tnaddaf
Immarka bħala dehru (istanza)
Neħħi l-immarka bħala dehru (istanza)
+ Issettja l-lingwa preferuta
diff --git a/core/l10n/src/androidMain/res/values-nl/strings.xml b/core/l10n/src/androidMain/res/values-nl/strings.xml
index 8fc45ece2..13215a76d 100644
--- a/core/l10n/src/androidMain/res/values-nl/strings.xml
+++ b/core/l10n/src/androidMain/res/values-nl/strings.xml
@@ -398,4 +398,5 @@
Zuiveren
Markeren als aanbevolen (instantie)
Markering als aanbevolen opheffen (instantie)
+ Voorkeurstaal instellen
diff --git a/core/l10n/src/androidMain/res/values-no/strings.xml b/core/l10n/src/androidMain/res/values-no/strings.xml
index aed76f08e..00de58d65 100644
--- a/core/l10n/src/androidMain/res/values-no/strings.xml
+++ b/core/l10n/src/androidMain/res/values-no/strings.xml
@@ -398,4 +398,5 @@
Rensing
Merk som fremhevet (forekomst)
Fjern merking som fremhevet (forekomst)
+ Sett foretrukket språk
diff --git a/core/l10n/src/androidMain/res/values-pl/strings.xml b/core/l10n/src/androidMain/res/values-pl/strings.xml
index db88a0ab8..f6c012110 100644
--- a/core/l10n/src/androidMain/res/values-pl/strings.xml
+++ b/core/l10n/src/androidMain/res/values-pl/strings.xml
@@ -398,4 +398,5 @@
Oczyszczać
Oznacz jako polecane (instancja)
Usuń oznaczenie jako polecane (instancja)
+ Ustaw preferowany język
diff --git a/core/l10n/src/androidMain/res/values-pt-rBR/strings.xml b/core/l10n/src/androidMain/res/values-pt-rBR/strings.xml
index c0e9f4e89..695a7256d 100644
--- a/core/l10n/src/androidMain/res/values-pt-rBR/strings.xml
+++ b/core/l10n/src/androidMain/res/values-pt-rBR/strings.xml
@@ -398,4 +398,5 @@
Purgar
Marcar como destaque (instância)
Desmarcar como destaque (instância)
+ Definir idioma preferido
diff --git a/core/l10n/src/androidMain/res/values-pt/strings.xml b/core/l10n/src/androidMain/res/values-pt/strings.xml
index 58a2b34f2..d082829d7 100755
--- a/core/l10n/src/androidMain/res/values-pt/strings.xml
+++ b/core/l10n/src/androidMain/res/values-pt/strings.xml
@@ -398,4 +398,5 @@
Purgar
Marcar como destaque (instância)
Desmarcar como destaque (instância)
+ Definir idioma preferido
diff --git a/core/l10n/src/androidMain/res/values-ro/strings.xml b/core/l10n/src/androidMain/res/values-ro/strings.xml
index 2ae9b93b9..f37bbd666 100755
--- a/core/l10n/src/androidMain/res/values-ro/strings.xml
+++ b/core/l10n/src/androidMain/res/values-ro/strings.xml
@@ -398,4 +398,5 @@
Epurează
Marchează ca recomandat (instanță)
Anulează marcare ca recomandat (instanță)
+ Setează limba preferată
diff --git a/core/l10n/src/androidMain/res/values-ru/strings.xml b/core/l10n/src/androidMain/res/values-ru/strings.xml
index f1dc3191f..77f05608e 100644
--- a/core/l10n/src/androidMain/res/values-ru/strings.xml
+++ b/core/l10n/src/androidMain/res/values-ru/strings.xml
@@ -397,4 +397,5 @@
Удалять
Отметить как избранное (экземпляр)
Снять пометку как избранное (экземпляр)
+ Установить предпочитаемый язык
diff --git a/core/l10n/src/androidMain/res/values-se/strings.xml b/core/l10n/src/androidMain/res/values-se/strings.xml
index 016e6abdf..4683f4e46 100644
--- a/core/l10n/src/androidMain/res/values-se/strings.xml
+++ b/core/l10n/src/androidMain/res/values-se/strings.xml
@@ -398,4 +398,5 @@
Rena
Markera som utvald (instans)
Avmarkera som utvald (instans)
+ Ställ in önskat språk
diff --git a/core/l10n/src/androidMain/res/values-sk/strings.xml b/core/l10n/src/androidMain/res/values-sk/strings.xml
index 0fbf1633a..1c8f5eaf8 100644
--- a/core/l10n/src/androidMain/res/values-sk/strings.xml
+++ b/core/l10n/src/androidMain/res/values-sk/strings.xml
@@ -398,5 +398,5 @@
Vyčistiť
Označiť ako odporúčané (inštancia)
Zrušiť označenie ako odporúčané (inštancia)
-
+ Nastavenie preferovaného jazyka
diff --git a/core/l10n/src/androidMain/res/values-sl/strings.xml b/core/l10n/src/androidMain/res/values-sl/strings.xml
index 26a82cb4a..634b9048e 100644
--- a/core/l10n/src/androidMain/res/values-sl/strings.xml
+++ b/core/l10n/src/androidMain/res/values-sl/strings.xml
@@ -398,4 +398,5 @@
Čiščenje
Označi kot predstavljeno (primer)
Odznači kot predstavljeno (primer)
+ Nastavitev prednostnega jezika
diff --git a/core/l10n/src/androidMain/res/values-sq/strings.xml b/core/l10n/src/androidMain/res/values-sq/strings.xml
index f51c2f6b7..33ed1dccd 100644
--- a/core/l10n/src/androidMain/res/values-sq/strings.xml
+++ b/core/l10n/src/androidMain/res/values-sq/strings.xml
@@ -398,4 +398,5 @@
Pastrim
Shëno si të paraqitur (shembull)
Hiq shënimin si të paraqitur (shembull)
+ Cakto gjuhën e preferuar
diff --git a/core/l10n/src/androidMain/res/values-sr/strings.xml b/core/l10n/src/androidMain/res/values-sr/strings.xml
index a13e39011..46dd5735d 100755
--- a/core/l10n/src/androidMain/res/values-sr/strings.xml
+++ b/core/l10n/src/androidMain/res/values-sr/strings.xml
@@ -398,4 +398,5 @@
Чистка
Означи као истакнуто (инстанца)
Уклони ознаку као истакнуто (инстанца)
+ Подеси преферирани језик
diff --git a/core/l10n/src/androidMain/res/values-tok/strings.xml b/core/l10n/src/androidMain/res/values-tok/strings.xml
index 3fca62c1d..369947856 100755
--- a/core/l10n/src/androidMain/res/values-tok/strings.xml
+++ b/core/l10n/src/androidMain/res/values-tok/strings.xml
@@ -398,4 +398,5 @@
o weka kin
o sitelen sama sewi (ilo nanpa)
o sitelen ala sama sewi (ilo nanpa)
+ o anu e toki pi wile sina
diff --git a/core/l10n/src/androidMain/res/values-tr/strings.xml b/core/l10n/src/androidMain/res/values-tr/strings.xml
index 4dd7d0a98..2a033f6f6 100644
--- a/core/l10n/src/androidMain/res/values-tr/strings.xml
+++ b/core/l10n/src/androidMain/res/values-tr/strings.xml
@@ -398,4 +398,5 @@
Tasfiye
Öne çıkan olarak işaretle (örnek)
Öne çıkan işaretini kaldır (örnek)
+ Tercih edilen dili ayarla
diff --git a/core/l10n/src/androidMain/res/values-uk/strings.xml b/core/l10n/src/androidMain/res/values-uk/strings.xml
index c66ac90db..a61991f88 100644
--- a/core/l10n/src/androidMain/res/values-uk/strings.xml
+++ b/core/l10n/src/androidMain/res/values-uk/strings.xml
@@ -397,4 +397,5 @@
Чистка
Позначити як рекомендоване (екземпляр)
Скасувати позначення як рекомендованого (екземпляр)
+ Tercih edilen dili ayarla
diff --git a/core/l10n/src/androidMain/res/values/strings.xml b/core/l10n/src/androidMain/res/values/strings.xml
index 77739d91e..e7e7bd9cc 100755
--- a/core/l10n/src/androidMain/res/values/strings.xml
+++ b/core/l10n/src/androidMain/res/values/strings.xml
@@ -406,4 +406,5 @@
Purge
Mark as featured (instance)
Unmark as featured (instance)
+ Set preferred language
diff --git a/core/persistence/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/DefaultCommunityPreferredLanguageRepositoryTest.kt b/core/persistence/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/DefaultCommunityPreferredLanguageRepositoryTest.kt
new file mode 100644
index 000000000..84476fe6b
--- /dev/null
+++ b/core/persistence/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/DefaultCommunityPreferredLanguageRepositoryTest.kt
@@ -0,0 +1,108 @@
+package com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository
+
+import com.github.diegoberaldin.raccoonforlemmy.core.preferences.TemporaryKeyStore
+import com.github.diegoberaldin.raccoonforlemmy.core.testutils.DispatcherTestRule
+import io.mockk.every
+import io.mockk.mockk
+import io.mockk.verify
+import junit.framework.TestCase.assertNull
+import kotlinx.coroutines.test.runTest
+import org.junit.Rule
+import org.junit.Test
+import kotlin.test.assertEquals
+
+class DefaultCommunityPreferredLanguageRepositoryTest {
+ @get:Rule
+ val dispatcherTestRule = DispatcherTestRule()
+
+ private val keyStore = mockk(relaxUnitFun = true)
+
+ private val sut = DefaultCommunityPreferredLanguageRepository(keyStore = keyStore)
+
+ @Test
+ fun givenEmptyInitialState_whenSave_thenValueIsStored() = runTest {
+ every { keyStore.get(KEY, listOf()) } returns listOf()
+
+ sut.save("!raccoonforlemmy@lemmy.world", 1)
+
+ verify {
+ keyStore.save(KEY, listOf("!raccoonforlemmy@lemmy.world:1"))
+ }
+ }
+
+ @Test
+ fun givenCommunityAlreadyExisting_whenSave_thenValueIsStored() = runTest {
+ every { keyStore.get(KEY, listOf()) } returns listOf("!raccoonforlemmy@lemmy.world:0")
+
+ sut.save("!raccoonforlemmy@lemmy.world", 1)
+
+ verify {
+ keyStore.save(KEY, listOf("!raccoonforlemmy@lemmy.world:1"))
+ }
+ }
+
+ @Test
+ fun givenCommunityAlreadyExisting_whenSaveNull_thenValueIsRemoved() = runTest {
+ every { keyStore.get(KEY, listOf()) } returns listOf("!raccoonforlemmy@lemmy.world:0")
+
+ sut.save("!raccoonforlemmy@lemmy.world", null)
+
+ verify {
+ keyStore.save(KEY, emptyList())
+ }
+ }
+
+ @Test
+ fun givenOtherCommunityAlreadyExisting_whenSave_thenBothValuesAreStored() = runTest {
+ every { keyStore.get(KEY, listOf()) } returns listOf("!test@lemmy.world:1")
+
+ sut.save("!raccoonforlemmy@lemmy.world", 1)
+
+ verify {
+ keyStore.save(KEY, listOf("!test@lemmy.world:1", "!raccoonforlemmy@lemmy.world:1"))
+ }
+ }
+
+ @Test
+ fun givenOtherCommunityAlreadyExisting_whenSaveNull_thenValueIsRemovedButTheOtherIsNot() =
+ runTest {
+ every { keyStore.get(KEY, listOf()) } returns listOf("!test@lemmy.world:1")
+
+ sut.save("!raccoonforlemmy@lemmy.world", null)
+
+ verify {
+ keyStore.save(KEY, listOf("!test@lemmy.world:1"))
+ }
+ }
+
+ @Test
+ fun givenEmptyInitialState_whenGet_thenResultIsAsExpected() = runTest {
+ every { keyStore.get(KEY, listOf()) } returns listOf()
+
+ val res = sut.get("!raccoonforlemmy@lemmy.world")
+
+ assertNull(res)
+ }
+
+ @Test
+ fun givenCommunityExists_whenGet_thenResultIsAsExpected() = runTest {
+ every { keyStore.get(KEY, listOf()) } returns listOf("!raccoonforlemmy@lemmy.world:2")
+
+ val res = sut.get("!raccoonforlemmy@lemmy.world")
+
+ assertEquals(2, res)
+ }
+
+ @Test
+ fun givenCommunityDoesNotExist_whenGet_thenResultIsAsExpected() = runTest {
+ every { keyStore.get(KEY, listOf()) } returns listOf("!test@lemmy.world:2")
+
+ val res = sut.get("!raccoonforlemmy@lemmy.world")
+
+ assertNull(res)
+ }
+
+ companion object {
+ private const val KEY = "communityPreferredLanguage"
+ }
+}
diff --git a/core/persistence/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/DefaultCommunitySortRepositoryTest.kt b/core/persistence/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/DefaultCommunitySortRepositoryTest.kt
index a0d095e98..bdf562635 100644
--- a/core/persistence/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/DefaultCommunitySortRepositoryTest.kt
+++ b/core/persistence/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/DefaultCommunitySortRepositoryTest.kt
@@ -6,6 +6,7 @@ import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import junit.framework.TestCase.assertNull
+import kotlinx.coroutines.test.runTest
import org.junit.Rule
import org.junit.Test
import kotlin.test.assertEquals
@@ -19,62 +20,66 @@ class DefaultCommunitySortRepositoryTest {
private val sut = DefaultCommunitySortRepository(keyStore = keyStore)
@Test
- fun givenEmptyInitialState_whenSaveSort_thenValueIsStored() {
- every { keyStore.get("communitySort", listOf()) } returns listOf()
+ fun givenEmptyInitialState_whenSave_thenValueIsStored() = runTest {
+ every { keyStore.get(KEY, listOf()) } returns listOf()
- sut.saveSort("!raccoonforlemmy@lemmy.world", 1)
+ sut.save("!raccoonforlemmy@lemmy.world", 1)
verify {
- keyStore.save("communitySort", listOf("!raccoonforlemmy@lemmy.world:1"))
+ keyStore.save(KEY, listOf("!raccoonforlemmy@lemmy.world:1"))
}
}
@Test
- fun givenCommunityAlreadyExisting_whenSaveSort_thenValueIsStored() {
- every { keyStore.get("communitySort", listOf()) } returns listOf("!raccoonforlemmy@lemmy.world:0")
+ fun givenCommunityAlreadyExisting_whenSave_thenValueIsStored() = runTest {
+ every { keyStore.get(KEY, listOf()) } returns listOf("!raccoonforlemmy@lemmy.world:0")
- sut.saveSort("!raccoonforlemmy@lemmy.world", 1)
+ sut.save("!raccoonforlemmy@lemmy.world", 1)
verify {
- keyStore.save("communitySort", listOf("!raccoonforlemmy@lemmy.world:1"))
+ keyStore.save(KEY, listOf("!raccoonforlemmy@lemmy.world:1"))
}
}
@Test
- fun givenOtherCommunityAlreadyExisting_whenSaveSort_thenBothValuesAreStored() {
- every { keyStore.get("communitySort", listOf()) } returns listOf("!test@lemmy.world:1")
+ fun givenOtherCommunityAlreadyExisting_whenSave_thenBothValuesAreStored() = runTest {
+ every { keyStore.get(KEY, listOf()) } returns listOf("!test@lemmy.world:1")
- sut.saveSort("!raccoonforlemmy@lemmy.world", 1)
+ sut.save("!raccoonforlemmy@lemmy.world", 1)
verify {
- keyStore.save("communitySort", listOf("!test@lemmy.world:1", "!raccoonforlemmy@lemmy.world:1"))
+ keyStore.save(KEY, listOf("!test@lemmy.world:1", "!raccoonforlemmy@lemmy.world:1"))
}
}
@Test
- fun givenEmptyInitialState_whenGet_thenResultIsAsExpected() {
- every { keyStore.get("communitySort", listOf()) } returns listOf()
+ fun givenEmptyInitialState_whenGet_thenResultIsAsExpected() = runTest {
+ every { keyStore.get(KEY, listOf()) } returns listOf()
- val res = sut.getSort("!raccoonforlemmy@lemmy.world")
+ val res = sut.get("!raccoonforlemmy@lemmy.world")
assertNull(res)
}
@Test
- fun givenCommunityExists_whenGet_thenResultIsAsExpected() {
- every { keyStore.get("communitySort", listOf()) } returns listOf("!raccoonforlemmy@lemmy.world:2")
+ fun givenCommunityExists_whenGet_thenResultIsAsExpected() = runTest {
+ every { keyStore.get(KEY, listOf()) } returns listOf("!raccoonforlemmy@lemmy.world:2")
- val res = sut.getSort("!raccoonforlemmy@lemmy.world")
+ val res = sut.get("!raccoonforlemmy@lemmy.world")
assertEquals(2, res)
}
@Test
- fun givenCommunityDoesNotExist_whenGet_thenResultIsAsExpected() {
- every { keyStore.get("communitySort", listOf()) } returns listOf("!test@lemmy.world:2")
+ fun givenCommunityDoesNotExist_whenGet_thenResultIsAsExpected() = runTest {
+ every { keyStore.get(KEY, listOf()) } returns listOf("!test@lemmy.world:2")
- val res = sut.getSort("!raccoonforlemmy@lemmy.world")
+ val res = sut.get("!raccoonforlemmy@lemmy.world")
assertNull(res)
}
+
+ companion object {
+ private const val KEY = "communitySort"
+ }
}
diff --git a/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/di/CorePersistenceModule.kt b/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/di/CorePersistenceModule.kt
index 1ed1bca8f..67ab0f0d5 100644
--- a/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/di/CorePersistenceModule.kt
+++ b/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/di/CorePersistenceModule.kt
@@ -3,8 +3,10 @@ package com.github.diegoberaldin.raccoonforlemmy.core.persistence.di
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.DatabaseProvider
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.DefaultDatabaseProvider
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.AccountRepository
+import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.CommunityPreferredLanguageRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.CommunitySortRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.DefaultAccountRepository
+import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.DefaultCommunityPreferredLanguageRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.DefaultCommunitySortRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.DefaultDraftRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.DefaultFavoriteCommunityRepository
@@ -66,6 +68,11 @@ val corePersistenceModule =
keyStore = get(),
)
}
+ single {
+ DefaultCommunityPreferredLanguageRepository(
+ keyStore = get(),
+ )
+ }
single {
DefaultImportSettingsUseCase(
settingsRepository = get(),
diff --git a/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/CommunityPreferredLanguageRepository.kt b/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/CommunityPreferredLanguageRepository.kt
new file mode 100644
index 000000000..38a801dfc
--- /dev/null
+++ b/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/CommunityPreferredLanguageRepository.kt
@@ -0,0 +1,12 @@
+package com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository
+
+interface CommunityPreferredLanguageRepository {
+ suspend fun get(handle: String): Long?
+
+ suspend fun save(
+ handle: String,
+ value: Long?,
+ )
+
+ suspend fun clear()
+}
\ No newline at end of file
diff --git a/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/CommunitySortRepository.kt b/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/CommunitySortRepository.kt
index 0def85ee9..52098e2fe 100644
--- a/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/CommunitySortRepository.kt
+++ b/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/CommunitySortRepository.kt
@@ -1,12 +1,12 @@
package com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository
interface CommunitySortRepository {
- fun getSort(handle: String): Int?
+ suspend fun get(handle: String): Int?
- fun saveSort(
+ suspend fun save(
handle: String,
value: Int,
)
- fun clear()
+ suspend fun clear()
}
diff --git a/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/DefaultCommunityPreferredLanguageRepository.kt b/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/DefaultCommunityPreferredLanguageRepository.kt
new file mode 100644
index 000000000..1a2e58a49
--- /dev/null
+++ b/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/DefaultCommunityPreferredLanguageRepository.kt
@@ -0,0 +1,52 @@
+package com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository
+
+import com.github.diegoberaldin.raccoonforlemmy.core.preferences.TemporaryKeyStore
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.IO
+import kotlinx.coroutines.withContext
+
+private const val SETTINGS_KEY = "communityPreferredLanguage"
+
+internal class DefaultCommunityPreferredLanguageRepository(
+ private val keyStore: TemporaryKeyStore,
+) : CommunityPreferredLanguageRepository {
+
+ override suspend fun get(handle: String): Long? = withContext(Dispatchers.IO) {
+ val map = deserializeMap()
+ map[handle]
+ }
+
+ override suspend fun save(
+ handle: String,
+ value: Long?,
+ ) = withContext(Dispatchers.IO) {
+ val map = deserializeMap()
+ if (value != null) {
+ map[handle] = value
+ } else {
+ map.remove(handle)
+ }
+ val newValue = serializeMap(map)
+ keyStore.save(SETTINGS_KEY, newValue)
+ }
+
+ private fun deserializeMap(): MutableMap =
+ keyStore.get(SETTINGS_KEY, listOf()).mapNotNull {
+ it.split(":").takeIf { e -> e.size == 2 }?.let { e -> e[0] to e[1] }
+ }.let { pairs ->
+ val res = mutableMapOf()
+ for (pair in pairs) {
+ res[pair.first] = pair.second.toLong()
+ }
+ res
+ }
+
+ private fun serializeMap(map: Map): List =
+ map.map { e ->
+ e.key + ":" + e.value
+ }
+
+ override suspend fun clear() = withContext(Dispatchers.IO) {
+ keyStore.remove(SETTINGS_KEY)
+ }
+}
\ No newline at end of file
diff --git a/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/DefaultCommunitySortRepository.kt b/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/DefaultCommunitySortRepository.kt
index 7942d4c43..d3a1db0d9 100644
--- a/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/DefaultCommunitySortRepository.kt
+++ b/core/persistence/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/persistence/repository/DefaultCommunitySortRepository.kt
@@ -1,21 +1,24 @@
package com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository
import com.github.diegoberaldin.raccoonforlemmy.core.preferences.TemporaryKeyStore
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.IO
+import kotlinx.coroutines.withContext
private const val SETTINGS_KEY = "communitySort"
internal class DefaultCommunitySortRepository(
private val keyStore: TemporaryKeyStore,
) : CommunitySortRepository {
- override fun getSort(handle: String): Int? {
+ override suspend fun get(handle: String): Int? = withContext(Dispatchers.IO) {
val map = deserializeMap()
- return map[handle]
+ map[handle]
}
- override fun saveSort(
+ override suspend fun save(
handle: String,
value: Int,
- ) {
+ ) = withContext(Dispatchers.IO) {
val map = deserializeMap()
map[handle] = value
val newValue = serializeMap(map)
@@ -38,7 +41,7 @@ internal class DefaultCommunitySortRepository(
e.key + ":" + e.value
}
- override fun clear() {
+ override suspend fun clear() = withContext(Dispatchers.IO) {
keyStore.remove(SETTINGS_KEY)
}
}
diff --git a/domain/identity/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultLoginUseCaseTest.kt b/domain/identity/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultLoginUseCaseTest.kt
index 9876b5693..e68d14386 100644
--- a/domain/identity/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultLoginUseCaseTest.kt
+++ b/domain/identity/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultLoginUseCaseTest.kt
@@ -4,6 +4,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.api.dto.LoginResponse
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.AccountModel
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.SettingsModel
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.AccountRepository
+import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.CommunityPreferredLanguageRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.CommunitySortRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.testutils.DispatcherTestRule
@@ -36,6 +37,8 @@ class DefaultLoginUseCaseTest {
private val settingsRepository = mockk(relaxUnitFun = true)
private val siteRepository = mockk(relaxUnitFun = true)
private val communitySortRepository = mockk(relaxUnitFun = true)
+ private val communityPreferredLanguageRepository =
+ mockk(relaxUnitFun = true)
private val sut =
DefaultLoginUseCase(
authRepository = authRepository,
@@ -45,6 +48,7 @@ class DefaultLoginUseCaseTest {
settingsRepository = settingsRepository,
siteRepository = siteRepository,
communitySortRepository = communitySortRepository,
+ communityPreferredLanguageRepository = communityPreferredLanguageRepository,
)
@Test
@@ -184,6 +188,7 @@ class DefaultLoginUseCaseTest {
accountRepository.setActive(accountId, true)
settingsRepository.changeCurrentSettings(oldSettings)
communitySortRepository.clear()
+ communityPreferredLanguageRepository.clear()
}
coVerify(inverse = true) {
accountRepository.createAccount(any())
diff --git a/domain/identity/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultSwitchAccountUseCaseTest.kt b/domain/identity/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultSwitchAccountUseCaseTest.kt
index ccec2eb77..6045f1120 100644
--- a/domain/identity/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultSwitchAccountUseCaseTest.kt
+++ b/domain/identity/src/androidUnitTest/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultSwitchAccountUseCaseTest.kt
@@ -6,6 +6,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationC
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.AccountModel
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.SettingsModel
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.AccountRepository
+import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.CommunityPreferredLanguageRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.CommunitySortRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.testutils.DispatcherTestRule
@@ -27,6 +28,8 @@ class DefaultSwitchAccountUseCaseTest {
private val serviceProvider = mockk(relaxUnitFun = true)
private val notificationCenter = mockk(relaxUnitFun = true)
private val communitySortRepository = mockk(relaxUnitFun = true)
+ private val communityPreferredLanguageRepository =
+ mockk(relaxUnitFun = true)
private val sut =
DefaultSwitchAccountUseCase(
identityRepository = identityRepository,
@@ -35,6 +38,7 @@ class DefaultSwitchAccountUseCaseTest {
serviceProvider = serviceProvider,
notificationCenter = notificationCenter,
communitySortRepository = communitySortRepository,
+ communityPreferredLanguageRepository = communityPreferredLanguageRepository,
)
@Test
@@ -79,6 +83,7 @@ class DefaultSwitchAccountUseCaseTest {
settingsRepository.getSettings(accountId)
settingsRepository.changeCurrentSettings(newSettings)
communitySortRepository.clear()
+ communityPreferredLanguageRepository.clear()
notificationCenter.send(ofType(NotificationCenterEvent.Logout::class))
identityRepository.storeToken("new-token")
identityRepository.refreshLoggedState()
diff --git a/domain/identity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/di/IdentityModule.kt b/domain/identity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/di/IdentityModule.kt
index e01cb476c..daf73e570 100644
--- a/domain/identity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/di/IdentityModule.kt
+++ b/domain/identity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/di/IdentityModule.kt
@@ -47,6 +47,7 @@ val coreIdentityModule =
settingsRepository = get(),
siteRepository = get(),
communitySortRepository = get(),
+ communityPreferredLanguageRepository = get(),
)
}
single {
@@ -66,6 +67,7 @@ val coreIdentityModule =
serviceProvider = get(named("default")),
notificationCenter = get(),
communitySortRepository = get(),
+ communityPreferredLanguageRepository = get(),
)
}
single {
diff --git a/domain/identity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultLoginUseCase.kt b/domain/identity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultLoginUseCase.kt
index e77f0698f..0eb33f2d8 100644
--- a/domain/identity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultLoginUseCase.kt
+++ b/domain/identity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultLoginUseCase.kt
@@ -2,6 +2,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.CommunityPreferredLanguageRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.CommunitySortRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.debug.logDebug
@@ -18,6 +19,7 @@ internal class DefaultLoginUseCase(
private val settingsRepository: SettingsRepository,
private val siteRepository: SiteRepository,
private val communitySortRepository: CommunitySortRepository,
+ private val communityPreferredLanguageRepository: CommunityPreferredLanguageRepository,
) : LoginUseCase {
override suspend operator fun invoke(
instance: String,
@@ -78,6 +80,7 @@ internal class DefaultLoginUseCase(
accountRepository.setActive(id, true)
communitySortRepository.clear()
+ communityPreferredLanguageRepository.clear()
val newSettings = settingsRepository.getSettings(id)
settingsRepository.changeCurrentSettings(newSettings)
diff --git a/domain/identity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultSwitchAccountUseCase.kt b/domain/identity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultSwitchAccountUseCase.kt
index 16edf127c..f0774ce44 100644
--- a/domain/identity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultSwitchAccountUseCase.kt
+++ b/domain/identity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/domain/identity/usecase/DefaultSwitchAccountUseCase.kt
@@ -5,6 +5,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationC
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterEvent
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.CommunityPreferredLanguageRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.CommunitySortRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.IdentityRepository
@@ -16,6 +17,7 @@ internal class DefaultSwitchAccountUseCase(
private val notificationCenter: NotificationCenter,
private val settingsRepository: SettingsRepository,
private val communitySortRepository: CommunitySortRepository,
+ private val communityPreferredLanguageRepository: CommunityPreferredLanguageRepository,
) : SwitchAccountUseCase {
override suspend fun invoke(account: AccountModel) {
val accountId = account.id ?: return
@@ -29,6 +31,7 @@ internal class DefaultSwitchAccountUseCase(
notificationCenter.send(NotificationCenterEvent.Logout)
communitySortRepository.clear()
+ communityPreferredLanguageRepository.clear()
serviceProvider.changeInstance(instance)
diff --git a/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailMviModel.kt b/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailMviModel.kt
index cabe13dab..71a7a8b38 100644
--- a/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailMviModel.kt
+++ b/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailMviModel.kt
@@ -7,6 +7,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.appearance.data.VoteFormat
import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.ActionOnSwipe
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommunityModel
+import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.LanguageModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.UserModel
@@ -69,6 +70,8 @@ interface CommunityDetailMviModel :
data object WillOpenDetail : Intent
data object UnhideCommunity : Intent
+
+ data class SelectPreferredLanguage(val languageId: Long?) : Intent
}
data class UiState(
@@ -104,6 +107,8 @@ interface CommunityDetailMviModel :
val fadeReadPosts: Boolean = false,
val showUnreadComments: Boolean = false,
val downVoteEnabled: Boolean = true,
+ val currentPreferredLanguageId: Long? = null,
+ val availableLanguages: List = emptyList(),
)
sealed interface Effect {
diff --git a/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailScreen.kt b/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailScreen.kt
index 4e76e4c3b..8506f33ff 100644
--- a/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailScreen.kt
+++ b/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailScreen.kt
@@ -109,6 +109,7 @@ 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.CopyPostBottomSheet
+import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.SelectLanguageDialog
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.ShareBottomSheet
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.SortBottomSheet
import com.github.diegoberaldin.raccoonforlemmy.core.l10n.LocalXmlStrings
@@ -209,6 +210,7 @@ class CommunityDetailScreen(
with(LocalDensity.current) {
WindowInsets.statusBars.getTop(this)
}
+ var selectLanguageDialogOpen by remember { mutableStateOf(false) }
LaunchedEffect(model) {
model.effects.onEach { effect ->
@@ -368,6 +370,12 @@ class CommunityDetailScreen(
OptionId.SetCustomSort,
LocalXmlStrings.current.communitySetCustomSort,
)
+ if (uiState.isLogged) {
+ this += Option(
+ OptionId.SetPreferredLanguage,
+ LocalXmlStrings.current.communitySetPreferredLanguage,
+ )
+ }
this +=
Option(
OptionId.InfoInstance,
@@ -600,6 +608,10 @@ class CommunityDetailScreen(
navigationCoordinator.pushScreen(screen)
}
+ OptionId.SetPreferredLanguage -> {
+ selectLanguageDialogOpen = true
+ }
+
else -> Unit
}
},
@@ -1477,6 +1489,7 @@ class CommunityDetailScreen(
if (quotation != null) {
detailOpener.openReply(
originalComment = content,
+ originalPost = PostModel(id = content.postId),
initialText =
buildString {
append("> ")
@@ -1520,5 +1533,21 @@ class CommunityDetailScreen(
},
)
}
+
+ if (selectLanguageDialogOpen) {
+ SelectLanguageDialog(
+ languages = uiState.availableLanguages,
+ currentLanguageId = uiState.currentPreferredLanguageId,
+ onSelect =
+ rememberCallbackArgs { langId ->
+ model.reduce(CommunityDetailMviModel.Intent.SelectPreferredLanguage(langId))
+ selectLanguageDialogOpen = false
+ },
+ onDismiss =
+ rememberCallback {
+ selectLanguageDialogOpen = false
+ },
+ )
+ }
}
}
diff --git a/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailViewModel.kt b/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailViewModel.kt
index 6383775aa..c06f5d8fd 100644
--- a/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailViewModel.kt
+++ b/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailViewModel.kt
@@ -10,6 +10,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationC
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterEvent
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.FavoriteCommunityModel
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.AccountRepository
+import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.CommunityPreferredLanguageRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.CommunitySortRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.FavoriteCommunityRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
@@ -64,6 +65,7 @@ class CommunityDetailViewModel(
private val itemCache: LemmyItemCache,
private val communitySortRepository: CommunitySortRepository,
private val postNavigationManager: PostNavigationManager,
+ private val communityPreferredLanguageRepository: CommunityPreferredLanguageRepository,
) : CommunityDetailMviModel,
DefaultMviModel(
initialState = CommunityDetailMviModel.UiState(),
@@ -79,8 +81,8 @@ class CommunityDetailViewModel(
it.copy(
community = community,
instance =
- otherInstance.takeIf { n -> n.isNotEmpty() }
- ?: apiConfigurationRepository.instance.value,
+ otherInstance.takeIf { n -> n.isNotEmpty() }
+ ?: apiConfigurationRepository.instance.value,
)
}
}
@@ -132,16 +134,16 @@ class CommunityDetailViewModel(
updateState {
it.copy(
posts =
- it.posts.map { p ->
- if (p.id == postId) {
- p.copy(
- creator = newUser,
- updateDate = newUser.updateDate,
- )
- } else {
- p
- }
- },
+ it.posts.map { p ->
+ if (p.id == postId) {
+ p.copy(
+ creator = newUser,
+ updateDate = newUser.updateDate,
+ )
+ } else {
+ p
+ }
+ },
)
}
}.launchIn(this)
@@ -153,12 +155,12 @@ class CommunityDetailViewModel(
handlePostUpdate(newPost)
}
}.launchIn(this)
+ val communityHandle = uiState.value.community.readableHandle
notificationCenter.subscribe(NotificationCenterEvent.ChangeSortType::class)
.onEach { evt ->
- if (evt.screenKey == uiState.value.community.readableHandle) {
+ if (evt.screenKey == communityHandle) {
if (evt.defaultForCommunity) {
- val handle = uiState.value.community.readableHandle
- communitySortRepository.saveSort(handle, evt.value.toInt())
+ communitySortRepository.save(communityHandle, evt.value.toInt())
}
applySortType(evt.value)
}
@@ -189,10 +191,20 @@ class CommunityDetailViewModel(
}
}
if (uiState.value.initial) {
- val defaultPostSortType = settingsRepository.currentSettings.value.defaultPostSortType.toSortType()
+ val defaultPostSortType =
+ settingsRepository.currentSettings.value.defaultPostSortType.toSortType()
val customPostSortType =
- communitySortRepository.getSort(uiState.value.community.readableHandle)?.toSortType()
- updateState { it.copy(sortType = customPostSortType ?: defaultPostSortType) }
+ communitySortRepository.get(communityHandle)?.toSortType()
+ val preferredLanguageId = communityPreferredLanguageRepository.get(communityHandle)
+ val auth = identityRepository.authToken.value.orEmpty()
+ val languages = siteRepository.getLanguages(auth)
+ updateState {
+ it.copy(
+ sortType = customPostSortType ?: defaultPostSortType,
+ currentPreferredLanguageId = preferredLanguageId,
+ availableLanguages = languages,
+ )
+ }
refresh(initial = true)
}
}
@@ -330,6 +342,10 @@ class CommunityDetailViewModel(
CommunityDetailMviModel.Intent.UnhideCommunity -> {
unhideCommunity()
}
+
+ is CommunityDetailMviModel.Intent.SelectPreferredLanguage -> {
+ updatePreferredLanguage(intent.languageId)
+ }
}
}
@@ -356,7 +372,8 @@ class CommunityDetailViewModel(
}
val auth = identityRepository.authToken.value
val accountId = accountRepository.getActive()?.id
- val isFavorite = favoriteCommunityRepository.getBy(accountId, currentState.community.id) != null
+ val isFavorite =
+ favoriteCommunityRepository.getBy(accountId, currentState.community.id) != null
val refreshedCommunity =
communityRepository.get(
auth = auth,
@@ -553,7 +570,11 @@ class CommunityDetailViewModel(
)
if (community != null) {
updateState { it.copy(community = community) }
- notificationCenter.send(NotificationCenterEvent.CommunitySubscriptionChanged(community))
+ notificationCenter.send(
+ NotificationCenterEvent.CommunitySubscriptionChanged(
+ community
+ )
+ )
}
}
}
@@ -568,7 +589,11 @@ class CommunityDetailViewModel(
)
if (community != null) {
updateState { it.copy(community = community) }
- notificationCenter.send(NotificationCenterEvent.CommunitySubscriptionChanged(community))
+ notificationCenter.send(
+ NotificationCenterEvent.CommunitySubscriptionChanged(
+ community
+ )
+ )
}
}
}
@@ -578,13 +603,13 @@ class CommunityDetailViewModel(
updateState {
it.copy(
posts =
- it.posts.map { p ->
- if (p.id == post.id) {
- post
- } else {
- p
- }
- },
+ it.posts.map { p ->
+ if (p.id == post.id) {
+ post
+ } else {
+ p
+ }
+ },
)
}
}
@@ -759,4 +784,14 @@ class CommunityDetailViewModel(
}
}
}
+
+ private fun updatePreferredLanguage(languageId: Long?) {
+ screenModelScope.launch {
+ val communityHandle = uiState.value.community.readableHandle
+ communityPreferredLanguageRepository.save(handle = communityHandle, value = languageId)
+ updateState {
+ it.copy(currentPreferredLanguageId = languageId)
+ }
+ }
+ }
}
diff --git a/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/di/CommunityDetailModule.kt b/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/di/CommunityDetailModule.kt
index 54bf40a9f..788383ebf 100644
--- a/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/di/CommunityDetailModule.kt
+++ b/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/di/CommunityDetailModule.kt
@@ -29,6 +29,7 @@ val communityDetailModule =
communitySortRepository = get(),
postPaginationManager = get(),
postNavigationManager = get(),
+ communityPreferredLanguageRepository = get(),
)
}
}
diff --git a/unit/createcomment/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createcomment/CreateCommentViewModel.kt b/unit/createcomment/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createcomment/CreateCommentViewModel.kt
index 830c82bea..e4aae76b9 100644
--- a/unit/createcomment/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createcomment/CreateCommentViewModel.kt
+++ b/unit/createcomment/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createcomment/CreateCommentViewModel.kt
@@ -8,11 +8,13 @@ import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationC
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.DraftModel
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.DraftType
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.AccountRepository
+import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.CommunityPreferredLanguageRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.DraftRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.ValidationError
import com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime.epochMillis
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.IdentityRepository
+import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.readableHandle
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.CommentRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.LemmyItemCache
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.PostRepository
@@ -36,6 +38,7 @@ class CreateCommentViewModel(
private val itemCache: LemmyItemCache,
private val accountRepository: AccountRepository,
private val draftRepository: DraftRepository,
+ private val communityPreferredLanguageRepository: CommunityPreferredLanguageRepository,
) : CreateCommentMviModel,
DefaultMviModel(
initialState = CreateCommentMviModel.UiState(),
@@ -61,6 +64,8 @@ class CreateCommentViewModel(
} else {
originalCommentFromCache
}
+ val communityHandle = originalPost?.community?.readableHandle.orEmpty()
+ val preferredLanguageId = communityPreferredLanguageRepository.get(communityHandle)
updateState {
it.copy(
originalPost = originalPost,
@@ -97,7 +102,7 @@ class CreateCommentViewModel(
fullHeightImages = settings.fullHeightImages,
fullWidthImages = settings.fullWidthImages,
showScores = settings.showScores,
- currentLanguageId = settings.defaultLanguageId,
+ currentLanguageId = preferredLanguageId ?: settings.defaultLanguageId,
)
}
}.launchIn(this)
diff --git a/unit/createcomment/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createcomment/di/CreateCommentModule.kt b/unit/createcomment/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createcomment/di/CreateCommentModule.kt
index bef1c2514..af31e9654 100644
--- a/unit/createcomment/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createcomment/di/CreateCommentModule.kt
+++ b/unit/createcomment/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createcomment/di/CreateCommentModule.kt
@@ -22,6 +22,7 @@ val createCommentModule =
itemCache = get(),
accountRepository = get(),
draftRepository = get(),
+ communityPreferredLanguageRepository = get(),
)
}
}
diff --git a/unit/createpost/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createpost/CreatePostViewModel.kt b/unit/createpost/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createpost/CreatePostViewModel.kt
index 72af772b3..0d76ee451 100644
--- a/unit/createpost/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createpost/CreatePostViewModel.kt
+++ b/unit/createpost/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createpost/CreatePostViewModel.kt
@@ -8,6 +8,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationC
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.DraftModel
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.DraftType
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.AccountRepository
+import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.CommunityPreferredLanguageRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.DraftRepository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.ValidationError
@@ -15,6 +16,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime.epochMillis
import com.github.diegoberaldin.raccoonforlemmy.core.utils.isValidUrl
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.readableHandle
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.readableName
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.CommunityRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.LemmyItemCache
@@ -38,6 +40,7 @@ class CreatePostViewModel(
private val accountRepository: AccountRepository,
private val draftRepository: DraftRepository,
private val notificationCenter: NotificationCenter,
+ private val communityPreferredLanguageRepository: CommunityPreferredLanguageRepository,
) : CreatePostMviModel,
DefaultMviModel(
initialState = CreatePostMviModel.UiState(),
@@ -66,7 +69,6 @@ class CreatePostViewModel(
fullHeightImages = settings.fullHeightImages,
fullWidthImages = settings.fullWidthImages,
showScores = settings.showScores,
- currentLanguageId = settings.defaultLanguageId,
)
}
}.launchIn(this)
@@ -141,6 +143,7 @@ class CreatePostViewModel(
it.copy(currentLanguageId = intent.value)
}
}
+
is CreatePostMviModel.Intent.ChangeBodyValue ->
screenModelScope.launch {
updateState {
@@ -159,17 +162,25 @@ class CreatePostViewModel(
val preferNicknames = uiState.value.preferNicknames
val communityId = community.id
val name = community.readableName(preferNicknames)
- val auth = identityRepository.authToken.value.orEmpty()
+
screenModelScope.launch {
- val communityInfo =
- name.ifEmpty {
- val remoteCommunity = communityRepository.get(auth = auth, id = communityId)
- remoteCommunity?.name.orEmpty()
- }
+ val (actualName, actualHandle) = if (name.isEmpty()) {
+ val auth = identityRepository.authToken.value.orEmpty()
+ val remoteCommunity = communityRepository.get(auth = auth, id = communityId)
+ remoteCommunity?.name.orEmpty() to remoteCommunity?.readableHandle.orEmpty()
+ } else {
+ name to community.readableHandle
+ }
+
+ val preferredLanguageId =
+ communityPreferredLanguageRepository.get(actualHandle)
+ val defaultLanguageId = settingsRepository.currentSettings.value.defaultLanguageId
+
updateState {
it.copy(
communityId = communityId,
- communityInfo = communityInfo,
+ communityInfo = actualName,
+ currentLanguageId = preferredLanguageId ?: defaultLanguageId,
)
}
}
diff --git a/unit/createpost/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createpost/di/CreatePostModule.kt b/unit/createpost/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createpost/di/CreatePostModule.kt
index 8974f9157..505a5d9b2 100644
--- a/unit/createpost/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createpost/di/CreatePostModule.kt
+++ b/unit/createpost/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/createpost/di/CreatePostModule.kt
@@ -21,6 +21,7 @@ val createPostModule =
accountRepository = get(),
draftRepository = get(),
notificationCenter = get(),
+ communityPreferredLanguageRepository = get(),
)
}
}
diff --git a/unit/drafts/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/drafts/DraftsScreen.kt b/unit/drafts/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/drafts/DraftsScreen.kt
index 113edecfe..ac76fae8c 100644
--- a/unit/drafts/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/drafts/DraftsScreen.kt
+++ b/unit/drafts/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/drafts/DraftsScreen.kt
@@ -269,10 +269,9 @@ class DraftsScreen : Screen {
rememberCallback {
detailOpener.openReply(
draftId = draft.id,
- originalPost =
- draft.postId?.let {
- PostModel(id = it)
- },
+ originalPost = PostModel(
+ id = draft.postId ?: 0
+ ),
originalComment =
draft.parentId?.let {
CommentModel(id = it, text = "")
diff --git a/unit/explore/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/explore/ExploreScreen.kt b/unit/explore/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/explore/ExploreScreen.kt
index 361fd5e7a..2d56bd194 100644
--- a/unit/explore/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/explore/ExploreScreen.kt
+++ b/unit/explore/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/explore/ExploreScreen.kt
@@ -413,7 +413,9 @@ class ExploreScreen(
?: defaultReplyColor,
onTriggered =
rememberCallback {
- detailOpener.openReply(originalPost = result.model)
+ detailOpener.openReply(
+ originalPost = result.model,
+ )
},
)
diff --git a/unit/filteredcontents/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/filteredcontents/FilteredContentsScreen.kt b/unit/filteredcontents/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/filteredcontents/FilteredContentsScreen.kt
index 4da8cb629..09c237020 100644
--- a/unit/filteredcontents/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/filteredcontents/FilteredContentsScreen.kt
+++ b/unit/filteredcontents/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/filteredcontents/FilteredContentsScreen.kt
@@ -744,7 +744,10 @@ class FilteredContentsScreen(
backgroundColor = replyColor ?: defaultReplyColor,
onTriggered =
rememberCallback {
- detailOpener.openReply(originalComment = comment)
+ detailOpener.openReply(
+ originalPost = PostModel(comment.postId),
+ originalComment = comment,
+ )
},
)
@@ -822,7 +825,10 @@ class FilteredContentsScreen(
},
onReply =
rememberCallback {
- detailOpener.openReply(originalComment = comment)
+ detailOpener.openReply(
+ originalPost = PostModel(id = comment.postId),
+ originalComment = comment,
+ )
},
options =
buildList {
@@ -1028,6 +1034,7 @@ class FilteredContentsScreen(
rawContent = null
if (quotation != null) {
detailOpener.openReply(
+ originalPost = PostModel(id = content.postId),
originalComment = content,
initialText =
buildString {
diff --git a/unit/myaccount/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/myaccount/ProfileLoggedScreen.kt b/unit/myaccount/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/myaccount/ProfileLoggedScreen.kt
index 27cd0667e..1298849de 100644
--- a/unit/myaccount/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/myaccount/ProfileLoggedScreen.kt
+++ b/unit/myaccount/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/myaccount/ProfileLoggedScreen.kt
@@ -501,6 +501,7 @@ object ProfileLoggedScreen : Tab {
OptionId.Edit -> {
detailOpener.openReply(
+ originalPost = PostModel(id = comment.postId),
editedComment = comment,
)
}
@@ -635,6 +636,7 @@ object ProfileLoggedScreen : Tab {
rawContent = null
if (quotation != null) {
detailOpener.openReply(
+ originalPost = PostModel(id = content.postId),
originalComment = content,
initialText =
buildString {
diff --git a/unit/postdetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postdetail/PostDetailScreen.kt b/unit/postdetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postdetail/PostDetailScreen.kt
index adc49f387..29cb64974 100644
--- a/unit/postdetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postdetail/PostDetailScreen.kt
+++ b/unit/postdetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postdetail/PostDetailScreen.kt
@@ -1343,6 +1343,7 @@ class PostDetailScreen(
OptionId.Edit -> {
detailOpener.openReply(
+ originalPost = PostModel(id = comment.postId),
editedComment = comment,
)
}
@@ -1583,6 +1584,7 @@ class PostDetailScreen(
OptionId.Edit -> {
detailOpener.openReply(
+ originalPost = PostModel(id = comment.postId),
editedComment = comment,
)
}
diff --git a/unit/userdetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/userdetail/UserDetailScreen.kt b/unit/userdetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/userdetail/UserDetailScreen.kt
index c27915a11..8e085de7b 100644
--- a/unit/userdetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/userdetail/UserDetailScreen.kt
+++ b/unit/userdetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/userdetail/UserDetailScreen.kt
@@ -1277,6 +1277,7 @@ class UserDetailScreen(
rawContent = null
if (quotation != null) {
detailOpener.openReply(
+ originalPost = PostModel(id = content.id),
originalComment = content,
initialText =
buildString {