feat: configure default result type for Explore (#1040)

This commit is contained in:
Diego Beraldin 2024-06-24 19:47:38 +02:00 committed by GitHub
parent 1de3b01063
commit 32859c9bf6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
93 changed files with 830 additions and 210 deletions

View File

@ -420,4 +420,5 @@ internal val ArStrings =
override val messageContentDeleted = "لقد قمت بحذف هذا المحتوى"
override val actionRestore = "يعيد"
override val settingsInboxPreviewMaxLines = "الحد الأقصى لعدد الخطوط في بطاقات البريد الوارد"
override val settingsDefaultExploreResultType = "وع نتيجة البحث الافتراضي للاستكشاف"
}

View File

@ -429,4 +429,5 @@ internal val BgStrings =
override val messageContentDeleted = "Вие изтрихте това съдържание"
override val actionRestore = "Възстанови"
override val settingsInboxPreviewMaxLines = "Максимален брой редове във входящите карти"
override val settingsDefaultExploreResultType = "ип резултати от търсенето по подразбиране за Explore"
}

View File

@ -425,4 +425,5 @@ internal val CsStrings =
override val messageContentDeleted = "Tento obsah jste smazali"
override val actionRestore = "Obnovit"
override val settingsInboxPreviewMaxLines = "Maximální počet řádků na kartách doručené pošty"
override val settingsDefaultExploreResultType = "Výchozí typ výsledku vyhledávání pro Prozkoumat"
}

View File

@ -425,4 +425,5 @@ internal val DaStrings =
override val messageContentDeleted = "Du har slettet dette indhold"
override val actionRestore = "Gendan"
override val settingsInboxPreviewMaxLines = "Max antal linjer i indbakkekort"
override val settingsDefaultExploreResultType = "Standard søgeresultattype for Udforsk"
}

View File

@ -429,4 +429,5 @@ internal val DeStrings =
override val actionRestore = "Wiederherstellen"
override val settingsInboxPreviewMaxLines =
"Maximale Anzahl von Zeilen in Posteingangskarten"
override val settingsDefaultExploreResultType = "Standard-Suchergebnistyp für Explore"
}

View File

@ -433,4 +433,5 @@ internal val ElStrings =
override val actionRestore = "Αποκαταστήστε το"
override val settingsInboxPreviewMaxLines =
"Μέγιστος αριθμός γραμμών σε κάρτες εισερχομένων"
override val settingsDefaultExploreResultType = "Προεπιλεγμένος τύπος αποτελεσμάτων αναζήτησης για Εξερεύνηση"
}

View File

@ -364,7 +364,7 @@ internal val EnStrings =
override val actionSearchInComments = "Search in comments"
override val advancedSettingsDefaultLanguage = "Default language in editor"
override val undetermined = "Undefined"
override val exploreResultTypeTitle = "Result type"
override val exploreResultTypeTitle = "Search result type"
override val communityActionEdit = "Edit community"
override val editCommunityHeaderTextual = "Textual information"
override val editCommunityItemSidebar = "Sidebar"
@ -422,4 +422,5 @@ internal val EnStrings =
override val messageContentDeleted = "You have deleted this content"
override val actionRestore = "Restore"
override val settingsInboxPreviewMaxLines = "Inbox card preview max lines"
override val settingsDefaultExploreResultType = "Default search result type for explore"
}

View File

@ -421,4 +421,5 @@ internal val EoStrings =
override val messageContentDeleted = "Vi forigis ĉi tiun enhavon"
override val actionRestore = "Restaŭri"
override val settingsInboxPreviewMaxLines = "Maksimuma nombro da linioj en enirkestokartoj"
override val settingsDefaultExploreResultType = "Defaŭlta serĉrezulto-tipo por esploro"
}

View File

@ -427,4 +427,5 @@ internal val EsStrings =
override val actionRestore = "Restaurar"
override val settingsInboxPreviewMaxLines =
"Número máximo de líneas en tarjetas de mensajes"
override val settingsDefaultExploreResultType = "Tipo de resultado de búsqueda predeterminado para Descubre"
}

View File

@ -427,4 +427,5 @@ internal val EtStrings =
override val messageContentDeleted = "Olete selle sisu kustutanud"
override val actionRestore = "Taastama"
override val settingsInboxPreviewMaxLines = "Maksimaalne ridade arv postkasti kaartidel"
override val settingsDefaultExploreResultType = "Avastamise vaikeotsingutulemuse tüüp"
}

View File

@ -422,4 +422,5 @@ internal val FiStrings =
override val messageContentDeleted = "Olet poistanut tämän sisällön"
override val actionRestore = "Palauttaa"
override val settingsInboxPreviewMaxLines = "Saapuneiden korttien rivien enimmäismäärä"
override val settingsDefaultExploreResultType = "Tutkimuksen oletushakutulostyyppi"
}

View File

@ -432,4 +432,5 @@ internal val FrStrings =
override val actionRestore = "Restaurer"
override val settingsInboxPreviewMaxLines =
"Nombre maximum de lignes dans les cartes de boîte de réception"
override val settingsDefaultExploreResultType = "Type de résultat de recherche par défaut pour Explorer"
}

View File

@ -426,4 +426,5 @@ internal val GaStrings =
override val messageContentDeleted = "Tá an t-ábhar seo scriosta agat"
override val actionRestore = "Athchóirigh"
override val settingsInboxPreviewMaxLines = "An líon uasta línte i gcártaí bosca isteach"
override val settingsDefaultExploreResultType = "Cineál toradh cuardaigh réamhshocraithe le haghaidh Explore"
}

View File

@ -426,4 +426,5 @@ internal val HrStrings =
override val messageContentDeleted = "Izbrisali ste ovaj sadržaj"
override val actionRestore = "Vratiti"
override val settingsInboxPreviewMaxLines = "Maksimalan broj redaka u ulaznim karticama"
override val settingsDefaultExploreResultType = "Zadana vrsta rezultata pretraživanja za Istraživanje"
}

View File

@ -430,4 +430,5 @@ internal val HuStrings =
override val messageContentDeleted = "Ezt a tartalmat törölted"
override val actionRestore = "visszaállítás"
override val settingsInboxPreviewMaxLines = "Maximális sorok száma a postafiók kártyákban"
override val settingsDefaultExploreResultType = "A Felfedezés alapértelmezett keresési eredménytípusa"
}

View File

@ -427,4 +427,5 @@ internal val ItStrings =
override val messageContentDeleted = "Hai eliminato questo contenuto"
override val actionRestore = "Ripristina"
override val settingsInboxPreviewMaxLines = "Numero massimo righe anteprima in inbox"
override val settingsDefaultExploreResultType = "Tipo di risultato di ricerca predefinito per Esplora"
}

View File

@ -425,4 +425,6 @@ internal val LtStrings =
override val messageContentDeleted = "Ištrynėte šį turinį"
override val actionRestore = "Atkurti"
override val settingsInboxPreviewMaxLines = "Maksimalus eilučių skaičius gautųjų kortelėse"
override val settingsDefaultExploreResultType =
"Numatytasis Naršymo paieškos rezultatų tipas"
}

View File

@ -424,4 +424,5 @@ internal val LvStrings =
override val messageContentDeleted = "Jūs esat izdzēsis šo saturu"
override val actionRestore = "Atjaunot"
override val settingsInboxPreviewMaxLines = "Maksimālais rindu skaits iesūtnes kartītēs"
override val settingsDefaultExploreResultType = "Noklusējuma meklēšanas rezultāta veids funkcijai Izpētīt"
}

View File

@ -426,4 +426,5 @@ internal val MtStrings =
override val messageContentDeleted = "Ħassejt dan il-kontenut"
override val actionRestore = "Irrestawra"
override val settingsInboxPreviewMaxLines = "Numru massimu ta' linji fil-karti tal-inbox"
override val settingsDefaultExploreResultType = "Tip ta' riżultat tat-tfittxija default għal Esplora"
}

View File

@ -422,4 +422,5 @@ internal val NbStrings =
override val messageContentDeleted = "You have deleted this content"
override val actionRestore = "Restore"
override val settingsInboxPreviewMaxLines = "Inbox card preview max lines"
override val settingsDefaultExploreResultType = "Default search result type for Explore"
}

View File

@ -427,4 +427,5 @@ internal val NlStrings =
override val messageContentDeleted = "Je hebt deze inhoud verwijderd"
override val actionRestore = "Herstellen"
override val settingsInboxPreviewMaxLines = "Maximaal aantal regels in inboxkaarten"
override val settingsDefaultExploreResultType = "Standaard zoekresultaattype voor Explore"
}

View File

@ -424,4 +424,5 @@ internal val NnStrings =
override val messageContentDeleted = "Du har slettet dette innholdet"
override val actionRestore = "Restaurere"
override val settingsInboxPreviewMaxLines = "Maks antall linjer i innbokskort"
override val settingsDefaultExploreResultType = "Standard søkeresultattype for Utforsk"
}

View File

@ -427,4 +427,5 @@ internal val PlStrings =
override val actionRestore = "Przywrócić"
override val settingsInboxPreviewMaxLines =
"Maksymalna liczba linii w kartach skrzynki odbiorczej"
override val settingsDefaultExploreResultType = "Domyślny typ wyniku wyszukiwania dla Eksploruj"
}

View File

@ -425,4 +425,5 @@ internal val PtBrStrings =
override val actionRestore = "Restaura"
override val settingsInboxPreviewMaxLines =
"Número máximo de linhas nos cartões das mensagens"
override val settingsDefaultExploreResultType = "Tipo de resultado de pesquisa padrão para Explorar"
}

View File

@ -426,4 +426,5 @@ internal val PtStrings =
override val actionRestore = "Restaura"
override val settingsInboxPreviewMaxLines =
"Número máximo de linhas nos cartões das mensagens"
override val settingsDefaultExploreResultType = "Tipo de resultado de pesquisa padrão para Explorar"
}

View File

@ -353,7 +353,7 @@ internal val RoStrings =
override val settingsTitlePictures = "Imagini"
override val settingsTitleExperimental = "Experimente"
override val communitySetCustomSort = "Tip de sortare personalizat"
override val settingsDefaultExploreType = "Tip prestabilit de listare pentru Exploră"
override val settingsDefaultExploreType = "Tip prestabilit de listare pentru Explorarea"
override val actionSearchInCommunity = "Căută în comunitate"
override val actionExitSearch = "Ieși din căutare"
override val beta = "Beta"
@ -425,4 +425,5 @@ internal val RoStrings =
override val messageContentDeleted = "Ați șters acest conținut"
override val actionRestore = "Restaurați-l"
override val settingsInboxPreviewMaxLines = "Numărul maxim de linii în cardurile de inbox"
override val settingsDefaultExploreResultType = "Tip de rezultat de căutare prestabilit pentru Explorarea"
}

View File

@ -428,4 +428,6 @@ internal val RuStrings =
override val actionRestore = "Восстановить"
override val settingsInboxPreviewMaxLines =
"Максимальное количество строк во входящих карточках"
override val settingsDefaultExploreResultType =
"Тип результатов поиска по умолчанию для Explore"
}

View File

@ -428,4 +428,5 @@ internal val SkStrings =
override val actionRestore = "Obnoviť"
override val settingsInboxPreviewMaxLines =
"Maximálny počet riadkov na kartách doručenej pošty"
override val settingsDefaultExploreResultType = "Predvolený typ výsledku vyhľadávania pre Preskúmať"
}

View File

@ -426,4 +426,5 @@ internal val SlStrings =
override val actionRestore = "Obnovi"
override val settingsInboxPreviewMaxLines =
"Največje število vrstic v karticah prejete pošte"
override val settingsDefaultExploreResultType = "Privzeta vrsta rezultatov iskanja za Raziskovanje"
}

View File

@ -428,4 +428,5 @@ internal val SqStrings =
override val actionRestore = "Rivendos"
override val settingsInboxPreviewMaxLines =
"Numri maksimal i rreshtave në kartat e kutisë hyrëse"
override val settingsDefaultExploreResultType = "Lloji i parazgjedhur i rezultatit të kërkimit për Eksploro"
}

View File

@ -428,4 +428,5 @@ internal val SrStrings =
override val actionRestore = "Ресторе"
override val settingsInboxPreviewMaxLines =
"Максималан број линија у картицама пријемног сандучет"
override val settingsDefaultExploreResultType = "Подразумевани тип резултата претраге за Истраживање"
}

View File

@ -419,6 +419,7 @@ interface Strings {
val messageContentDeleted: String
val actionRestore: String
val settingsInboxPreviewMaxLines: String
val settingsDefaultExploreResultType: String
}
object Locales {

View File

@ -425,4 +425,5 @@ internal val SvStrings =
override val messageContentDeleted = "Du har tagit bort detta innehåll"
override val actionRestore = "Återställ"
override val settingsInboxPreviewMaxLines = "Max antal rader i inkorgskort"
override val settingsDefaultExploreResultType = "Standard sökresultattyp för Utforska"
}

View File

@ -421,4 +421,5 @@ internal val TokStrings =
override val messageContentDeleted = "tenpo pini la, sina weka e ijo ni"
override val actionRestore = "o awen e ona"
override val settingsInboxPreviewMaxLines = "nanpa linja pi lipu lon toki poki"
override val settingsDefaultExploreResultType = "nasin ijo pi lipu lukin"
}

View File

@ -427,4 +427,5 @@ internal val TrStrings =
override val actionRestore = "Eski haline getirmek"
override val settingsInboxPreviewMaxLines =
"Gelen kutusu kartlarındaki maksimum satır sayısı"
override val settingsDefaultExploreResultType = "Keşfet için varsayılan arama sonucu türü"
}

View File

@ -428,4 +428,5 @@ internal val UkStrings =
override val actionRestore = "Відновлення"
override val settingsInboxPreviewMaxLines =
"Максимальна кількість рядків у картках вхідних повідомлень"
override val settingsDefaultExploreResultType = "Тип результатів пошуку за умовчанням для Explore"
}

View File

@ -415,4 +415,5 @@ internal val ZhHkStrings =
override val messageContentDeleted = "您刪除咗呢個內容"
override val actionRestore = "恢復"
override val settingsInboxPreviewMaxLines = "Inbox card preview max lines"
override val settingsDefaultExploreResultType = "Default search result type for explore"
}

View File

@ -415,4 +415,5 @@ internal val ZhTwStrings =
override val messageContentDeleted = "您已刪除此內容"
override val actionRestore = "恢復"
override val settingsInboxPreviewMaxLines = "Inbox card preview max lines"
override val settingsDefaultExploreResultType = "Default search result type for explore"
}

View File

@ -158,6 +158,7 @@ class DefaultSettingsRepositoryTest {
enableToggleFavoriteInNavDrawer = if (model.enableToggleFavoriteInNavDrawer) 1 else 0,
account_id = 1,
inboxPreviewMaxLines = model.inboxPreviewMaxLines?.toLong(),
defaultExploreResultType = model.defaultExploreResultType.toLong(),
)
}
}
@ -231,6 +232,7 @@ class DefaultSettingsRepositoryTest {
enableToggleFavoriteInNavDrawer = if (model.enableToggleFavoriteInNavDrawer) 1 else 0,
account_id = 1,
inboxPreviewMaxLines = model.inboxPreviewMaxLines?.toLong(),
defaultExploreResultType = model.defaultExploreResultType.toLong(),
)
}
}
@ -299,6 +301,7 @@ class DefaultSettingsRepositoryTest {
commentIndentAmount: Int = 2,
enableToggleFavoriteInNavDrawer: Boolean = false,
inboxPreviewMaxLines: Int? = null,
defaultExploreResultType: Int = 2,
) = GetBy(
id = id,
theme = theme,
@ -361,5 +364,6 @@ class DefaultSettingsRepositoryTest {
commentIndentAmount = commentIndentAmount.toLong(),
enableToggleFavoriteInNavDrawer = if (enableToggleFavoriteInNavDrawer) 1 else 0,
inboxPreviewMaxLines = inboxPreviewMaxLines?.toLong(),
defaultExploreResultType = defaultExploreResultType.toLong(),
)
}

View File

@ -64,4 +64,5 @@ data class SettingsModel(
val commentIndentAmount: Int = 2,
val enableToggleFavoriteInNavDrawer: Boolean = false,
val inboxPreviewMaxLines: Int? = null,
val defaultExploreResultType: Int = 2,
)

View File

@ -64,6 +64,7 @@ private object KeyStoreKeys {
const val ENABLE_BUTTONS_TO_SCROLL_BETWEEN_COMMENTS = "enableButtonsToScrollBetweenComments"
const val FULL_WIDTH_IMAGES = "fullWidthImages"
const val COMMENT_INDENT_AMOUNT = "commentIndentAmount"
const val DEFAULT_EXPLORE_RESULT_TYPE = "defaultExploreResultType"
}
internal class DefaultSettingsRepository(
@ -158,6 +159,7 @@ internal class DefaultSettingsRepository(
fullWidthImages = if (settings.fullWidthImages) 1L else 0L,
enableToggleFavoriteInNavDrawer = if (settings.enableToggleFavoriteInNavDrawer) 1L else 0L,
inboxPreviewMaxLines = settings.inboxPreviewMaxLines?.toLong(),
defaultExploreResultType = settings.defaultExploreResultType.toLong(),
)
}
@ -236,6 +238,7 @@ internal class DefaultSettingsRepository(
fadeReadPosts = keyStore[KeyStoreKeys.FADE_READ_POSTS, false],
enableButtonsToScrollBetweenComments = keyStore[KeyStoreKeys.ENABLE_BUTTONS_TO_SCROLL_BETWEEN_COMMENTS, false],
fullWidthImages = keyStore[KeyStoreKeys.FULL_WIDTH_IMAGES, false],
defaultExploreResultType = keyStore[KeyStoreKeys.DEFAULT_EXPLORE_RESULT_TYPE, 2],
)
} else {
val entity = db.settingsQueries.getBy(accountId).executeAsOneOrNull()
@ -352,6 +355,10 @@ internal class DefaultSettingsRepository(
settings.enableButtonsToScrollBetweenComments,
)
keyStore.save(KeyStoreKeys.FULL_WIDTH_IMAGES, settings.fullWidthImages)
keyStore.save(
KeyStoreKeys.DEFAULT_EXPLORE_RESULT_TYPE,
settings.defaultExploreResultType,
)
} else {
db.settingsQueries.update(
theme = settings.theme?.toLong(),
@ -433,6 +440,7 @@ internal class DefaultSettingsRepository(
fullWidthImages = if (settings.fullWidthImages) 1L else 0L,
enableToggleFavoriteInNavDrawer = if (settings.enableToggleFavoriteInNavDrawer) 1L else 0L,
inboxPreviewMaxLines = settings.inboxPreviewMaxLines?.toLong(),
defaultExploreResultType = settings.defaultExploreResultType.toLong(),
)
}
}
@ -532,4 +540,5 @@ private fun GetBy.toModel() =
fullWidthImages = fullWidthImages == 1L,
enableToggleFavoriteInNavDrawer = enableToggleFavoriteInNavDrawer == 1L,
inboxPreviewMaxLines = inboxPreviewMaxLines?.toInt(),
defaultExploreResultType = defaultExploreResultType.toInt(),
)

View File

@ -76,6 +76,7 @@ internal data class SerializableSettings(
val fullWidthImages: Boolean = false,
val enableToggleFavoriteInNavDrawer: Boolean = false,
val inboxPreviewMaxLines: Int? = null,
val defaultExploreResultType: Int = 2,
)
internal fun SerializableSettings.toModel() =

View File

@ -61,6 +61,7 @@ CREATE TABLE SettingsEntity (
commentIndentAmount INTEGER NOT NULL DEFAULT 2,
enableToggleFavoriteInNavDrawer INTEGER NOT NULL DEFAULT 0,
inboxPreviewMaxLines INTEGER DEFAULT NULL,
defaultExploreResultType INTEGER NOT NULL DEFAULT 2,
FOREIGN KEY (account_id) REFERENCES AccountEntity(id) ON DELETE CASCADE,
UNIQUE(account_id)
);
@ -127,6 +128,7 @@ INSERT OR IGNORE INTO SettingsEntity (
commentIndentAmount,
enableToggleFavoriteInNavDrawer,
inboxPreviewMaxLines,
defaultExploreResultType,
account_id
) VALUES (
?,
@ -189,6 +191,7 @@ INSERT OR IGNORE INTO SettingsEntity (
?,
?,
?,
?,
?
);
@ -253,7 +256,8 @@ SET theme = ?,
fullWidthImages = ?,
commentIndentAmount = ?,
enableToggleFavoriteInNavDrawer = ?,
inboxPreviewMaxLines = ?
inboxPreviewMaxLines = ?,
defaultExploreResultType = ?
WHERE account_id = ?;
getBy:
@ -318,6 +322,7 @@ SELECT
fullWidthImages,
commentIndentAmount,
enableToggleFavoriteInNavDrawer,
inboxPreviewMaxLines
inboxPreviewMaxLines,
defaultExploreResultType
FROM SettingsEntity
WHERE account_id = ?;

View File

@ -0,0 +1,2 @@
ALTER TABLE SettingsEntity
ADD COLUMN defaultExploreResultType INTEGER NOT NULL DEFAULT 2;

View File

@ -45,3 +45,23 @@ fun SearchResultType.toReadableName(): String =
SearchResultType.Users -> LocalStrings.current.exploreResultTypeUsers
SearchResultType.Urls -> LocalStrings.current.createPostUrl
}
fun SearchResultType.toInt(): Int =
when (this) {
SearchResultType.Posts -> 1
SearchResultType.Communities -> 2
SearchResultType.Users -> 3
SearchResultType.Comments -> 4
SearchResultType.Urls -> 5
else -> 0
}
fun Int.toSearchResultType(): SearchResultType =
when (this) {
1 -> SearchResultType.Posts
2 -> SearchResultType.Communities
3 -> SearchResultType.Users
4 -> SearchResultType.Comments
5 -> SearchResultType.Urls
else -> SearchResultType.All
}

View File

@ -4,6 +4,7 @@ import cafe.adriel.voyager.core.model.ScreenModel
import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.LanguageModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.ListingType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SearchResultType
import kotlin.time.Duration
import kotlin.time.Duration.Companion.seconds
@ -107,6 +108,7 @@ interface AdvancedSettingsMviModel :
val enableButtonsToScrollBetweenComments: Boolean = false,
val enableToggleFavoriteInNavDrawer: Boolean = false,
val inboxPreviewMaxLines: Int? = null,
val defaultExploreResultType: SearchResultType = SearchResultType.Communities,
)
sealed interface Effect {

View File

@ -55,6 +55,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.DurationBot
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.DurationBottomSheetType
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.InboxTypeSheet
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.ListingTypeBottomSheet
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.ResultTypeBottomSheet
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.SelectLanguageDialog
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.SelectNumberBottomSheet
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.SelectNumberBottomSheetType
@ -255,7 +256,21 @@ class AdvancedSettingsScreen : Screen {
)
}
// default explore type
// default explore result type
SettingsRow(
title = LocalStrings.current.settingsDefaultExploreResultType,
value = uiState.defaultExploreResultType.toReadableName(),
onTap =
rememberCallback {
val sheet =
ResultTypeBottomSheet(
screenKey = "advancedSettings",
)
navigationCoordinator.showBottomSheet(sheet)
},
)
// default explore listing type
SettingsRow(
title = LocalStrings.current.settingsDefaultExploreType,
value = uiState.defaultExploreType.toReadableName(),

View File

@ -22,8 +22,10 @@ import com.github.diegoberaldin.raccoonforlemmy.core.utils.toInboxDefaultType
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toInboxUnreadOnly
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.IdentityRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.ListingType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SearchResultType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toInt
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toListingType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toSearchResultType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.SiteRepository
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
@ -102,6 +104,13 @@ class AdvancedSettingsViewModel(
changeInboxPreviewMaxLines(evt.value)
}
}.launchIn(this)
notificationCenter
.subscribe(NotificationCenterEvent.ChangeSearchResultType::class)
.onEach { evt ->
if (evt.screenKey == "advancedSettings") {
changeExploreResultType(evt.value)
}
}.launchIn(this)
updateAvailableLanguages()
@ -132,6 +141,7 @@ class AdvancedSettingsViewModel(
enableButtonsToScrollBetweenComments = settings.enableButtonsToScrollBetweenComments,
enableToggleFavoriteInNavDrawer = settings.enableToggleFavoriteInNavDrawer,
inboxPreviewMaxLines = settings.inboxPreviewMaxLines,
defaultExploreResultType = settings.defaultExploreResultType.toSearchResultType(),
)
}
}
@ -282,6 +292,17 @@ class AdvancedSettingsViewModel(
val settings =
settingsRepository.currentSettings.value.copy(defaultExploreType = value.toInt())
saveSettings(settings)
notificationCenter.send(NotificationCenterEvent.ResetExplore)
}
}
private fun changeExploreResultType(value: SearchResultType) {
screenModelScope.launch {
updateState { it.copy(defaultExploreResultType = value) }
val settings =
settingsRepository.currentSettings.value.copy(defaultExploreResultType = value.toInt())
saveSettings(settings)
notificationCenter.send(NotificationCenterEvent.ResetExplore)
}
}

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">لقد قمت بحذف هذا المحتوى</string>
<string name="actionRestore">يعيد</string>
<string name="settingsInboxPreviewMaxLines">الحد الأقصى لعدد الخطوط في بطاقات البريد الوارد</string>
<string name="settingsDefaultExploreResultType">وع نتيجة البحث الافتراضي للاستكشاف</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Вие изтрихте това съдържание</string>
<string name="actionRestore">Възстанови</string>
<string name="settingsInboxPreviewMaxLines">Максимален брой редове във входящите карти</string>
<string name="settingsDefaultExploreResultType">ип резултати от търсенето по подразбиране за Explore</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Tento obsah jste smazali</string>
<string name="actionRestore">Obnovit</string>
<string name="settingsInboxPreviewMaxLines">Maximální počet řádků na kartách doručené pošty</string>
<string name="settingsDefaultExploreResultType">Výchozí typ výsledku vyhledávání pro Prozkoumat</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Du har slettet dette indhold</string>
<string name="actionRestore">Gendan</string>
<string name="settingsInboxPreviewMaxLines">Max antal linjer i indbakkekort</string>
<string name="settingsDefaultExploreResultType">Standard søgeresultattype for Udforsk</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Sie haben diesen Inhalt gelöscht</string>
<string name="actionRestore">Wiederherstellen</string>
<string name="settingsInboxPreviewMaxLines">Maximale Anzahl von Zeilen in Posteingangskarten</string>
<string name="settingsDefaultExploreResultType">Standard-Suchergebnistyp für Explore</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Έχετε διαγράψει αυτό το περιεχόμενο</string>
<string name="actionRestore">Αποκαταστήστε το</string>
<string name="settingsInboxPreviewMaxLines">Μέγιστος αριθμός γραμμών σε κάρτες εισερχομένων</string>
<string name="settingsDefaultExploreResultType">Προεπιλεγμένος τύπος αποτελεσμάτων αναζήτησης για Εξερεύνηση</string>
</resources>

View File

@ -356,7 +356,7 @@
<string name="actionSearchInComments">Search in comments</string>
<string name="advancedSettingsDefaultLanguage">Default language in editor</string>
<string name="undetermined">Undefined</string>
<string name="exploreResultTypeTitle">Result type</string>
<string name="exploreResultTypeTitle">Search result type</string>
<string name="communityActionEdit">Edit community</string>
<string name="editCommunityHeaderTextual">Textual information</string>
<string name="editCommunityItemSidebar">Sidebar</string>
@ -411,4 +411,5 @@
<string name="messageContentDeleted">You have deleted this content</string>
<string name="actionRestore">Restore</string>
<string name="settingsInboxPreviewMaxLines">Inbox card preview max lines</string>
<string name="settingsDefaultExploreResultType">Default search result type for explore</string>
</resources>

415
l10n/values-eo/strings.xml Normal file
View File

@ -0,0 +1,415 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="actionBackToTop">Reen al la supro</string>
<string name="actionChat">Sendi Mesaĝo:</string>
<string name="actionClearRead">Forviŝi legadon</string>
<string name="actionCreatePost">Krei afiŝon</string>
<string name="actionReply">Respondi</string>
<string name="actionActivateZombieMode">Aktivigi zombian moduson</string>
<string name="actionDeactivateZombieMode">Malaktivigi zombian moduson</string>
<string name="buttonClose">Fermi</string>
<string name="buttonConfirm">Konfirmi</string>
<string name="buttonLoad">Ŝargi</string>
<string name="buttonReset">Restarigi</string>
<string name="buttonRetry">Reprovi</string>
<string name="commentActionDelete">Forigi</string>
<string name="communityDetailBlock">Bloka</string>
<string name="communityDetailBlockInstance">Bloki nodon</string>
<string name="communityDetailInfo">Informo pri la komunumo</string>
<string name="communityDetailInstanceInfo">Detaloj pri la nodo</string>
<string name="communityInfoComments">komentoj</string>
<string name="communityInfoDailyActiveUsers">aktivaj uzantoj (tago)</string>
<string name="communityInfoMonthlyActiveUsers">aktivaj uzantoj (monato)</string>
<string name="communityInfoPosts">afiŝoj</string>
<string name="communityInfoSubscribers">abonantoj</string>
<string name="communityInfoWeeklyActiveUsers">aktivaj uzantoj (semajno)</string>
<string name="createCommentBody">Korpo de la komento</string>
<string name="createCommentTitle">Nova komento</string>
<string name="createPostBody">Korpo de la afiŝo</string>
<string name="createPostCommunity">Komunumo</string>
<string name="createPostCrossPostText">Kruco poŝtita de:</string>
<string name="createPostName">Titolo de la afiŝo</string>
<string name="createPostNsfw">NSFW</string>
<string name="createPostTabEditor">Redaktilo</string>
<string name="createPostTabPreview">Antaŭrigardo</string>
<string name="createPostTitle">Nova afiŝo</string>
<string name="createPostUrl">Retadreso:</string>
<string name="createReportPlaceholder">Teksto de la raporto (nedeviga)</string>
<string name="createReportTitleComment">Raporti komenton</string>
<string name="createReportTitlePost">Raporti afiŝon</string>
<string name="dialogRawContentText">Teksto</string>
<string name="dialogRawContentTitle">Titolo</string>
<string name="dialogRawContentUrl">Retadreso:</string>
<string name="dialogTitleChangeInstance">Ŝanĝi nodon</string>
<string name="dialogTitleRawContent">Kruda enhavo</string>
<string name="dialogTitleSelectCommunity">Elekti komunumon</string>
<string name="editCommentTitle">Redakti komenton</string>
<string name="editPostTitle">Redakti afiŝon</string>
<string name="exploreResultTypeAll">Ĉiuj</string>
<string name="exploreResultTypeComments">Komentoj</string>
<string name="exploreResultTypeCommunities">Komunumoj</string>
<string name="exploreResultTypePosts">Afiŝoj</string>
<string name="exploreResultTypeUsers">Uzantoj</string>
<string name="exploreSearchPlaceholder">Serĉi</string>
<string name="homeInstanceVia">per</string>
<string name="homeListingTitle">Listadoj</string>
<string name="homeListingTypeAll">Ĉiuj</string>
<string name="homeListingTypeLocal">Lokaj</string>
<string name="homeListingTypeSubscribed">Subskribitaj</string>
<string name="homeSortTitle">Ordigi laŭ:</string>
<string name="homeSortTypeActive">Aktivaj</string>
<string name="homeSortTypeControversial">Kontestataj</string>
<string name="homeSortTypeHot">Popularaj</string>
<string name="homeSortTypeMostComments">La plej multaj komentoj</string>
<string name="homeSortTypeNew">Novaj</string>
<string name="homeSortTypeNewComments">Novaj komentoj</string>
<string name="homeSortTypeOld">Maljunaj</string>
<string name="homeSortTypeScaled">Proporcie</string>
<string name="homeSortTypeTop">Supre</string>
<string name="homeSortTypeTop12Hours">Supraj 12 horoj</string>
<string name="homeSortTypeTop12HoursShort">12h</string>
<string name="homeSortTypeTop6Hours">Supraj 6 horoj</string>
<string name="homeSortTypeTop6HoursShort">6h</string>
<string name="homeSortTypeTopDay">Supraj de la tago</string>
<string name="homeSortTypeTopDayShort">tago</string>
<string name="homeSortTypeTopHour">Supraj de la horo</string>
<string name="homeSortTypeTopHourShort">1h</string>
<string name="homeSortTypeTopMonth">Supraj de la monato</string>
<string name="homeSortTypeTopMonthShort">monato</string>
<string name="homeSortTypeTopWeek">Supraj de la semajno</string>
<string name="homeSortTypeTopWeekShort">Semajno</string>
<string name="homeSortTypeTopYear">Supraj de la jaro</string>
<string name="homeSortTypeTopYearShort">jaro</string>
<string name="inboxChatMessage">Mesaĝo</string>
<string name="inboxItemMention">menciis vin en</string>
<string name="inboxItemReplyComment">respondis al via komento en</string>
<string name="inboxItemReplyPost">respondis al via afiŝo en</string>
<string name="inboxListingTypeAll">Ĉiuj</string>
<string name="inboxListingTypeTitle">Tipo de leterkesto</string>
<string name="inboxListingTypeUnread">Nelegitai</string>
<string name="inboxNotLoggedMessage">Vi nun ne estas ensalutinta.\nBonvolu aldoni konton en la profila ekrano por vidi vian enirkeston.</string>
<string name="inboxSectionMentions">Mencioj</string>
<string name="inboxSectionMessages">Mesaĝoj</string>
<string name="inboxSectionReplies">Respondoj</string>
<string name="instanceDetailCommunities">Komunumoj</string>
<string name="instanceDetailTitle">Nodo:</string>
<string name="lang">eo</string>
<string name="loginFieldInstanceName">Nomo de la nodo</string>
<string name="loginFieldLabelOptional">(nedeviga)</string>
<string name="loginFieldPassword">Pasvorto</string>
<string name="loginFieldToken">Ĵetono TOTP- 2FA</string>
<string name="loginFieldUserName">Salutnomo aŭ retpoŝta adreso:</string>
<string name="manageAccountsButtonAdd">Aldoni konton</string>
<string name="manageAccountsTitle">Administri kontojn</string>
<string name="manageSubscriptionsHeaderMulticommunities">Multi-komunumoj</string>
<string name="manageSubscriptionsHeaderSubscriptions">Subskriboj</string>
<string name="messageEmptyComments">Tie estas tro silente.\nĈu vi ŝatus esti tiu, kiu skribu la unuan komenton.</string>
<string name="messageEmptyList">Neniuj eroj por montri</string>
<string name="messageErrorLoadingComments">Eraro okazis dum ŝarĝo de komentoj.</string>
<string name="messageGenericError">Ĝenerala eraro</string>
<string name="messageImageLoadingError">Eraro ŝarĝante bildon</string>
<string name="messageInvalidField">Nevalida kampo</string>
<string name="messageMissingField">Mankanta kampo</string>
<string name="messageOperationSuccessful">Operacio sukcese finiĝis</string>
<string name="multiCommunityEditorCommunities">Komunumoj</string>
<string name="multiCommunityEditorIcon">Piktogramo</string>
<string name="multiCommunityEditorName">Nomo</string>
<string name="multiCommunityEditorTitle">Multi-komunuma redaktilo</string>
<string name="navigationDrawerAnonymous">Anonima</string>
<string name="navigationDrawerTitleBookmarks">Konservitajn erojn</string>
<string name="navigationDrawerTitleSubscriptions">Administri abonojn</string>
<string name="navigationHome">Afiŝoj</string>
<string name="navigationInbox">Enirkesto</string>
<string name="navigationProfile">Profilo</string>
<string name="navigationSearch">Esplori</string>
<string name="navigationSettings">Agordoj</string>
<string name="postActionCrossPost">Kruc-afiŝo</string>
<string name="postActionEdit">Redakti</string>
<string name="postActionHide">Kaŝi</string>
<string name="postActionReport">Raporti</string>
<string name="postActionSeeRaw">Vidi krudan</string>
<string name="postActionShare">Kunhavigi</string>
<string name="postDetailCrossPosts">ankaŭ poŝtita al:</string>
<string name="postDetailLoadMoreComments">Ŝarĝi pliajn komentojn</string>
<string name="postHourShort">h</string>
<string name="postMinuteShort">m</string>
<string name="postSecondShort">s</string>
<string name="profileButtonLogin">Ensaluti</string>
<string name="profileDayShort">d</string>
<string name="profileMillionShort">m</string>
<string name="profileMonthShort">m</string>
<string name="profileNotLoggedMessage">Vi nun ne estas ensalutinta.\nBonvolu aldoni konton por daŭrigi.</string>
<string name="profileSectionComments">Komentoj</string>
<string name="profileSectionPosts">Afiŝoj</string>
<string name="profileThousandShort">k</string>
<string name="profileYearShort">j</string>
<string name="settingsAbout">Pri ĉi tiu aplikaĵo</string>
<string name="settingsAboutAppVersion">Programversio</string>
<string name="settingsAboutChangelog">Vidi plenan ŝanĝregistron</string>
<string name="settingsAboutReportGithub">Raporti cimon (GitHub)</string>
<string name="settingsAboutReportEmail">Raporti cimon (retpoŝto)</string>
<string name="settingsAboutViewGithub">Vidi ĉe GitHub</string>
<string name="settingsAboutViewLemmy">Lemmy komunumo</string>
<string name="settingsAutoExpandComments">Aŭtomate pligrandigi komentojn</string>
<string name="settingsAutoLoadImages">Aŭtomate montri bildojn</string>
<string name="settingsBlurNsfw">Malklarigi NSFW bildoj</string>
<string name="settingsColorAquamarine">🐬 Distrita delfeno</string>
<string name="settingsColorBanana">🦔 Ekscitiga erinaco</string>
<string name="settingsColorBlue">🐳 Bananeca baleno</string>
<string name="settingsColorCustom">Propra</string>
<string name="settingsColorDialogAlpha">A</string>
<string name="settingsColorDialogBlue">B</string>
<string name="settingsColorDialogGreen">G</string>
<string name="settingsColorDialogRed">R</string>
<string name="settingsColorDialogTitle">Elekti koloron</string>
<string name="settingsColorGray">🦝 Lunatika lavurso</string>
<string name="settingsColorGreen">🐸 Ridinda rano</string>
<string name="settingsColorOrange">🦊 Vartistika vulpo</string>
<string name="settingsColorPink">🦄 Unika unikorno</string>
<string name="settingsColorPurple">🐙 Perplexa polpo</string>
<string name="settingsColorRed">🦀 Krokodila krabo</string>
<string name="settingsColorWhite">🐼 Utopia urso</string>
<string name="settingsContentFontLarge">Granda</string>
<string name="settingsContentFontLarger">Pli granda</string>
<string name="settingsContentFontLargest">Duoble pli granda</string>
<string name="settingsContentFontNormal">Normala</string>
<string name="settingsContentFontScale">Teksta grandeco de afiŝoj</string>
<string name="settingsContentFontSmall">Malgranda</string>
<string name="settingsContentFontSmaller">Pli malgranda</string>
<string name="settingsContentFontSmallest">Duoble pli malgranda</string>
<string name="settingsCustomSeedColor">Propra etosa koloro</string>
<string name="settingsDefaultCommentSortType">Apriora komenta speco</string>
<string name="settingsDefaultListingType">Apriora listada speco</string>
<string name="settingsDefaultPostSortType">Apriora afiŝa speco</string>
<string name="settingsDownvoteColor">Koloro de la malfavoraj voĉoj</string>
<string name="settingsDynamicColors">Uzi dinamikajn kolorojn</string>
<string name="settingsEnableCrashReport">Enŝalti kraŝraportojn</string>
<string name="settingsEnableDoubleTap">Enŝalti duoblan frapan agon</string>
<string name="settingsEnableSwipeActions">Enŝalti svingagojn</string>
<string name="settingsFullHeightImages">Plenaj altobildoj</string>
<string name="settingsIncludeNsfw">Inkluzivi NSFW-enhavojn</string>
<string name="settingsLanguage">Lingvo</string>
<string name="settingsNavigationBarTitlesVisible">Montri navigadbretajn titolojn</string>
<string name="settingsOpenUrlExternal">Malfermi URLojn</string>
<string name="settingsPointsShort">pt</string>
<string name="settingsPostLayout">Poŝta aranĝo</string>
<string name="settingsPostLayoutCard">Karto</string>
<string name="settingsPostLayoutCompact">Kunpremita</string>
<string name="settingsPostLayoutFull">Plena</string>
<string name="settingsSectionAppearance">Rigardo kaj sento</string>
<string name="settingsAdvanced">Altnivelaj agordoj</string>
<string name="settingsSectionDebug">Sencimigi</string>
<string name="settingsSectionGeneral">Generalaj</string>
<string name="settingsSectionNsfw">NSFW</string>
<string name="settingsThemeBlack">Malhela (AMOLED)</string>
<string name="settingsThemeDark">Malhela</string>
<string name="settingsThemeLight">Hela</string>
<string name="settingsUiFontFamily">UI tiparo</string>
<string name="settingsUiFontScale">UI tekstograndeco</string>
<string name="settingsUiTheme">UI etoso</string>
<string name="settingsUpvoteColor">Koloro de la favoraj voĉoj</string>
<string name="settingsHideNavigationBar">Kaŝi navigobreton dum rulumado</string>
<string name="settingsZombieModeInterval">Tempodaŭro de la zombia reĝimo</string>
<string name="settingsZombieModeScrollAmount">Rula kvanto de la zombia reĝimo</string>
<string name="settingsMarkAsReadWhileScrolling">Marki afiŝojn kiel legitaj dum rulumado</string>
<string name="actionQuote">Citi</string>
<string name="modActionAllow">Permesi al la uzanto denove</string>
<string name="modActionBan">Malpermesi uzanton</string>
<string name="modActionOpenReports">Malfermi raportojn</string>
<string name="modActionMarkAsFeatured">Marki kiel prezentita</string>
<string name="modActionUnmarkAsFeatured">Malmarki kiel prezentita</string>
<string name="modActionLock">Ŝlosi</string>
<string name="modActionUnlock">Malŝlosi</string>
<string name="modActionRemove">Forigi</string>
<string name="modActionMarkAsDistinguished">Marki kiel distingita</string>
<string name="modActionUnmarkAsDistinguished">Malmarki kiel distingita</string>
<string name="reportListTitle">Raportlisto</string>
<string name="reportListTypeTitle">Raportlista tipo</string>
<string name="reportListTypeAll">Ĉiuj</string>
<string name="reportListTypeUnresolved">Nesolvitaj</string>
<string name="reportActionResolve">Solvi</string>
<string name="reportActionUnresolve">Nesolvi</string>
<string name="sidebarNotLoggedMessage">Bonvenon al Raccoon!\n\nEn anonima reĝimo, uzu la falbutonon (▼) supre por ŝanĝi nodon.\n\nVi povas ensaluti al via instanco ĉe iam ajn de la Profila ekrano.\n\nĜuu Lemmy!</string>
<string name="settingsDefaultInboxType">Defaŭlta enirkesto tipo</string>
<string name="modActionAddMod">Aldoni moderigilon</string>
<string name="modActionRemoveMod">Forigi moderigilon</string>
<string name="settingsVoteFormat">Voĉdona formato</string>
<string name="settingsVoteFormatAggregated">Entute</string>
<string name="settingsVoteFormatSeparated">Apartigite</string>
<string name="settingsVoteFormatPercentage">Procento</string>
<string name="settingsFontFamilyDefault">Sistemo</string>
<string name="postReplySourceAccount">de:</string>
<string name="settingsCommentBarTheme">Etoso de la komenta trinkejo</string>
<string name="settingsCommentBarThemeBlue">🌊 Ocean</string>
<string name="settingsCommentBarThemeGreen">🥑 Avokado</string>
<string name="settingsCommentBarThemeRed">🍓 Frago</string>
<string name="settingsCommentBarThemeMulti">🌈 Ĉielarko</string>
<string name="messageConfirmExit">Frapu 🔙 denove por eliri</string>
<string name="communityActionUnsubscribe">Malaboni</string>
<string name="settingsSearchPostsTitleOnly">Serĉi afiŝojn nur en titolo</string>
<string name="settingsContentFontFamily">Enhavo tiparo</string>
<string name="communityInfoModerators">Moderigantoj</string>
<string name="communityActionAddFavorite">Aldoni al plej ŝatataj</string>
<string name="communityActionRemoveFavorite">Forigi el plej ŝatataj</string>
<string name="communityActionViewModlog">Vidu protokolon de modereco</string>
<string name="modlogTitle">Protokolo de modereco</string>
<string name="modlogItemModAdded">estis aldonita kiel moderanto</string>
<string name="modlogItemModRemoved">estis forigita kiel moderigaĵo</string>
<string name="modlogItemUserBanned">estis malpermesita</string>
<string name="modlogItemUserUnbanned">estis nemalpermesita</string>
<string name="modlogItemPostFeatured">estis markita kiel elstara afiŝo</string>
<string name="modlogItemPostUnfeatured">estis markita kiel ne-elstarigita afiŝo</string>
<string name="modlogItemPostLocked">estis ŝlosita</string>
<string name="modlogItemPostUnlocked">estis malŝlosita</string>
<string name="modlogItemPostRemoved">estis forigita</string>
<string name="modlogItemPostRestored">estis restarigita</string>
<string name="modlogItemCommentRemoved">estis forigita de la komentoj de</string>
<string name="modlogItemCommentRestored">estis restarigita en la komentoj de</string>
<string name="modlogItemCommunityTransfer">la komunumo estis translokigita al</string>
<string name="blockActionUser">Bloki uzanton</string>
<string name="blockActionCommunity">Bloki komunumon</string>
<string name="userDetailInfo">Detaloj pri la uzanto</string>
<string name="userInfoModerates">Moderatoro de</string>
<string name="userInfoAdmin">administranto</string>
<string name="settingsReplyColor">Koloro de responda ago</string>
<string name="settingsSectionAccount">Kontagordoj</string>
<string name="settingsWebPreferences">Retaj preferoj</string>
<string name="settingsWebHeaderPersonal">Personaj informoj</string>
<string name="settingsWebHeaderContents">Enhavo</string>
<string name="settingsWebHeaderNotifications">Sciigoj</string>
<string name="settingsWebAvatar">Avataro</string>
<string name="settingsWebBanner">Standardo</string>
<string name="settingsWebBio">Bio</string>
<string name="settingsWebBot">Bot</string>
<string name="settingsWebDisplayName">Montra nomo</string>
<string name="settingsWebMatrix">Uzantidentigilo Matrix</string>
<string name="settingsWebEmail">Retpoŝto</string>
<string name="settingsWebShowBot">Montri botkontojn</string>
<string name="settingsWebShowNsfw">Montri NSFW</string>
<string name="settingsWebShowRead">Montri legitajn afiŝojn</string>
<string name="settingsWebEmailNotifications">Sendi retpoŝtajn sciigojn</string>
<string name="settingsManageBan">Malpermesoj kaj filtriloj</string>
<string name="settingsManageBanActionUnban">Forigi malpermeson</string>
<string name="settingsManageBanSectionInstances">Ekzemploj</string>
<string name="settingsEdgeToEdge">Enhavo de rando al rando</string>
<string name="settingsPostBodyMaxLines">Maksimuma nombro da linioj por afiŝokorpo</string>
<string name="settingsPostBodyMaxLinesUnlimited">Senlima</string>
<string name="messageContentRemoved">(ĉi tiu enhavo estis forigita)</string>
<string name="postListLoadMorePosts">Ŝarĝi pli da afiŝoj</string>
<string name="settingsInfiniteScrollDisabled">Malebligi senfinan movadadon</string>
<string name="dialogTitleAddInstance">Aldoni nodon</string>
<string name="settingsSaveColor">Koloro de la konserva ago</string>
<string name="settingsConfigureSwipeActions">Agordi glitajn agojn</string>
<string name="actionUpvote">Favora voĉdono</string>
<string name="actionDownvote">Malfavora voĉdono</string>
<string name="actionSave">Savi</string>
<string name="actionToggleRead">Legita/nelegita</string>
<string name="configureActionsSideStart">Agoj sur la maldekstra flanko</string>
<string name="configureActionsSideEnd">Agoj sur la dekstra flanko</string>
<string name="selectActionTitle">Elekti agon</string>
<string name="buttonAdd">Aldoni novan</string>
<string name="barThemeOpaque">Opaka</string>
<string name="barThemeTransparent">Travidebla</string>
<string name="settingsBarTheme">Temo de la statuso kaj navigadbreto</string>
<string name="settingsColorsAndFonts">Aplika aspekto</string>
<string name="settingsAboutViewGooglePlay">Vidi sur Google Play</string>
<string name="settingsUserManual">Uzantmanlibro</string>
<string name="settingsShowScores">Montri votojn</string>
<string name="settingsVoteFormatHidden">Kaŝita</string>
<string name="settingsCommentBarThickness">Komento trinkejo dikeco</string>
<string name="settingsPreferUserNicknames">Uzu vidnomojn por uzantoj kaj komunumoj</string>
<string name="messageVideoNsfw">Ĉi tiu video estis markita kiel NSFW</string>
<string name="settingsTitleFontScale">Tekstograndeco de titoloj</string>
<string name="settingsCommentFontScale">Tekstograndeco de komentoj</string>
<string name="settingsAncillaryFontScale">Grandeco de helpaj tekstoj</string>
<string name="settingsConfigureContent">Enhavo aspekto</string>
<string name="settingsConfigureText">Teksto</string>
<string name="settingsConfigureCustomizations">Personigoj</string>
<string name="navigationDrawerTitleDrafts">Malnetoj</string>
<string name="moderatorZoneTitle">Iloj por moderigaĵoj</string>
<string name="moderatorZoneActionContents">Enhavon moderigi</string>
<string name="messageAuthIssue">Okazis eraro dum venigado de uzantdatenoj, provu refreŝigi la ekranon</string>
<string name="banReasonPlaceholder">Kialo (laŭvola)</string>
<string name="banItemPermanent">Konstanta malpermeso</string>
<string name="banItemRemoveData">Forigi datumojn</string>
<string name="banItemDurationDays">Daŭro (tagoj)</string>
<string name="messageUnsavedChanges">Estas nekonservitaj ŝanĝoj, ĉu vi certas, ke vi volas eliri?</string>
<string name="buttonNoStay">Ne, resti ĉi tie</string>
<string name="buttonYesQuit">Jes, eliri</string>
<string name="settingsItemImageSourcePath">Konservi bildojn en specifaj subdosierujoj</string>
<string name="settingsSubtitleImageSourcePath">uzi komunumon aŭ uzantan tenilon en vojoj</string>
<string name="settingsTitleDisplay">Ekrano</string>
<string name="settingsTitleReading">Legado kaj enhavo</string>
<string name="settingsTitlePictures">Bildoj</string>
<string name="settingsTitleExperimental">Eksperimentoj</string>
<string name="communitySetCustomSort">Propra ordiga tipo</string>
<string name="settingsDefaultExploreType">Defaŭlta speco de nutraĵo por esploro</string>
<string name="actionSearchInCommunity">Serĉi ene de komunumo</string>
<string name="actionExitSearch">Eliru serĉon</string>
<string name="beta">Betao</string>
<string name="actionCopyClipboard">Kopii al tondujo</string>
<string name="copyTitle">Kopiu titolon</string>
<string name="copyText">Kopiu tekston</string>
<string name="copyBoth">Kopiu ambaŭ</string>
<string name="profileUpvotesDownvotes">Favoraj &amp; malfavoraj voĉoj</string>
<string name="filteredContentsType">Enhavo tipo</string>
<string name="actionSearchInComments">Serĉi en komentoj</string>
<string name="advancedSettingsDefaultLanguage">Defaŭlta lingvo en la redaktilo</string>
<string name="undetermined">Nedifinita</string>
<string name="exploreResultTypeTitle">Rezulta tipo</string>
<string name="communityActionEdit">Redaktu komunumon</string>
<string name="editCommunityHeaderTextual">Tekstaj informoj</string>
<string name="editCommunityItemSidebar">Flankmenuo</string>
<string name="editCommunityItemPostingRestrictedToMods">Afiŝado limigita al moderigaĵoj</string>
<string name="messageAreYouSure">Ĉu vi certas, ke vi volas daŭrigi?</string>
<string name="buttonCancel">Nuligi</string>
<string name="shareModeUrl">Kunhavigi kiel URL</string>
<string name="shareModeFile">Kunhavigi kiel dosiero</string>
<string name="modlogItemCommunityPurged">purigis komunumon</string>
<string name="modlogItemCommentPurged">purigis komenton</string>
<string name="modlogItemPersonPurged">havas elpurigitan personon</string>
<string name="modlogItemPostPurged">purigis postenon</string>
<string name="modlogItemHidden">estis kaŝita</string>
<string name="modlogItemUnhidden">estis rivelita</string>
<string name="settingsAboutLicences">Licencoj</string>
<string name="settingsInboxBackgroundCheckPeriod">Kontroli nelegitajn erojn en la fono</string>
<string name="never">Neniam</string>
<string name="settingsAppIcon">Ikono de aplikaĵo</string>
<string name="requiresRestart">(rekomenco necesas)</string>
<string name="appIconDefault">Defaŭlte</string>
<string name="appIconAlt1">Monokromata</string>
<string name="settingsFadeReadPosts">Fadi legitajn afiŝojn</string>
<string name="settingsShowUnreadComments">Montri nombron da nelegitaj komentoj</string>
<string name="actionLogout">Elsaluti</string>
<string name="settingsImport">Importi agordojn el dosiero</string>
<string name="settingsExport">Eksporti agordojn al dosiero</string>
<string name="settingsEnableButtonsToScrollBetweenComments">Navigaj butonoj en post-ekrano</string>
<string name="settingsUrlOpeningModeInternal">En-apo</string>
<string name="settingsUrlOpeningModeExternal">Ekstera retumilo</string>
<string name="settingsUrlOpeningModeCustomTabs">Propraj langetoj</string>
<string name="settingsFullWidthImages">Plenlarĝaj bildoj</string>
<string name="contentScaleFit">Konveni la grandecon</string>
<string name="contentScaleFillWidth">Plenigi la larĝon</string>
<string name="contentScaleFillHeight">Plenigi la altecon</string>
<string name="settingsCommentIndentAmount">Larĝeco de indentaĵo de komentoj</string>
<string name="postActionUnhide">Reverti kaŝon</string>
<string name="adminActionPurge">Elpurigi</string>
<string name="adminActionMarkAsFeatured">Marki kiel elstara (nodo)</string>
<string name="adminActionUnmarkAsFeatured">Malmarki kiel elstara (nodo)</string>
<string name="communitySetPreferredLanguage">Agordi preferatan lingvon</string>
<string name="appIconClassical">Klasika</string>
<string name="settingsAboutAcknowledgements">Dankon</string>
<string name="actionCreateCommunity">Krei komunumon</string>
<string name="editCommunityItemVisibility">Videbleco</string>
<string name="communityVisibilityLocalOnly">nur loka instanco</string>
<string name="communityVisibilityPublic">publika</string>
<string name="noticeCommunityLocalOnly">Ĉi tiu komunumo estas videbla nur ene de la nuna nodo</string>
<string name="noticeBannedUser">La nuna uzanto estas malpermesita de ĉi tiu komunumo</string>
<string name="settingsHiddenPosts">Kaŝitaj afiŝoj</string>
<string name="settingsMediaList">Amaskomunikiloj alŝutoj</string>
<string name="settingsEnableToggleFavoriteInNavDrawer">Aldoni/forigi plej ŝatatajn en navigada tirkesto</string>
<string name="messageContentDeleted">Vi forigis ĉi tiun enhavon</string>
<string name="actionRestore">Restaŭri</string>
<string name="settingsInboxPreviewMaxLines">Maksimuma nombro da linioj en enirkestokartoj</string>
<string name="settingsDefaultExploreResultType">Defaŭlta serĉrezulto-tipo por esploro</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Has eliminado este contenido</string>
<string name="actionRestore">Restaurar</string>
<string name="settingsInboxPreviewMaxLines">Número máximo de líneas en tarjetas de mensajes</string>
<string name="settingsDefaultExploreResultType">Tipo de resultado de búsqueda predeterminado para Descubre</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Olete selle sisu kustutanud</string>
<string name="actionRestore">Taastama</string>
<string name="settingsInboxPreviewMaxLines">Maksimaalne ridade arv postkasti kaartidel</string>
<string name="settingsDefaultExploreResultType">Avastamise vaikeotsingutulemuse tüüp</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Olet poistanut tämän sisällön</string>
<string name="actionRestore">Palauttaa</string>
<string name="settingsInboxPreviewMaxLines">Saapuneiden korttien rivien enimmäismäärä</string>
<string name="settingsDefaultExploreResultType">Tutkimuksen oletushakutulostyyppi</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Vous avez supprimé ce contenu</string>
<string name="actionRestore">Restaurer</string>
<string name="settingsInboxPreviewMaxLines">Nombre maximum de lignes dans les cartes de boîte de réception</string>
<string name="settingsDefaultExploreResultType">Type de résultat de recherche par défaut pour Explorer</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Tá an t-ábhar seo scriosta agat</string>
<string name="actionRestore">Athchóirigh</string>
<string name="settingsInboxPreviewMaxLines">An líon uasta línte i gcártaí bosca isteach</string>
<string name="settingsDefaultExploreResultType">Cineál toradh cuardaigh réamhshocraithe le haghaidh Explore</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Izbrisali ste ovaj sadržaj</string>
<string name="actionRestore">Vratiti</string>
<string name="settingsInboxPreviewMaxLines">Maksimalan broj redaka u ulaznim karticama</string>
<string name="settingsDefaultExploreResultType">Zadana vrsta rezultata pretraživanja za Istraživanje</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Ezt a tartalmat törölted</string>
<string name="actionRestore">visszaállítás</string>
<string name="settingsInboxPreviewMaxLines">Maximális sorok száma a postafiók kártyákban</string>
<string name="settingsDefaultExploreResultType">A Felfedezés alapértelmezett keresési eredménytípusa</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Hai eliminato questo contenuto</string>
<string name="actionRestore">Ripristina</string>
<string name="settingsInboxPreviewMaxLines">Numero massimo righe anteprima in inbox</string>
<string name="settingsDefaultExploreResultType">Tipo di risultato di ricerca predefinito per Esplora</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Ištrynėte šį turinį</string>
<string name="actionRestore">Atkurti</string>
<string name="settingsInboxPreviewMaxLines">Maksimalus eilučių skaičius gautųjų kortelėse</string>
<string name="settingsDefaultExploreResultType">Numatytasis Naršymo paieškos rezultatų tipas</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Jūs esat izdzēsis šo saturu</string>
<string name="actionRestore">Atjaunot</string>
<string name="settingsInboxPreviewMaxLines">Maksimālais rindu skaits iesūtnes kartītēs</string>
<string name="settingsDefaultExploreResultType">Noklusējuma meklēšanas rezultāta veids funkcijai Izpētīt</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Ħassejt dan il-kontenut</string>
<string name="actionRestore">Irrestawra</string>
<string name="settingsInboxPreviewMaxLines">Numru massimu ta' linji fil-karti tal-inbox</string>
<string name="settingsDefaultExploreResultType">Tip ta' riżultat tat-tfittxija default għal Esplora</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">You have deleted this content</string>
<string name="actionRestore">Restore</string>
<string name="settingsInboxPreviewMaxLines">Inbox card preview max lines</string>
<string name="settingsDefaultExploreResultType">Default search result type for Explore</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Je hebt deze inhoud verwijderd</string>
<string name="actionRestore">Herstellen</string>
<string name="settingsInboxPreviewMaxLines">Maximaal aantal regels in inboxkaarten</string>
<string name="settingsDefaultExploreResultType">Standaard zoekresultaattype voor Explore</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Du har slettet dette innholdet</string>
<string name="actionRestore">Restaurere</string>
<string name="settingsInboxPreviewMaxLines">Maks antall linjer i innbokskort</string>
<string name="settingsDefaultExploreResultType">Standard søkeresultattype for Utforsk</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Usunąłeś tę treść</string>
<string name="actionRestore">Przywrócić</string>
<string name="settingsInboxPreviewMaxLines">Maksymalna liczba linii w kartach skrzynki odbiorczej</string>
<string name="settingsDefaultExploreResultType">Domyślny typ wyniku wyszukiwania dla Eksploruj</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Você excluiu este conteúdo</string>
<string name="actionRestore">Restaura</string>
<string name="settingsInboxPreviewMaxLines">Número máximo de linhas nos cartões das mensagens</string>
<string name="settingsDefaultExploreResultType">Tipo de resultado de pesquisa padrão para Explorar</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Você excluiu este conteúdo</string>
<string name="actionRestore">Restaura</string>
<string name="settingsInboxPreviewMaxLines">Número máximo de linhas nos cartões das mensagens</string>
<string name="settingsDefaultExploreResultType">Tipo de resultado de pesquisa padrão para Explorar</string>
</resources>

View File

@ -343,7 +343,7 @@
<string name="settingsTitlePictures">Imagini</string>
<string name="settingsTitleExperimental">Experimente</string>
<string name="communitySetCustomSort">Tip de sortare personalizat</string>
<string name="settingsDefaultExploreType">Tip prestabilit de listare pentru Exploră</string>
<string name="settingsDefaultExploreType">Tip prestabilit de listare pentru Explorarea</string>
<string name="actionSearchInCommunity">Căută în comunitate</string>
<string name="actionExitSearch">Ieși din căutare</string>
<string name="beta">Beta</string>
@ -411,4 +411,5 @@
<string name="messageContentDeleted">Ați șters acest conținut</string>
<string name="actionRestore">Restaurați-l</string>
<string name="settingsInboxPreviewMaxLines">Numărul maxim de linii în cardurile de inbox</string>
<string name="settingsDefaultExploreResultType">Tip de rezultat de căutare prestabilit pentru Explorarea</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Вы удалили этот контент</string>
<string name="actionRestore">Восстановить</string>
<string name="settingsInboxPreviewMaxLines">Максимальное количество строк во входящих карточках</string>
<string name="settingsDefaultExploreResultType">Тип результатов поиска по умолчанию для Explore</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Tento obsah ste odstránili</string>
<string name="actionRestore">Obnoviť</string>
<string name="settingsInboxPreviewMaxLines">Maximálny počet riadkov na kartách doručenej pošty</string>
<string name="settingsDefaultExploreResultType">Predvolený typ výsledku vyhľadávania pre Preskúmať</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">To vsebino ste izbrisali</string>
<string name="actionRestore">Obnovi</string>
<string name="settingsInboxPreviewMaxLines">Največje število vrstic v karticah prejete pošte</string>
<string name="settingsDefaultExploreResultType">Privzeta vrsta rezultatov iskanja za Raziskovanje</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Ju e keni fshirë këtë përmbajtje</string>
<string name="actionRestore">Rivendos</string>
<string name="settingsInboxPreviewMaxLines">Numri maksimal i rreshtave në kartat e kutisë hyrëse</string>
<string name="settingsDefaultExploreResultType">Lloji i parazgjedhur i rezultatit të kërkimit për Eksploro</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Избрисали сте овај садржај</string>
<string name="actionRestore">Ресторе</string>
<string name="settingsInboxPreviewMaxLines">Максималан број линија у картицама пријемног сандучет</string>
<string name="settingsDefaultExploreResultType">Подразумевани тип резултата претраге за Истраживање</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Du har tagit bort detta innehåll</string>
<string name="actionRestore">Återställ</string>
<string name="settingsInboxPreviewMaxLines">Max antal rader i inkorgskort</string>
<string name="settingsDefaultExploreResultType">Standard sökresultattyp för Utforska</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">tenpo pini la, sina weka e ijo ni</string>
<string name="actionRestore">o awen e ona</string>
<string name="settingsInboxPreviewMaxLines">nanpa linja pi lipu lon toki poki</string>
<string name="settingsDefaultExploreResultType">nasin ijo pi lipu lukin</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Bu içeriği sildiniz</string>
<string name="actionRestore">Eski haline getirmek</string>
<string name="settingsInboxPreviewMaxLines">Gelen kutusu kartlarındaki maksimum satır sayısı</string>
<string name="settingsDefaultExploreResultType">Keşfet için varsayılan arama sonucu türü</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">Ви видалили цей вміст</string>
<string name="actionRestore">Відновлення</string>
<string name="settingsInboxPreviewMaxLines">Максимальна кількість рядків у картках вхідних повідомлень</string>
<string name="settingsDefaultExploreResultType">Тип результатів пошуку за умовчанням для Explore</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">您刪除咗呢個內容</string>
<string name="actionRestore">恢復</string>
<string name="settingsInboxPreviewMaxLines">Inbox card preview max lines</string>
<string name="settingsDefaultExploreResultType">Default search result type for explore</string>
</resources>

View File

@ -411,4 +411,5 @@
<string name="messageContentDeleted">您已刪除此內容</string>
<string name="actionRestore">恢復</string>
<string name="settingsInboxPreviewMaxLines">Inbox card preview max lines</string>
<string name="settingsDefaultExploreResultType">Default search result type for explore</string>
</resources>

View File

@ -35,12 +35,12 @@ import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.LemmyIte
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.PostRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.SiteRepository
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
@OptIn(FlowPreview::class)
@ -72,7 +72,6 @@ class CommunityDetailViewModel(
),
CommunityDetailMviModel {
private var hideReadPosts = false
private val searchEventChannel = Channel<Unit>()
init {
screenModelScope.launch {
@ -179,8 +178,9 @@ class CommunityDetailViewModel(
emitEffect(CommunityDetailMviModel.Effect.TriggerCopy(it.value))
}.launchIn(this)
searchEventChannel
.receiveAsFlow()
uiState
.map { it.searchText }
.distinctUntilChanged()
.debounce(1_000)
.onEach {
updateState { it.copy(loading = false) }
@ -811,7 +811,6 @@ class CommunityDetailViewModel(
private fun updateSearchText(value: String) {
screenModelScope.launch {
updateState { it.copy(searchText = value) }
searchEventChannel.send(Unit)
}
}

View File

@ -21,20 +21,21 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.IO
import kotlinx.coroutines.async
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import kotlinx.coroutines.withTimeout
import kotlinx.coroutines.yield
@OptIn(FlowPreview::class)
class ModalDrawerViewModel(
private val identityRepository: IdentityRepository,
private val communityRepository: CommunityRepository,
@ -51,8 +52,6 @@ class ModalDrawerViewModel(
initialState = ModalDrawerMviModel.UiState(),
),
ModalDrawerMviModel {
private val searchEventChannel = Channel<Unit>()
init {
screenModelScope.launch {
apiConfigurationRepository.instance
@ -99,9 +98,9 @@ class ModalDrawerViewModel(
}
}.launchIn(this)
@OptIn(FlowPreview::class)
searchEventChannel
.receiveAsFlow()
uiState
.map { it.searchText }
.distinctUntilChanged()
.debounce(1000)
.onEach {
refresh()
@ -123,7 +122,6 @@ class ModalDrawerViewModel(
is ModalDrawerMviModel.Intent.SetSearch ->
screenModelScope.launch {
updateState { it.copy(searchText = intent.value) }
searchEventChannel.send(Unit)
}
is ModalDrawerMviModel.Intent.ToggleFavorite -> toggleFavorite(intent.id)

View File

@ -13,29 +13,52 @@ import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType
@Stable
interface ExploreMviModel :
MviModel<ExploreMviModel.Intent, ExploreMviModel.UiState, ExploreMviModel.Effect>, ScreenModel {
MviModel<ExploreMviModel.Intent, ExploreMviModel.UiState, ExploreMviModel.Effect>,
ScreenModel {
sealed interface Intent {
data object Refresh : Intent
data object LoadNextPage : Intent
data class SetSearch(val value: String) : Intent
data class SetSearch(
val value: String,
) : Intent
data object HapticIndication : Intent
data class UpVotePost(val id: Long, val feedback: Boolean = false) : Intent
data class UpVotePost(
val id: Long,
val feedback: Boolean = false,
) : Intent
data class DownVotePost(val id: Long, val feedback: Boolean = false) : Intent
data class DownVotePost(
val id: Long,
val feedback: Boolean = false,
) : Intent
data class SavePost(val id: Long, val feedback: Boolean = false) : Intent
data class SavePost(
val id: Long,
val feedback: Boolean = false,
) : Intent
data class UpVoteComment(val id: Long, val feedback: Boolean = false) : Intent
data class UpVoteComment(
val id: Long,
val feedback: Boolean = false,
) : Intent
data class DownVoteComment(val id: Long, val feedback: Boolean = false) : Intent
data class DownVoteComment(
val id: Long,
val feedback: Boolean = false,
) : Intent
data class SaveComment(val id: Long, val feedback: Boolean = false) : Intent
data class SaveComment(
val id: Long,
val feedback: Boolean = false,
) : Intent
data class ToggleSubscription(val communityId: Long) : Intent
data class ToggleSubscription(
val communityId: Long,
) : Intent
}
data class UiState(
@ -52,7 +75,7 @@ interface ExploreMviModel :
val listingType: ListingType = ListingType.Local,
val sortType: SortType = SortType.Active,
val results: List<SearchResult> = emptyList(),
val resultType: SearchResultType = SearchResultType.Posts,
val resultType: SearchResultType = SearchResultType.Communities,
val postLayout: PostLayout = PostLayout.Card,
val fullHeightImages: Boolean = true,
val fullWidthImages: Boolean = false,

View File

@ -17,6 +17,7 @@ import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SearchResult
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SearchResultType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toListingType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toSearchResultType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toSortType
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.CommentRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.CommunityRepository
@ -25,11 +26,11 @@ import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.PostRepo
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.SiteRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.UserRepository
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
@OptIn(FlowPreview::class)
@ -47,12 +48,11 @@ class ExploreViewModel(
private val notificationCenter: NotificationCenter,
private val hapticFeedback: HapticFeedback,
private val getSortTypesUseCase: GetSortTypesUseCase,
) : ExploreMviModel,
DefaultMviModel<ExploreMviModel.Intent, ExploreMviModel.UiState, ExploreMviModel.Effect>(
) : DefaultMviModel<ExploreMviModel.Intent, ExploreMviModel.UiState, ExploreMviModel.Effect>(
initialState = ExploreMviModel.UiState(),
) {
),
ExploreMviModel {
private var currentPage: Int = 1
private var searchEventChannel = Channel<Unit>()
private val isOnOtherInstance: Boolean get() = otherInstance.isNotEmpty()
private val notificationEventKey: String
get() =
@ -71,86 +71,111 @@ class ExploreViewModel(
instance = apiConfigRepository.instance.value,
)
}
identityRepository.isLogged.onEach { isLogged ->
updateState {
it.copy(isLogged = isLogged ?: false)
}
updateAvailableSortTypes()
}.launchIn(this)
themeRepository.postLayout.onEach { layout ->
updateState { it.copy(postLayout = layout) }
}.launchIn(this)
settingsRepository.currentSettings.onEach { settings ->
updateState {
it.copy(
blurNsfw = settings.blurNsfw,
voteFormat = settings.voteFormat,
autoLoadImages = settings.autoLoadImages,
preferNicknames = settings.preferUserNicknames,
fullHeightImages = settings.fullHeightImages,
fullWidthImages = settings.fullWidthImages,
swipeActionsEnabled = settings.enableSwipeActions,
doubleTapActionEnabled = settings.enableDoubleTapAction,
actionsOnSwipeToStartPosts = settings.actionsOnSwipeToStartPosts,
actionsOnSwipeToEndPosts = settings.actionsOnSwipeToEndPosts,
actionsOnSwipeToStartComments = settings.actionsOnSwipeToStartComments,
actionsOnSwipeToEndComments = settings.actionsOnSwipeToEndComments,
showScores = settings.showScores,
)
}
}.launchIn(this)
notificationCenter.subscribe(NotificationCenterEvent.Logout::class).onEach {
handleLogout()
}.launchIn(this)
notificationCenter.subscribe(NotificationCenterEvent.PostUpdated::class).onEach { evt ->
handlePostUpdate(evt.model)
}.launchIn(this)
notificationCenter.subscribe(NotificationCenterEvent.CommentUpdated::class)
identityRepository.isLogged
.onEach { isLogged ->
updateState {
it.copy(isLogged = isLogged ?: false)
}
updateAvailableSortTypes()
}.launchIn(this)
themeRepository.postLayout
.onEach { layout ->
updateState { it.copy(postLayout = layout) }
}.launchIn(this)
settingsRepository.currentSettings
.onEach { settings ->
updateState {
it.copy(
blurNsfw = settings.blurNsfw,
voteFormat = settings.voteFormat,
autoLoadImages = settings.autoLoadImages,
preferNicknames = settings.preferUserNicknames,
fullHeightImages = settings.fullHeightImages,
fullWidthImages = settings.fullWidthImages,
swipeActionsEnabled = settings.enableSwipeActions,
doubleTapActionEnabled = settings.enableDoubleTapAction,
actionsOnSwipeToStartPosts = settings.actionsOnSwipeToStartPosts,
actionsOnSwipeToEndPosts = settings.actionsOnSwipeToEndPosts,
actionsOnSwipeToStartComments = settings.actionsOnSwipeToStartComments,
actionsOnSwipeToEndComments = settings.actionsOnSwipeToEndComments,
showScores = settings.showScores,
)
}
}.launchIn(this)
notificationCenter
.subscribe(NotificationCenterEvent.Logout::class)
.onEach {
handleLogout()
}.launchIn(this)
notificationCenter
.subscribe(NotificationCenterEvent.PostUpdated::class)
.onEach { evt ->
handlePostUpdate(evt.model)
}.launchIn(this)
notificationCenter
.subscribe(NotificationCenterEvent.CommentUpdated::class)
.onEach { evt ->
handleCommentUpdate(evt.model)
}.launchIn(this)
notificationCenter.subscribe(NotificationCenterEvent.ChangeFeedType::class)
notificationCenter
.subscribe(NotificationCenterEvent.ChangeFeedType::class)
.onEach { evt ->
if (evt.screenKey == notificationEventKey) {
changeListingType(evt.value)
}
}.launchIn(this)
notificationCenter.subscribe(NotificationCenterEvent.ChangeSortType::class)
notificationCenter
.subscribe(NotificationCenterEvent.ChangeSortType::class)
.onEach { evt ->
if (evt.screenKey == notificationEventKey) {
changeSortType(evt.value)
}
}.launchIn(this)
notificationCenter.subscribe(NotificationCenterEvent.ResetExplore::class).onEach {
onFirstLoad()
}.launchIn(this)
notificationCenter.subscribe(NotificationCenterEvent.ChangeSearchResultType::class).onEach { evt ->
if (evt.screenKey == notificationEventKey) {
changeResultType(evt.value)
}
}.launchIn(this)
notificationCenter.subscribe(NotificationCenterEvent.CommunitySubscriptionChanged::class).onEach { evt ->
handleCommunityUpdate(evt.value)
}.launchIn(this)
notificationCenter
.subscribe(NotificationCenterEvent.ResetExplore::class)
.onEach {
onFirstLoad()
}.launchIn(this)
notificationCenter
.subscribe(NotificationCenterEvent.ChangeSearchResultType::class)
.onEach { evt ->
if (evt.screenKey == notificationEventKey) {
changeResultType(evt.value)
}
}.launchIn(this)
notificationCenter
.subscribe(NotificationCenterEvent.CommunitySubscriptionChanged::class)
.onEach { evt ->
handleCommunityUpdate(evt.value)
}.launchIn(this)
searchEventChannel.receiveAsFlow().debounce(1000).onEach {
emitEffect(ExploreMviModel.Effect.BackToTop)
refresh()
}.launchIn(this)
uiState
.map {
it.searchText
}.distinctUntilChanged()
.debounce(1000)
.onEach {
emitEffect(ExploreMviModel.Effect.BackToTop)
refresh()
}.launchIn(this)
}
onFirstLoad()
if (uiState.value.initial) {
onFirstLoad()
}
}
private fun onFirstLoad() {
screenModelScope.launch {
val settings = settingsRepository.currentSettings.value
val listingType = if (isOnOtherInstance) ListingType.Local else settings.defaultExploreType.toListingType()
val listingType =
if (isOnOtherInstance) ListingType.Local else settings.defaultExploreType.toListingType()
val sortType = settings.defaultPostSortType.toSortType()
updateState {
it.copy(
listingType = listingType,
sortType = sortType,
resultType = settings.defaultExploreResultType.toSearchResultType(),
)
}
val auth = identityRepository.authToken.value
@ -186,78 +211,84 @@ class ExploreViewModel(
if (intent.feedback) {
hapticFeedback.vibrate()
}
uiState.value.results.firstOrNull {
it is SearchResult.Post && it.model.id == intent.id
}?.also { result ->
toggleDownVote(
post = (result as SearchResult.Post).model,
)
}
uiState.value.results
.firstOrNull {
it is SearchResult.Post && it.model.id == intent.id
}?.also { result ->
toggleDownVote(
post = (result as SearchResult.Post).model,
)
}
}
is ExploreMviModel.Intent.SavePost -> {
if (intent.feedback) {
hapticFeedback.vibrate()
}
uiState.value.results.firstOrNull {
it is SearchResult.Post && it.model.id == intent.id
}?.also { result ->
toggleSave(
post = (result as SearchResult.Post).model,
)
}
uiState.value.results
.firstOrNull {
it is SearchResult.Post && it.model.id == intent.id
}?.also { result ->
toggleSave(
post = (result as SearchResult.Post).model,
)
}
}
is ExploreMviModel.Intent.UpVotePost -> {
if (intent.feedback) {
hapticFeedback.vibrate()
}
uiState.value.results.firstOrNull {
it is SearchResult.Post && it.model.id == intent.id
}?.also { result ->
toggleUpVote(
post = (result as SearchResult.Post).model,
)
}
uiState.value.results
.firstOrNull {
it is SearchResult.Post && it.model.id == intent.id
}?.also { result ->
toggleUpVote(
post = (result as SearchResult.Post).model,
)
}
}
is ExploreMviModel.Intent.DownVoteComment -> {
if (intent.feedback) {
hapticFeedback.vibrate()
}
uiState.value.results.firstOrNull {
it is SearchResult.Comment && it.model.id == intent.id
}?.also { result ->
toggleDownVoteComment(
comment = (result as SearchResult.Comment).model,
)
}
uiState.value.results
.firstOrNull {
it is SearchResult.Comment && it.model.id == intent.id
}?.also { result ->
toggleDownVoteComment(
comment = (result as SearchResult.Comment).model,
)
}
}
is ExploreMviModel.Intent.SaveComment -> {
if (intent.feedback) {
hapticFeedback.vibrate()
}
uiState.value.results.firstOrNull {
it is SearchResult.Comment && it.model.id == intent.id
}?.also { result ->
toggleSaveComment(
comment = (result as SearchResult.Comment).model,
)
}
uiState.value.results
.firstOrNull {
it is SearchResult.Comment && it.model.id == intent.id
}?.also { result ->
toggleSaveComment(
comment = (result as SearchResult.Comment).model,
)
}
}
is ExploreMviModel.Intent.UpVoteComment -> {
if (intent.feedback) {
hapticFeedback.vibrate()
}
uiState.value.results.firstOrNull {
it is SearchResult.Comment && it.model.id == intent.id
}?.also { result ->
toggleUpVoteComment(
comment = (result as SearchResult.Comment).model,
)
}
uiState.value.results
.firstOrNull {
it is SearchResult.Comment && it.model.id == intent.id
}?.also { result ->
toggleUpVoteComment(
comment = (result as SearchResult.Comment).model,
)
}
}
is ExploreMviModel.Intent.ToggleSubscription -> toggleSubscription(intent.communityId)
@ -267,7 +298,6 @@ class ExploreViewModel(
private fun setSearch(value: String) {
screenModelScope.launch {
updateState { it.copy(searchText = value) }
searchEventChannel.send(Unit)
}
}
@ -354,60 +384,65 @@ class ExploreViewModel(
currentPage++
}
val itemsToAdd =
itemList.filter { item ->
if (settings.includeNsfw) {
true
} else {
isSafeForWork(item)
}
}.let {
when (resultType) {
SearchResultType.Communities -> {
if (additionalResolvedCommunity != null &&
it.none {
r ->
r is SearchResult.Community && r.model.id == additionalResolvedCommunity.id
itemList
.filter { item ->
if (settings.includeNsfw) {
true
} else {
isSafeForWork(item)
}
}.let {
when (resultType) {
SearchResultType.Communities -> {
if (additionalResolvedCommunity != null &&
it.none { r ->
r is SearchResult.Community && r.model.id == additionalResolvedCommunity.id
}
) {
it + SearchResult.Community(additionalResolvedCommunity)
} else {
it
}
) {
it + SearchResult.Community(additionalResolvedCommunity)
} else {
it
}
}
SearchResultType.Users -> {
if (additionalResolvedUser != null &&
it.none {
r ->
r is SearchResult.User && r.model.id == additionalResolvedUser.id
SearchResultType.Users -> {
if (additionalResolvedUser != null &&
it.none { r ->
r is SearchResult.User && r.model.id == additionalResolvedUser.id
}
) {
it + SearchResult.User(additionalResolvedUser)
} else {
it
}
) {
it + SearchResult.User(additionalResolvedUser)
} else {
it
}
}
SearchResultType.Posts -> {
if (settings.searchPostTitleOnly && searchText.isNotEmpty()) {
// apply the more restrictive title-only search
it.filterIsInstance<SearchResult.Post>()
.filter { r -> r.model.title.contains(other = searchText, ignoreCase = true) }
} else {
it
SearchResultType.Posts -> {
if (settings.searchPostTitleOnly && searchText.isNotEmpty()) {
// apply the more restrictive title-only search
it
.filterIsInstance<SearchResult.Post>()
.filter { r ->
r.model.title.contains(
other = searchText,
ignoreCase = true,
)
}
} else {
it
}
}
}
else -> it
else -> it
}
}.filter { item ->
if (refreshing) {
true
} else {
// prevents accidental duplication
currentState.results.none { other -> getItemKey(item) == getItemKey(other) }
}
}
}.filter { item ->
if (refreshing) {
true
} else {
// prevents accidental duplication
currentState.results.none { other -> getItemKey(item) == getItemKey(other) }
}
}
updateState {
val newItems =
if (refreshing) {
@ -760,9 +795,10 @@ class ExploreViewModel(
private fun toggleSubscription(communityId: Long) {
val community =
uiState.value.results.firstOrNull {
(it as? SearchResult.Community)?.model?.id == communityId
}.let { (it as? SearchResult.Community)?.model } ?: return
uiState.value.results
.firstOrNull {
(it as? SearchResult.Community)?.model?.id == communityId
}.let { (it as? SearchResult.Community)?.model } ?: return
screenModelScope.launch {
val newValue =
when (community.subscribed) {

View File

@ -18,11 +18,11 @@ import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommunityModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.CommunityRepository
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.SiteRepository
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
@OptIn(FlowPreview::class)
@ -41,8 +41,6 @@ class ManageSubscriptionsViewModel(
initialState = ManageSubscriptionsMviModel.UiState(),
),
ManageSubscriptionsMviModel {
private val searchEventChannel = Channel<Unit>()
init {
screenModelScope.launch {
settingsRepository.currentSettings
@ -65,8 +63,9 @@ class ManageSubscriptionsViewModel(
handleCommunityUpdate(evt.value)
}.launchIn(this)
searchEventChannel
.receiveAsFlow()
uiState
.map { it.searchText }
.distinctUntilChanged()
.debounce(1000)
.onEach {
emitEffect(ManageSubscriptionsMviModel.Effect.BackToTop)
@ -235,7 +234,6 @@ class ManageSubscriptionsViewModel(
private fun updateSearchText(value: String) {
screenModelScope.launch {
updateState { it.copy(searchText = value) }
searchEventChannel.send(Unit)
}
}

View File

@ -12,11 +12,11 @@ import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.Mult
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.ValidationError
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
@OptIn(FlowPreview::class)
@ -31,8 +31,6 @@ class MultiCommunityEditorViewModel(
initialState = MultiCommunityEditorMviModel.UiState(),
),
MultiCommunityEditorMviModel {
private val searchEventChannel = Channel<Unit>()
init {
screenModelScope.launch {
settingsRepository.currentSettings
@ -45,8 +43,9 @@ class MultiCommunityEditorViewModel(
}
}.launchIn(this)
searchEventChannel
.receiveAsFlow()
uiState
.map { it.searchText }
.distinctUntilChanged()
.debounce(1000)
.onEach {
refresh()
@ -127,7 +126,6 @@ class MultiCommunityEditorViewModel(
private fun setSearch(value: String) {
screenModelScope.launch {
updateState { it.copy(searchText = value) }
searchEventChannel.send(Unit)
}
}

View File

@ -28,12 +28,12 @@ import com.github.diegoberaldin.raccoonforlemmy.unit.postdetail.utils.populateLo
import com.github.diegoberaldin.raccoonforlemmy.unit.postdetail.utils.sortToNestedOrder
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
@OptIn(FlowPreview::class)
@ -63,7 +63,6 @@ class PostDetailViewModel(
PostDetailMviModel {
private var highlightCommentPath: String? = null
private var commentWasHighlighted = false
private val searchEventChannel = Channel<Unit>()
private val initialNavigationEnabled = postNavigationManager.canNavigate.value
private var lastCommentNavigateIndex: Int? = null
@ -184,8 +183,9 @@ class PostDetailViewModel(
}
}.launchIn(this)
searchEventChannel
.receiveAsFlow()
uiState
.map { it.searchText }
.distinctUntilChanged()
.debounce(1_000)
.onEach {
updateState { it.copy(loading = false) }
@ -908,7 +908,6 @@ class PostDetailViewModel(
private fun updateSearchText(value: String) {
screenModelScope.launch {
updateState { it.copy(searchText = value) }
searchEventChannel.send(Unit)
}
}

View File

@ -6,13 +6,14 @@ import com.diegoberaldin.raccoonforlemmy.domain.lemmy.pagination.CommunityPagina
import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
@OptIn(FlowPreview::class)
class SelectCommunityViewModel(
private val settingsRepository: SettingsRepository,
private val communityPaginationManager: CommunityPaginationManager,
@ -20,8 +21,6 @@ class SelectCommunityViewModel(
initialState = SelectCommunityMviModel.UiState(),
),
SelectCommunityMviModel {
private val searchEventChannel = Channel<Unit>()
init {
screenModelScope.launch {
settingsRepository.currentSettings
@ -34,9 +33,9 @@ class SelectCommunityViewModel(
}
}.launchIn(this)
@OptIn(FlowPreview::class)
searchEventChannel
.receiveAsFlow()
uiState
.map { it.searchText }
.distinctUntilChanged()
.debounce(1000)
.onEach {
refresh()
@ -61,7 +60,6 @@ class SelectCommunityViewModel(
private fun setSearch(value: String) {
screenModelScope.launch {
updateState { it.copy(searchText = value) }
searchEventChannel.send(Unit)
}
}