fixed bug with returning from the reading state and search
This commit is contained in:
1 parent
b0f45aaf1b
commit
1c6a80c43b
10 files changed
+113
-50
No files matched your search
@@ -120,6 +120,7 @@ internal fun LibraryScreen(
|
||||
val sourceItems = if (searchActive) visibleSearchResults else libraryItems
|
||||
val recentlyAdded = recentlyAddedItems.filterNot { it.fileId in hiddenFileIds }
|
||||
val visibleItems = selectedFilter.apply(sourceItems, recentlyAdded, searchActive)
|
||||
.withoutDuplicateFileIds()
|
||||
val canLoadMore = !searchActive && selectedFilter.usesPagedLibrary && !endReached
|
||||
|
||||
suspend fun loadPage(reset: Boolean = false) {
|
||||
@@ -143,7 +144,7 @@ internal fun LibraryScreen(
|
||||
if (fileId !in visibleFileIds) coverCache.remove(fileId)
|
||||
}
|
||||
} else {
|
||||
items = items + page
|
||||
items = items.appendNewLibraryItems(page)
|
||||
}
|
||||
nextOffset = offset + page.size
|
||||
endReached = page.size < limit
|
||||
@@ -1032,13 +1033,7 @@ private enum class LibraryFilter(val usesPagedLibrary: Boolean = true) {
|
||||
.filter { it.readingStatus == BookReadingStatus.NEW }
|
||||
.sortedByImportedThenTitle()
|
||||
}
|
||||
MyLibrary -> sourceItems.filter {
|
||||
it.fileId !in recentlyAddedIds &&
|
||||
it.readingStatus != BookReadingStatus.READING &&
|
||||
it.readingStatus != BookReadingStatus.TO_READ &&
|
||||
it.readingStatus != BookReadingStatus.READ &&
|
||||
it.readingStatus != BookReadingStatus.NOT_INTERESTED
|
||||
}.sortedByTitleNaturally()
|
||||
MyLibrary -> sourceItems.myLibraryItems()
|
||||
ToRead -> sourceItems
|
||||
.filter { it.readingStatus == BookReadingStatus.TO_READ }
|
||||
.sortedByLastReadThenTitle()
|
||||
@@ -1070,6 +1065,10 @@ private fun List<LibraryItem>.sortedByImportedThenTitle(): List<LibraryItem> =
|
||||
private fun List<LibraryItem>.sortedByTitleNaturally(): List<LibraryItem> =
|
||||
sortedWith(LibraryItemNaturalTitleComparator)
|
||||
|
||||
internal fun List<LibraryItem>.myLibraryItems(): List<LibraryItem> =
|
||||
filter { it.readingStatus != BookReadingStatus.NOT_INTERESTED }
|
||||
.sortedByTitleNaturally()
|
||||
|
||||
private val LibraryItemNaturalTitleComparator = Comparator<LibraryItem> { left, right ->
|
||||
val titleCompare = naturalCompare(left.title, right.title)
|
||||
if (titleCompare != 0) titleCompare else left.fileId.compareTo(right.fileId)
|
||||
@@ -1194,6 +1193,15 @@ private fun Long.formatBytes(): String =
|
||||
private fun List<LibraryItem>.replaceLibraryItem(item: LibraryItem): List<LibraryItem> =
|
||||
map { current -> if (current.fileId == item.fileId) item else current }
|
||||
|
||||
internal fun List<LibraryItem>.appendNewLibraryItems(page: List<LibraryItem>): List<LibraryItem> {
|
||||
if (isEmpty()) return page.withoutDuplicateFileIds()
|
||||
val fileIds = mapTo(mutableSetOf()) { it.fileId }
|
||||
return this + page.filter { fileIds.add(it.fileId) }
|
||||
}
|
||||
|
||||
internal fun List<LibraryItem>.withoutDuplicateFileIds(): List<LibraryItem> =
|
||||
distinctBy { it.fileId }
|
||||
|
||||
private fun Key.isEnterKey(): Boolean = this == Key.Enter || this == Key.NumPadEnter
|
||||
|
||||
private fun LibraryScanProgress.toCatalogScanMessage(): String {
|
||||
|
||||
@@ -34,6 +34,7 @@ data class ReadAloudVoiceOption(
|
||||
data class ReadAloudTextReplacement(
|
||||
val from: String,
|
||||
val to: String,
|
||||
val caseSensitive: Boolean = false,
|
||||
)
|
||||
|
||||
data class ReadAloudSettingsState(
|
||||
|
||||
@@ -537,7 +537,7 @@ private fun ReaderText(
|
||||
private fun readerParagraphTextStyle(language: String?): TextStyle =
|
||||
MaterialTheme.typography.bodyLarge.copy(
|
||||
fontWeight = if( isAndroidPlatform) FontWeight(350) else FontWeight.Normal,
|
||||
fontSize = if( isAndroidPlatform) 19.sp else 18.sp,
|
||||
fontSize = if( isAndroidPlatform) 20.sp else 18.sp,
|
||||
lineHeight = 26.sp,
|
||||
letterSpacing = if (isAndroidPlatform) 0.sp else MaterialTheme.typography.bodyLarge.letterSpacing,
|
||||
hyphens = if (isAndroidPlatform) Hyphens.Auto else Hyphens.Unspecified,
|
||||
@@ -808,7 +808,7 @@ private fun String.toReadAloudSpokenText(): String =
|
||||
|
||||
private fun String.applyReadAloudTextReplacements(replacements: List<ReadAloudTextReplacement>): String =
|
||||
replacements.fold(this) { text, replacement ->
|
||||
text.replace(replacement.from, replacement.to)
|
||||
text.replace(replacement.from, replacement.to, ignoreCase = !replacement.caseSensitive)
|
||||
}
|
||||
|
||||
private fun String.withReadAloudStressMarkers(): String = buildString(length) {
|
||||
@@ -886,9 +886,13 @@ private const val CombiningAcuteAccent = '\u0301'
|
||||
private const val ReadAloudStressableLetters = "аеёиоуыэюяАЕЁИОУЫЭЮЯaeiouyAEIOUY"
|
||||
|
||||
private val ReadAloudHardcodedTextReplacements = listOf(
|
||||
ReadAloudTextReplacement("Господа,", "Господ/а,"),
|
||||
ReadAloudTextReplacement("господа", "господ/а"),
|
||||
ReadAloudTextReplacement("прошуршала", "прошурш/ала"),
|
||||
ReadAloudTextReplacement(from = "Господа,", to = "Господ/а,", caseSensitive = true),
|
||||
ReadAloudTextReplacement(from = "господа", to = "господ/а", caseSensitive = true),
|
||||
ReadAloudTextReplacement(from = "прошуршала", to = "прошурш/ала", caseSensitive = false),
|
||||
ReadAloudTextReplacement(from = "железной дорогой", to = "железной дор/огой"),
|
||||
ReadAloudTextReplacement(from = "пустовавшими", to = "пустов/авшими"),
|
||||
ReadAloudTextReplacement(from = "непарадной", to = "непар/адной"),
|
||||
ReadAloudTextReplacement(from = "свертывали", to = "свёртывали"),
|
||||
)
|
||||
|
||||
private fun List<Fb2Section>.flattenSections(depth: Int = 0): List<ChapterEntry> =
|
||||
|
||||
Reference in new issue
Block a user