66
77package org.readium.r2.testapp.bookshelf
88
9+ import androidx.annotation.ColorInt
910import androidx.lifecycle.LiveData
11+ import kotlinx.coroutines.flow.Flow
1012import org.joda.time.DateTime
1113import org.readium.r2.shared.publication.Locator
1214import org.readium.r2.shared.publication.Publication
@@ -16,11 +18,12 @@ import org.readium.r2.testapp.domain.model.Book
1618import org.readium.r2.testapp.domain.model.Bookmark
1719import org.readium.r2.testapp.domain.model.Highlight
1820import org.readium.r2.testapp.utils.extensions.authorName
21+ import java.util.*
1922import org.readium.r2.navigator.epub.Highlight as NavigatorHighlight
2023
2124class BookRepository (private val booksDao : BooksDao ) {
2225
23- fun getBooksFromDatabase (): LiveData <List <Book >> = booksDao.getAllBooks()
26+ fun books (): LiveData <List <Book >> = booksDao.getAllBooks()
2427
2528 suspend fun insertBook (href : String , extension : String , publication : Publication ): Long {
2629 val book = Book (
@@ -60,75 +63,27 @@ class BookRepository(private val booksDao: BooksDao) {
6063 return booksDao.insertBookmark(bookmark)
6164 }
6265
63- fun getBookmarks (bookId : Long ): LiveData <MutableList <Bookmark >> =
66+ fun bookmarksForBook (bookId : Long ): LiveData <MutableList <Bookmark >> =
6467 booksDao.getBookmarksForBook(bookId)
6568
6669 suspend fun deleteBookmark (bookmarkId : Long ) = booksDao.deleteBookmark(bookmarkId)
6770
68- fun getHighlights ( bookId : Long , href : String ): LiveData < List < Highlight >> =
69- booksDao.getHighlightsForBook(bookId, href )
71+ suspend fun highlightById ( id : Long ): Highlight ? =
72+ booksDao.getHighlightById(id )
7073
71- fun getHighlights (bookId : Long ): LiveData <List <Highlight >> =
74+ fun highlightsForBook (bookId : Long ): Flow <List <Highlight >> =
7275 booksDao.getHighlightsForBook(bookId)
7376
74- suspend fun insertHighlight (
75- bookId : Long ,
76- publication : Publication ,
77- navigatorHighlight : NavigatorHighlight ,
78- progression : Double ,
79- annotation : String? = null
80- ): Long {
81- val resource =
82- publication.readingOrder.indexOfFirstWithHref(navigatorHighlight.locator.href)!!
83-
84- // This is required to be able to go right to a highlight from the Outline fragment,
85- // as Navigator.go doesn't support DOM ranges yet.
86- val locations = navigatorHighlight.locator.locations.copy(progression = progression)
87-
88- val highlight = Highlight (
89- creation = DateTime ().toDate().time,
90- bookId = bookId,
91- highlightId = navigatorHighlight.id,
92- publicationId = publication.metadata.identifier ? : publication.metadata.title,
93- style = " style" ,
94- color = navigatorHighlight.color,
95- annotation = annotation ? : " " ,
96- annotationMarkStyle = navigatorHighlight.annotationMarkStyle ? : " " ,
97- resourceIndex = resource.toLong(),
98- resourceHref = navigatorHighlight.locator.href,
99- resourceType = navigatorHighlight.locator.type,
100- resourceTitle = navigatorHighlight.locator.title.orEmpty(),
101- location = locations.toJSON().toString(),
102- locatorText = navigatorHighlight.locator.text.toJSON().toString()
103- )
77+ suspend fun addHighlight (bookId : Long , style : Highlight .Style , @ColorInt tint : Int , locator : Locator , annotation : String ): Long =
78+ booksDao.insertHighlight(Highlight (bookId, style, tint, locator, annotation))
10479
105- return booksDao.insertHighlight(highlight)
106- }
107-
108- // This will be used when highlights are redone
109- // suspend fun deleteHighlight(id: Long) = booksDao.deleteHighlight(id)
110-
111- suspend fun updateHighlight (
112- id : String ,
113- color : Int? = null,
114- annotation : String? = null,
115- markStyle : String? = null
116- ) {
117- val highlight = getHighlightByHighlightId(id)
80+ suspend fun deleteHighlight (id : Long ) = booksDao.deleteHighlight(id)
11881
119- if (highlight != null ) {
120- val updatedColor = color ? : highlight.color
121- val updatedAnnotation = annotation ? : highlight.annotation
122- val updatedMarkStyle = markStyle ? : highlight.annotationMarkStyle
123-
124- booksDao.updateHighlight(id, updatedColor, updatedAnnotation, updatedMarkStyle)
125- }
82+ suspend fun updateHighlightAnnotation (id : Long , annotation : String ) {
83+ booksDao.updateHighlightAnnotation(id, annotation)
12684 }
12785
128- suspend fun getHighlightByHighlightId ( highlightId : String ) : Highlight ? {
129- return booksDao.getHighlightByHighlightId(highlightId).firstOrNull( )
86+ suspend fun updateHighlightStyle ( id : Long , style : Highlight . Style , @ColorInt tint : Int ) {
87+ booksDao.updateHighlightStyle(id, style, tint )
13088 }
131-
132- suspend fun deleteHighlightByHighlightId (highlightId : String ) =
133- booksDao.deleteHighlightByHighlightId(highlightId)
13489}
0 commit comments