General improvments (#114)
* Add "Keep Screen On" feature to PDF and Epub readers. * Add `rawLibraryFiles` to `MainViewModel` and improve file path resolution in `SharedComposables`. Specifically: - Updated `MainViewModel` state and UI logic to track and provide unfiltered library files. - Enhanced file path formatting in `SharedComposables` to better handle Document, Tree, and primary storage URIs. - Added scrollable support for long text values in `DetailItem` composable. - Passed `rawLibraryFiles` to `FolderSyncScreen` to ensure sync logic uses the base file list. * Update info bar background and text colors in EpubReaderScreen to match the selected theme. * Prevent accidental UI bar toggles immediately after scrolling in EPUB vertical mode. * feat: implement EPUB highlights sync and legacy migration - Implement Cloud and Local Folder sync for EPUB highlights. - Add highlight JSON serialization/deserialization helpers in EpubReaderAnnotations. - Implement automatic migration of highlights from SharedPreferences to the Database on book open. - Add cleanup logic to remove legacy SharedPreferences data after successful DB migration. - Update RecentFilesRepository to trigger local folder metadata sync when highlights are modified. - Update FolderSyncWorker to pull highlights and custom names from linked folder metadata. * Update intent filters
This commit is contained in:
parent
60dacf9c12
commit
4c5cd20b21
17 changed files with 404 additions and 84 deletions
|
|
@ -192,6 +192,7 @@ data class ReaderScreenState(
|
|||
val initialLocator: Locator? = null,
|
||||
val initialCfi: String? = null,
|
||||
val initialBookmarksJson: String? = null,
|
||||
val initialHighlightsJson: String? = null,
|
||||
val initialPageInBook: Int? = null,
|
||||
val shelves: List<Shelf> = emptyList(),
|
||||
val viewingShelfName: String? = null,
|
||||
|
|
@ -225,6 +226,7 @@ data class ReaderScreenState(
|
|||
val reflowProgress: Float? = null,
|
||||
val recentFiles: List<RecentFileItem> = emptyList(),
|
||||
val allRecentFiles: List<RecentFileItem> = emptyList(),
|
||||
val rawLibraryFiles: List<RecentFileItem> = emptyList(),
|
||||
val pinnedHomeBookIds: Set<String> = emptySet(),
|
||||
val pinnedLibraryBookIds: Set<String> = emptySet(),
|
||||
val libraryFilters: LibraryFilters = LibraryFilters(),
|
||||
|
|
@ -421,6 +423,7 @@ open class MainViewModel(application: Application) : AndroidViewModel(applicatio
|
|||
internalState.copy(
|
||||
recentFiles = visibleRecentFiles,
|
||||
allRecentFiles = sortedLibraryFiles,
|
||||
rawLibraryFiles = baseVisibleFiles,
|
||||
contextualActionItems = validContextualItems,
|
||||
shelves = allShelves,
|
||||
booksAvailableForAdding = booksAvailableForAdding
|
||||
|
|
@ -2565,6 +2568,19 @@ open class MainViewModel(application: Application) : AndroidViewModel(applicatio
|
|||
}
|
||||
}
|
||||
|
||||
fun saveHighlights(bookId: String, highlightsJson: String) {
|
||||
viewModelScope.launch {
|
||||
val currentBookUri = _internalState.value.selectedPdfUri ?: _internalState.value.selectedEpubUri
|
||||
if (currentBookUri != null) {
|
||||
recentFilesRepository.getFileByUri(currentBookUri.toString())?.let { item ->
|
||||
recentFilesRepository.updateHighlights(item.bookId, highlightsJson)
|
||||
}
|
||||
} else if (bookId.isNotBlank()) {
|
||||
recentFilesRepository.updateHighlights(bookId, highlightsJson)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val reflowWorkInfo: Flow<WorkInfo?> =
|
||||
WorkManager.getInstance(appContext).getWorkInfosByTagFlow(ReflowWorker.WORK_NAME)
|
||||
.map { list ->
|
||||
|
|
@ -2646,6 +2662,7 @@ open class MainViewModel(application: Application) : AndroidViewModel(applicatio
|
|||
),
|
||||
initialCfi = null,
|
||||
initialBookmarksJson = item.bookmarksJson,
|
||||
initialHighlightsJson = item.highlightsJson,
|
||||
isLoading = false
|
||||
)
|
||||
}
|
||||
|
|
@ -2847,7 +2864,8 @@ open class MainViewModel(application: Application) : AndroidViewModel(applicatio
|
|||
selectedEpubUri = uri,
|
||||
initialLocator = locator,
|
||||
initialCfi = recentItem?.lastPositionCfi,
|
||||
initialBookmarksJson = recentItem?.bookmarksJson
|
||||
initialBookmarksJson = recentItem?.bookmarksJson,
|
||||
initialHighlightsJson = recentItem?.highlightsJson,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue