Grouping history by progress

pull/446/head
Koitharu 3 years ago
parent 2949fdd2c6
commit e7ee261680
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -12,5 +12,5 @@ enum class HistoryOrder(
PROGRESS(R.string.progress), PROGRESS(R.string.progress),
ALPHABETIC(R.string.by_name); ALPHABETIC(R.string.by_name);
fun isGroupingSupported() = this == UPDATED || this == CREATED fun isGroupingSupported() = this == UPDATED || this == CREATED || this == PROGRESS
} }

@ -12,6 +12,7 @@ import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.plus import kotlinx.coroutines.plus
import org.koitharu.kotatsu.R import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.model.MangaHistory
import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.core.prefs.ListMode import org.koitharu.kotatsu.core.prefs.ListMode
import org.koitharu.kotatsu.core.prefs.observeAsFlow import org.koitharu.kotatsu.core.prefs.observeAsFlow
@ -130,14 +131,17 @@ class HistoryListViewModel @Inject constructor(
mode: ListMode, mode: ListMode,
): List<ListModel> { ): List<ListModel> {
val result = ArrayList<ListModel>(if (grouped) (list.size * 1.4).toInt() else list.size + 1) val result = ArrayList<ListModel>(if (grouped) (list.size * 1.4).toInt() else list.size + 1)
var prevDate: DateTimeAgo? = null val order = sortOrder.value
var prevHeader: ListHeader? = null
for ((manga, history) in list) { for ((manga, history) in list) {
if (grouped) { if (grouped) {
val date = timeAgo(history.updatedAt) val header = history.header(order)
if (prevDate != date) { if (header != prevHeader) {
result += ListHeader(date) if (header != null) {
result += header
}
prevHeader = header
} }
prevDate = date
} }
result += when (mode) { result += when (mode) {
ListMode.LIST -> manga.toListModel(extraProvider) ListMode.LIST -> manga.toListModel(extraProvider)
@ -148,6 +152,21 @@ class HistoryListViewModel @Inject constructor(
return result return result
} }
private fun MangaHistory.header(order: HistoryOrder): ListHeader? = when (order) {
HistoryOrder.UPDATED -> ListHeader(timeAgo(updatedAt))
HistoryOrder.CREATED -> ListHeader(timeAgo(createdAt))
HistoryOrder.PROGRESS -> ListHeader(
when (percent) {
1f -> R.string.status_completed
in 0f..0.01f -> R.string.status_planned
in 0f..1f -> R.string.status_reading
else -> R.string.unknown
},
)
HistoryOrder.ALPHABETIC -> null
}
private fun timeAgo(date: Date): DateTimeAgo { private fun timeAgo(date: Date): DateTimeAgo {
val diff = (System.currentTimeMillis() - date.time).coerceAtLeast(0L) val diff = (System.currentTimeMillis() - date.time).coerceAtLeast(0L)
val diffMinutes = TimeUnit.MILLISECONDS.toMinutes(diff).toInt() val diffMinutes = TimeUnit.MILLISECONDS.toMinutes(diff).toInt()

@ -470,4 +470,5 @@
<string name="show">Show</string> <string name="show">Show</string>
<string name="captcha_required_summary">%s requires a captcha to be resolved to work properly</string> <string name="captcha_required_summary">%s requires a captcha to be resolved to work properly</string>
<string name="languages">Languages</string> <string name="languages">Languages</string>
<string name="unknown">Unknown</string>
</resources> </resources>

Loading…
Cancel
Save