From 61b863ae9653d0d614c06bb01e2dfdbae67ab644 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sat, 21 Jun 2025 18:15:40 +0300 Subject: [PATCH] Fix DateTimeAgo in future --- .../kotlin/org/koitharu/kotatsu/core/util/ext/Date.kt | 4 ++-- .../kotatsu/download/ui/list/DownloadsViewModel.kt | 6 +++++- .../koitharu/kotatsu/history/ui/HistoryListViewModel.kt | 8 ++++++-- .../org/koitharu/kotatsu/tracker/ui/feed/FeedViewModel.kt | 6 +++++- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/Date.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/Date.kt index 551d2067b..e913930aa 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/Date.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/Date.kt @@ -10,13 +10,13 @@ import java.time.ZoneId import java.time.temporal.ChronoUnit import java.util.concurrent.TimeUnit -fun calculateTimeAgo(instant: Instant, showMonths: Boolean = false): DateTimeAgo { - // TODO: Use Java 9's LocalDate.ofInstant(). +fun calculateTimeAgo(instant: Instant, showMonths: Boolean = false): DateTimeAgo? { val localDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalDate() val now = LocalDate.now() val diffDays = localDate.until(now, ChronoUnit.DAYS) return when { + diffDays < 0 -> null // in future, probably a bug, not supported diffDays == 0L -> { if (instant.until(Instant.now(), ChronoUnit.MINUTES) < 3) DateTimeAgo.JustNow else DateTimeAgo.Today diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/download/ui/list/DownloadsViewModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/download/ui/list/DownloadsViewModel.kt index 6a74eb16b..86d48108a 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/download/ui/list/DownloadsViewModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/download/ui/list/DownloadsViewModel.kt @@ -225,7 +225,11 @@ class DownloadsViewModel @Inject constructor( else -> { val date = calculateTimeAgo(item.timestamp) if (prevDate != date) { - destination += ListHeader(date) + destination += if (date != null) { + ListHeader(date) + } else { + ListHeader(R.string.unknown) + } } prevDate = date destination += item diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListViewModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListViewModel.kt index 7ad13061b..03335cf6d 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListViewModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/history/ui/HistoryListViewModel.kt @@ -201,10 +201,14 @@ class HistoryListViewModel @Inject constructor( private fun MangaHistory.header(order: ListSortOrder): ListHeader? = when (order) { ListSortOrder.LAST_READ, - ListSortOrder.LONG_AGO_READ -> ListHeader(calculateTimeAgo(updatedAt)) + ListSortOrder.LONG_AGO_READ -> calculateTimeAgo(updatedAt)?.let { + ListHeader(it) + } ?: ListHeader(R.string.unknown) ListSortOrder.OLDEST, - ListSortOrder.NEWEST -> ListHeader(calculateTimeAgo(createdAt)) + ListSortOrder.NEWEST -> calculateTimeAgo(createdAt)?.let { + ListHeader(it) + } ?: ListHeader(R.string.unknown) ListSortOrder.UNREAD, ListSortOrder.PROGRESS -> ListHeader( diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/ui/feed/FeedViewModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/ui/feed/FeedViewModel.kt index f2c23cbdc..09feacbe2 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/ui/feed/FeedViewModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/ui/feed/FeedViewModel.kt @@ -137,7 +137,11 @@ class FeedViewModel @Inject constructor( for (item in this) { val date = calculateTimeAgo(item.createdAt) if (prevDate != date) { - destination += ListHeader(date) + destination += if (date != null) { + ListHeader(date) + } else { + ListHeader(R.string.unknown) + } } prevDate = date destination += item.toFeedItem()