From 54f4711f7bf0f96492b49c6c9d5c6f05eaee7b59 Mon Sep 17 00:00:00 2001 From: arkon Date: Sat, 30 Dec 2023 19:15:52 -0500 Subject: [PATCH] Show next expected update in interval dialog Related: #9793 --- .../presentation/components/DateText.kt | 12 ++-- .../manga/components/MangaDialogs.kt | 69 +++++++++++++------ .../kanade/tachiyomi/ui/manga/MangaScreen.kt | 1 + .../commonMain/resources/MR/base/strings.xml | 2 + 4 files changed, 59 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/components/DateText.kt b/app/src/main/java/eu/kanade/presentation/components/DateText.kt index c79cfac124..9fa8c85d19 100644 --- a/app/src/main/java/eu/kanade/presentation/components/DateText.kt +++ b/app/src/main/java/eu/kanade/presentation/components/DateText.kt @@ -13,9 +13,11 @@ import java.util.Date @Composable fun relativeDateText( - date: Long, + dateEpochMillis: Long, ): String { - return relativeDateText(date = Date(date).takeIf { date > 0L }) + return relativeDateText( + date = Date(dateEpochMillis).takeIf { dateEpochMillis > 0L }, + ) } @Composable @@ -30,9 +32,9 @@ fun relativeDateText( return date ?.toRelativeString( - context, - relativeTime, - dateFormat, + context = context, + relative = relativeTime, + dateFormat = dateFormat, ) ?: stringResource(MR.strings.not_applicable) } diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MangaDialogs.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MangaDialogs.kt index 268928ebbe..5d899c046d 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/MangaDialogs.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/MangaDialogs.kt @@ -1,6 +1,7 @@ package eu.kanade.presentation.manga.components import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.AlertDialog import androidx.compose.material3.Text @@ -8,6 +9,7 @@ import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment @@ -18,7 +20,10 @@ import kotlinx.collections.immutable.toImmutableList import tachiyomi.domain.manga.interactor.FetchInterval import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.WheelTextPicker +import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource +import java.time.Instant +import java.time.temporal.ChronoUnit @Composable fun DeleteChaptersDialog( @@ -54,35 +59,59 @@ fun DeleteChaptersDialog( @Composable fun SetIntervalDialog( interval: Int, + nextUpdate: Long, onDismissRequest: () -> Unit, onValueChanged: (Int) -> Unit, ) { var selectedInterval by rememberSaveable { mutableIntStateOf(if (interval < 0) -interval else 0) } + val nextUpdateDays = remember(nextUpdate) { + val now = Instant.now() + val nextUpdateInstant = Instant.ofEpochMilli(nextUpdate) + + now.until(nextUpdateInstant, ChronoUnit.DAYS) + } + AlertDialog( onDismissRequest = onDismissRequest, - title = { Text(text = stringResource(MR.strings.manga_modify_calculated_interval_title)) }, + title = { Text(stringResource(MR.strings.manga_modify_calculated_interval_title)) }, text = { - BoxWithConstraints( - modifier = Modifier.fillMaxWidth(), - contentAlignment = Alignment.Center, - ) { - val size = DpSize(width = maxWidth / 2, height = 128.dp) - val items = (0..FetchInterval.MAX_INTERVAL) - .map { - if (it == 0) { - stringResource(MR.strings.label_default) - } else { - it.toString() + Column { + // TODO: figure out why nextUpdate is a weird number sometimes + if (nextUpdateDays >= 0) { + Text( + stringResource( + MR.strings.manga_interval_expected_update, + pluralStringResource( + MR.plurals.day, + count = nextUpdateDays.toInt(), + nextUpdateDays, + ), + ), + ) + } + + BoxWithConstraints( + modifier = Modifier.fillMaxWidth(), + contentAlignment = Alignment.Center, + ) { + val size = DpSize(width = maxWidth / 2, height = 128.dp) + val items = (0..FetchInterval.MAX_INTERVAL) + .map { + if (it == 0) { + stringResource(MR.strings.label_default) + } else { + it.toString() + } } - } - .toImmutableList() - WheelTextPicker( - items = items, - size = size, - startIndex = selectedInterval, - onSelectionChanged = { selectedInterval = it }, - ) + .toImmutableList() + WheelTextPicker( + items = items, + size = size, + startIndex = selectedInterval, + onSelectionChanged = { selectedInterval = it }, + ) + } } }, dismissButton = { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt index 1bb46d82ea..f4c7c48b60 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt @@ -243,6 +243,7 @@ class MangaScreen( is MangaScreenModel.Dialog.SetFetchInterval -> { SetIntervalDialog( interval = dialog.manga.fetchInterval, + nextUpdate = dialog.manga.nextUpdate, onDismissRequest = onDismissRequest, onValueChanged = { screenModel.setFetchInterval(dialog.manga, it) }, ) diff --git a/i18n/src/commonMain/resources/MR/base/strings.xml b/i18n/src/commonMain/resources/MR/base/strings.xml index 0a91a88dd9..cad687b249 100644 --- a/i18n/src/commonMain/resources/MR/base/strings.xml +++ b/i18n/src/commonMain/resources/MR/base/strings.xml @@ -669,6 +669,8 @@ Chapter %1$s Estimate every Set to update every + + Next update expected in around %s Customize interval Downloading (%1$d/%2$d) Error