mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-26 06:21:12 -04:00
Implemented Save/Delete functionality with libkiwix.
This commit is contained in:
parent
627851a127
commit
de900fda6f
@ -18,13 +18,11 @@
|
||||
|
||||
package org.kiwix.kiwixmobile.core.dao
|
||||
|
||||
import io.objectbox.kotlin.query
|
||||
import io.objectbox.query.QueryBuilder
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import org.kiwix.kiwixmobile.core.dao.entities.BookmarkEntity_
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import org.kiwix.kiwixmobile.core.extensions.isFileExist
|
||||
import org.kiwix.kiwixmobile.core.page.adapter.Page
|
||||
import org.kiwix.kiwixmobile.core.page.bookmark.adapter.BookmarkItem
|
||||
import org.kiwix.kiwixmobile.core.page.bookmark.adapter.LibkiwixBookmarkItem
|
||||
import org.kiwix.kiwixmobile.core.reader.ZimFileReader
|
||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
@ -45,11 +43,17 @@ class LibkiwixBookmarks @Inject constructor(
|
||||
sharedPreferenceUtil.getPublicDirectoryPath(sharedPreferenceUtil.defaultStorage()) + "/kiwix/Bookmarks/"
|
||||
}
|
||||
|
||||
private val bookMarksFile: File by lazy { File(bookmarksFolderPath) }
|
||||
private val bookmarkFile: File by lazy {
|
||||
File("$bookmarksFolderPath/bookmark.txt")
|
||||
}
|
||||
|
||||
init {
|
||||
// Check if bookmark folder exist if not then create the folder first.
|
||||
if (!File(bookmarksFolderPath).isFileExist()) File(bookmarksFolderPath).mkdir()
|
||||
manager.readBookmarkFile(bookmarksFolderPath)
|
||||
// Check if bookmark file exist if not then create the file to save the bookmarks.
|
||||
if (!bookmarkFile.isFileExist()) bookmarkFile.createNewFile()
|
||||
// set up manager to read the bookmarks from this file
|
||||
manager.readBookmarkFile(bookmarkFile.canonicalPath)
|
||||
}
|
||||
|
||||
fun bookmarks(): Flowable<List<Page>> {
|
||||
@ -64,36 +68,37 @@ class LibkiwixBookmarks @Inject constructor(
|
||||
override fun deletePages(pagesToDelete: List<Page>) =
|
||||
deleteBookmarks(pagesToDelete as List<LibkiwixBookmarkItem>)
|
||||
|
||||
fun getCurrentZimBookmarksUrl(zimFileReader: ZimFileReader?) = box.query {
|
||||
equal(
|
||||
BookmarkEntity_.zimId, zimFileReader?.id ?: "",
|
||||
QueryBuilder.StringOrder.CASE_INSENSITIVE
|
||||
)
|
||||
.or()
|
||||
.equal(
|
||||
BookmarkEntity_.zimName, zimFileReader?.name ?: "",
|
||||
QueryBuilder.StringOrder.CASE_INSENSITIVE
|
||||
)
|
||||
order(BookmarkEntity_.bookmarkTitle)
|
||||
}.property(BookmarkEntity_.bookmarkUrl)
|
||||
.findStrings()
|
||||
.toList()
|
||||
.distinct()
|
||||
fun getCurrentZimBookmarksUrl(zimFileReader: ZimFileReader?): List<String> {
|
||||
return zimFileReader?.let { reader ->
|
||||
library
|
||||
.getBookmarks(true)
|
||||
.map { it.url }
|
||||
} ?: emptyList()
|
||||
}
|
||||
|
||||
fun bookmarkUrlsForCurrentBook(zimFileReader: ZimFileReader): Flowable<List<String>> {
|
||||
val book = Book().apply {
|
||||
update(zimFileReader.jniKiwixReader)
|
||||
}
|
||||
library.addBook(book)
|
||||
val bookMarksList: Flowable<List<String>> = arrayListOf<String>()
|
||||
library.getBookmarks(true)
|
||||
.map {
|
||||
return Flowable.create({ emitter ->
|
||||
// Create a Book object and add it to the library
|
||||
val book = Book().apply {
|
||||
update(zimFileReader.jniKiwixReader)
|
||||
}
|
||||
return bookMarksList
|
||||
addBookToLibrary(book)
|
||||
|
||||
// Retrieve bookmarks from the library
|
||||
val bookmarks = library.getBookmarks(true)
|
||||
|
||||
// Extract URLs from bookmarks
|
||||
val urls = bookmarks.map { it.url }
|
||||
|
||||
// Emit the list of URLs
|
||||
emitter.onNext(urls)
|
||||
emitter.onComplete()
|
||||
}, BackpressureStrategy.LATEST)
|
||||
.subscribeOn(Schedulers.io())
|
||||
}
|
||||
|
||||
fun saveBookmark(libkiwixBookmarkItem: LibkiwixBookmarkItem) {
|
||||
library.addBook(libkiwixBookmarkItem.libKiwixBook)
|
||||
addBookToLibrary(libkiwixBookmarkItem.libKiwixBook)
|
||||
val bookmark = Bookmark().apply {
|
||||
bookId = libkiwixBookmarkItem.zimId
|
||||
title = libkiwixBookmarkItem.title
|
||||
@ -101,17 +106,25 @@ class LibkiwixBookmarks @Inject constructor(
|
||||
bookTitle = libkiwixBookmarkItem.libKiwixBook?.title ?: libkiwixBookmarkItem.zimId
|
||||
}
|
||||
library.addBookmark(bookmark).also {
|
||||
// if the book name is not found then takes zim id as file name
|
||||
val bookMarkFileName = libkiwixBookmarkItem.libKiwixBook?.name ?: libkiwixBookmarkItem.id
|
||||
library.writeBookmarksToFile("$bookmarksFolderPath/$bookMarkFileName")
|
||||
writeBookMarksToFile()
|
||||
}
|
||||
}
|
||||
|
||||
private fun addBookToLibrary(libKiwixBook: Book?) {
|
||||
library.addBook(libKiwixBook)
|
||||
}
|
||||
|
||||
fun deleteBookmarks(bookmarks: List<LibkiwixBookmarkItem>) {
|
||||
bookmarks.map { deleteBookmark(it.zimId, it.bookmarkUrl) }
|
||||
}
|
||||
|
||||
fun deleteBookmark(bookId: String, bookmarkUrl: String) {
|
||||
library.removeBookmark(bookId, bookmarkUrl)
|
||||
library.removeBookmark(bookId, bookmarkUrl).also {
|
||||
writeBookMarksToFile()
|
||||
}
|
||||
}
|
||||
|
||||
private fun writeBookMarksToFile() {
|
||||
library.writeBookmarksToFile(bookmarkFile.canonicalPath)
|
||||
}
|
||||
}
|
||||
|
@ -23,10 +23,8 @@ import io.objectbox.query.Query
|
||||
import io.objectbox.rx.RxQuery
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.BackpressureStrategy.LATEST
|
||||
import io.reactivex.Flowable
|
||||
import org.kiwix.kiwixmobile.core.dao.entities.LanguageEntity
|
||||
import org.kiwix.kiwixmobile.core.zim_manager.Language
|
||||
import org.kiwix.libkiwix.Library
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
@ -48,19 +46,3 @@ internal fun <T> Box<T>.asFlowable(
|
||||
backpressureStrategy: BackpressureStrategy = LATEST
|
||||
) =
|
||||
RxQuery.observable(query).toFlowable(backpressureStrategy)
|
||||
|
||||
fun <T> Library.asFlowable(
|
||||
queryFunction: () -> List<T>,
|
||||
backpressureStrategy: BackpressureStrategy = BackpressureStrategy.LATEST
|
||||
): Flowable<List<T>> {
|
||||
return Flowable.create({ emitter ->
|
||||
val subscription = this.subscribe {
|
||||
val results = queryFunction()
|
||||
emitter.onNext(results)
|
||||
}
|
||||
|
||||
emitter.setCancellable {
|
||||
subscription.dispose()
|
||||
}
|
||||
}, backpressureStrategy)
|
||||
}
|
||||
|
@ -47,13 +47,13 @@ class ObjectBoxToLibkiwixMigrator {
|
||||
bookMarksList.forEachIndexed { _, bookmarkEntity ->
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
// removing the single entity from the object box after migration.
|
||||
box.query {
|
||||
equal(
|
||||
BookmarkEntity_.bookmarkUrl,
|
||||
bookmarkEntity.bookmarkUrl,
|
||||
QueryBuilder.StringOrder.CASE_INSENSITIVE
|
||||
)
|
||||
}.remove()
|
||||
// box.query {
|
||||
// equal(
|
||||
// BookmarkEntity_.bookmarkUrl,
|
||||
// bookmarkEntity.bookmarkUrl,
|
||||
// QueryBuilder.StringOrder.CASE_INSENSITIVE
|
||||
// )
|
||||
// }.remove()
|
||||
}
|
||||
}
|
||||
sharedPreferenceUtil.putPrefBookMarkMigrated(true)
|
||||
|
@ -107,6 +107,7 @@ import org.kiwix.kiwixmobile.core.R2
|
||||
import org.kiwix.kiwixmobile.core.StorageObserver
|
||||
import org.kiwix.kiwixmobile.core.base.BaseFragment
|
||||
import org.kiwix.kiwixmobile.core.base.FragmentActivityExtensions
|
||||
import org.kiwix.kiwixmobile.core.dao.LibkiwixBookmarks
|
||||
import org.kiwix.kiwixmobile.core.dao.NewBookmarksDao
|
||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.consumeObservable
|
||||
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.hasNotificationPermission
|
||||
@ -249,6 +250,10 @@ abstract class CoreReaderFragment :
|
||||
@Inject
|
||||
var newBookmarksDao: NewBookmarksDao? = null
|
||||
|
||||
@JvmField
|
||||
@Inject
|
||||
var libkiwixBookmarks: LibkiwixBookmarks? = null
|
||||
|
||||
@JvmField
|
||||
@Inject
|
||||
var alertDialogShower: DialogShower? = null
|
||||
|
@ -21,6 +21,7 @@ package org.kiwix.kiwixmobile.core.page.bookmark.adapter
|
||||
import org.kiwix.kiwixmobile.core.page.adapter.Page
|
||||
import org.kiwix.kiwixmobile.core.reader.ZimFileReader
|
||||
import org.kiwix.libkiwix.Book
|
||||
import org.kiwix.libkiwix.Bookmark
|
||||
|
||||
data class LibkiwixBookmarkItem(
|
||||
val databaseId: Long = 0L,
|
||||
@ -35,14 +36,14 @@ data class LibkiwixBookmarkItem(
|
||||
override val id: Long = databaseId,
|
||||
val libKiwixBook: Book?,
|
||||
) : Page {
|
||||
/*constructor(libkiwixBookmark: Bookmark, libkiwixBook: Book) : this(
|
||||
id = 0L,
|
||||
zimId = libkiwixBookmark.bookId,
|
||||
zimFilePath = libkiwixBook.url,
|
||||
zimName = libkiwixBookmark.bookTitle,
|
||||
bookMarkUrl = libkiwixBookmark.url,
|
||||
title = libkiwixBookmark.title,
|
||||
)*/
|
||||
// constructor(libkiwixBookmark: Bookmark, libkiwixBook: Book) : this(
|
||||
// id = 0L,
|
||||
// zimId = libkiwixBookmark.bookId,
|
||||
// zimFilePath = libkiwixBook.url,
|
||||
// zimName = libkiwixBookmark.bookTitle,
|
||||
// bookMarkUrl = libkiwixBookmark.url,
|
||||
// title = libkiwixBookmark.title,
|
||||
// )
|
||||
|
||||
constructor(
|
||||
title: String,
|
||||
@ -50,7 +51,7 @@ data class LibkiwixBookmarkItem(
|
||||
zimFileReader: ZimFileReader,
|
||||
libKiwixBook: Book
|
||||
) : this(
|
||||
zimFilePath = libKiwixBook.path,
|
||||
zimFilePath = zimFileReader.zimFile.canonicalPath,
|
||||
zimId = libKiwixBook.id,
|
||||
zimName = libKiwixBook.name,
|
||||
bookmarkUrl = articleUrl,
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
||||
package org.kiwix.kiwixmobile.core.page.bookmark.viewmodel
|
||||
|
||||
import org.kiwix.kiwixmobile.core.dao.NewBookmarksDao
|
||||
import org.kiwix.kiwixmobile.core.dao.LibkiwixBookmarks
|
||||
import org.kiwix.kiwixmobile.core.page.bookmark.adapter.BookmarkItem
|
||||
import org.kiwix.kiwixmobile.core.page.bookmark.viewmodel.effects.ShowDeleteBookmarksDialog
|
||||
import org.kiwix.kiwixmobile.core.page.bookmark.viewmodel.effects.UpdateAllBookmarksPreference
|
||||
@ -29,10 +29,10 @@ import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||
import javax.inject.Inject
|
||||
|
||||
class BookmarkViewModel @Inject constructor(
|
||||
bookmarksDao: NewBookmarksDao,
|
||||
libkiwixBookmarks: LibkiwixBookmarks,
|
||||
zimReaderContainer: ZimReaderContainer,
|
||||
sharedPrefs: SharedPreferenceUtil
|
||||
) : PageViewModel<BookmarkItem, BookmarkState>(bookmarksDao, sharedPrefs, zimReaderContainer) {
|
||||
) : PageViewModel<BookmarkItem, BookmarkState>(libkiwixBookmarks, sharedPrefs, zimReaderContainer) {
|
||||
|
||||
override fun initialState(): BookmarkState =
|
||||
BookmarkState(emptyList(), sharedPreferenceUtil.showBookmarksAllBooks, zimReaderContainer.id)
|
||||
|
Loading…
x
Reference in New Issue
Block a user