ariane/app/src/main/java/oppen/gem/io/bookmarks/RoomBookmarks.kt

74 lines
2.5 KiB
Kotlin
Raw Normal View History

package oppen.gem.io.bookmarks
2020-09-07 21:15:18 +00:00
import android.content.Context
import androidx.room.Room
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import java.net.URI
class RoomBookmarks(applicationContext: Context): BookmarksDatasource {
private val db: BookmarksDB = Room.databaseBuilder(applicationContext, BookmarksDB::class.java, "tva_bookmarks").build()
override fun get(onBookmarks: (List<Bookmark>) -> Unit) {
GlobalScope.launch(Dispatchers.IO){
val dbBookmarks = db.bookmarksDao().getAll()
val bookmarks = mutableListOf<Bookmark>()
dbBookmarks.forEach { bookmarkEntity ->
bookmarks.add(
Bookmark(
2020-09-11 21:02:54 +00:00
label = bookmarkEntity.label ?: "Unknown",
uri = URI.create(bookmarkEntity.uri),
index = bookmarkEntity.uiIndex ?: 0)
2020-09-07 21:15:18 +00:00
)
}
onBookmarks(bookmarks)
}
}
override fun add(bookmark: Bookmark, onAdded: () -> Unit) {
GlobalScope.launch(Dispatchers.IO){
2020-09-11 21:02:54 +00:00
val bookmarkEntity = BookmarkEntity(
label = bookmark.label,
uri = bookmark.uri.toString(),
uiIndex = bookmark.index)
2020-09-07 21:15:18 +00:00
db.bookmarksDao().insertAll(bookmarkEntity)
onAdded()
}
}
2020-09-11 21:02:54 +00:00
override fun moveUp(bookmark: Bookmark, onMoved: () -> Unit) {
GlobalScope.launch(Dispatchers.IO){
//todo - this method is broken:
val prev = db.bookmarksDao().getBookmark(bookmark.index -1)
val target = db.bookmarksDao().getBookmark(bookmark.index)
db.bookmarksDao().update(prev.uid, bookmark.index)
db.bookmarksDao().update(target.uid, bookmark.index - 1)
onMoved()
}
}
override fun moveDown(bookmark: Bookmark, onMoved: () -> Unit) {
GlobalScope.launch(Dispatchers.IO){
val next = db.bookmarksDao().getBookmark(bookmark.index + 1)
val target = db.bookmarksDao().getBookmark(bookmark.index)
db.bookmarksDao().update(next.uid, bookmark.index)
db.bookmarksDao().update(target.uid, bookmark.index + 1)
onMoved()
}
}
2020-09-07 21:15:18 +00:00
override fun delete(bookmark: Bookmark, onDelete: () -> Unit) {
2020-09-12 20:10:30 +00:00
GlobalScope.launch(Dispatchers.IO){
val entity = db.bookmarksDao().getBookmark(bookmark.index)
db.bookmarksDao().delete(entity)
onDelete()
}
2020-09-07 21:15:18 +00:00
}
}