Эх сурвалжийг харах

Show next expected update in interval dialog

Related: #9793
arkon 1 жил өмнө
parent
commit
54f4711f7b

+ 7 - 5
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)
 }

+ 49 - 20
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 = {

+ 1 - 0
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) },
                 )

+ 2 - 0
i18n/src/commonMain/resources/MR/base/strings.xml

@@ -669,6 +669,8 @@
     <string name="display_mode_chapter">Chapter %1$s</string>
     <string name="manga_display_interval_title">Estimate every</string>
     <string name="manga_display_modified_interval_title">Set to update every</string>
+    <!-- "... around 2 days" -->
+    <string name="manga_interval_expected_update">Next update expected in around %s</string>
     <string name="manga_modify_calculated_interval_title">Customize interval</string>
     <string name="chapter_downloading_progress">Downloading (%1$d/%2$d)</string>
     <string name="chapter_error">Error</string>