mirror of
https://github.com/mihonapp/mihon.git
synced 2025-11-15 13:37:29 +01:00
Added option to bookmark single chapter (#496)
* Added option to bookmark single chapter * Fixes
This commit is contained in:
committed by
inorichi
parent
b418169c20
commit
125f1ae34c
@@ -121,11 +121,13 @@ class ChaptersFragment : BaseRxFragment<ChaptersPresenter>(), ActionMode.Callbac
|
||||
val menuFilterRead = menu.findItem(R.id.action_filter_read)
|
||||
val menuFilterUnread = menu.findItem(R.id.action_filter_unread)
|
||||
val menuFilterDownloaded = menu.findItem(R.id.action_filter_downloaded)
|
||||
val menuFilterBookmarked = menu.findItem(R.id.action_filter_bookmarked)
|
||||
|
||||
// Set correct checkbox values.
|
||||
menuFilterRead.isChecked = presenter.onlyRead()
|
||||
menuFilterUnread.isChecked = presenter.onlyUnread()
|
||||
menuFilterDownloaded.isChecked = presenter.onlyDownloaded()
|
||||
menuFilterBookmarked.isChecked = presenter.onlyBookmarked()
|
||||
|
||||
if (presenter.onlyRead())
|
||||
//Disable unread filter option if read filter is enabled.
|
||||
@@ -154,6 +156,10 @@ class ChaptersFragment : BaseRxFragment<ChaptersPresenter>(), ActionMode.Callbac
|
||||
item.isChecked = !item.isChecked
|
||||
presenter.setDownloadedFilter(item.isChecked)
|
||||
}
|
||||
R.id.action_filter_bookmarked -> {
|
||||
item.isChecked = !item.isChecked
|
||||
presenter.setBookmarkedFilter(item.isChecked)
|
||||
}
|
||||
R.id.action_filter_empty -> {
|
||||
presenter.removeFilters()
|
||||
activity.supportInvalidateOptionsMenu()
|
||||
@@ -362,6 +368,11 @@ class ChaptersFragment : BaseRxFragment<ChaptersPresenter>(), ActionMode.Callbac
|
||||
presenter.downloadChapters(chapters)
|
||||
}
|
||||
|
||||
fun bookmarkChapters(chapters: List<ChapterModel>, bookmarked: Boolean) {
|
||||
destroyActionModeIfNeeded()
|
||||
presenter.bookmarkChapters(chapters,bookmarked)
|
||||
}
|
||||
|
||||
fun deleteChapters(chapters: List<ChapterModel>) {
|
||||
destroyActionModeIfNeeded()
|
||||
DeletingChaptersDialog().show(childFragmentManager, DeletingChaptersDialog.TAG)
|
||||
|
||||
@@ -21,6 +21,7 @@ class ChaptersHolder(
|
||||
|
||||
private val readColor = view.context.theme.getResourceColor(android.R.attr.textColorHint)
|
||||
private val unreadColor = view.context.theme.getResourceColor(android.R.attr.textColorPrimary)
|
||||
private val bookmarkedColor = view.context.theme.getResourceColor(android.R.attr.colorAccent)
|
||||
private val decimalFormat = DecimalFormat("#.###", DecimalFormatSymbols().apply { decimalSeparator = '.' })
|
||||
private val df = DateFormat.getDateInstance(DateFormat.SHORT)
|
||||
|
||||
@@ -43,7 +44,10 @@ class ChaptersHolder(
|
||||
}
|
||||
else -> chapter.name
|
||||
}
|
||||
|
||||
// Set correct text color
|
||||
chapter_title.setTextColor(if (chapter.read) readColor else unreadColor)
|
||||
if (chapter.bookmark) chapter_title.setTextColor(bookmarkedColor)
|
||||
|
||||
if (chapter.date_upload > 0) {
|
||||
chapter_date.text = df.format(Date(chapter.date_upload))
|
||||
@@ -84,6 +88,10 @@ class ChaptersHolder(
|
||||
popup.menu.findItem(R.id.action_delete).isVisible = true
|
||||
}
|
||||
|
||||
// Hide bookmark if bookmark
|
||||
popup.menu.findItem(R.id.action_bookmark).isVisible = !chapter.bookmark
|
||||
popup.menu.findItem(R.id.action_remove_bookmark).isVisible = chapter.bookmark
|
||||
|
||||
// Hide mark as unread when the chapter is unread
|
||||
if (!chapter.read && chapter.last_page_read == 0) {
|
||||
popup.menu.findItem(R.id.action_mark_as_unread).isVisible = false
|
||||
@@ -101,6 +109,8 @@ class ChaptersHolder(
|
||||
with(adapter.fragment) {
|
||||
when (menuItem.itemId) {
|
||||
R.id.action_download -> downloadChapters(chapterList)
|
||||
R.id.action_bookmark -> bookmarkChapters(chapterList, true)
|
||||
R.id.action_remove_bookmark -> bookmarkChapters(chapterList, false)
|
||||
R.id.action_delete -> deleteChapters(chapterList)
|
||||
R.id.action_mark_as_read -> markAsRead(chapterList)
|
||||
R.id.action_mark_as_unread -> markAsUnread(chapterList)
|
||||
|
||||
@@ -200,7 +200,6 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
||||
|
||||
/**
|
||||
* Applies the view filters to the list of chapters obtained from the database.
|
||||
*
|
||||
* @param chapters the list of chapters from the database
|
||||
* @return an observable of the list of chapters filtered and sorted.
|
||||
*/
|
||||
@@ -215,6 +214,9 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
||||
if (onlyDownloaded()) {
|
||||
observable = observable.filter { it.isDownloaded }
|
||||
}
|
||||
if (onlyBookmarked()) {
|
||||
observable = observable.filter { it.bookmark }
|
||||
}
|
||||
val sortFunction: (Chapter, Chapter) -> Int = when (manga.sorting) {
|
||||
Manga.SORTING_SOURCE -> when (sortDescending()) {
|
||||
true -> { c1, c2 -> c1.source_order.compareTo(c2.source_order) }
|
||||
@@ -231,7 +233,6 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
||||
|
||||
/**
|
||||
* Called when a download for the active manga changes status.
|
||||
*
|
||||
* @param download the download whose status changed.
|
||||
*/
|
||||
fun onDownloadStatusChange(download: Download) {
|
||||
@@ -258,7 +259,6 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
||||
|
||||
/**
|
||||
* Mark the selected chapter list as read/unread.
|
||||
*
|
||||
* @param selectedChapters the list of selected chapters.
|
||||
* @param read whether to mark chapters as read or unread.
|
||||
*/
|
||||
@@ -278,7 +278,6 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
||||
|
||||
/**
|
||||
* Mark the previous chapters to the selected one as read.
|
||||
*
|
||||
* @param chapter the selected chapter.
|
||||
*/
|
||||
fun markPreviousChaptersAsRead(chapter: ChapterModel) {
|
||||
@@ -292,7 +291,6 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
||||
|
||||
/**
|
||||
* Downloads the given list of chapters with the manager.
|
||||
*
|
||||
* @param chapters the list of chapters to download.
|
||||
*/
|
||||
fun downloadChapters(chapters: List<ChapterModel>) {
|
||||
@@ -300,9 +298,23 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
||||
downloadManager.downloadChapters(manga, chapters)
|
||||
}
|
||||
|
||||
/**
|
||||
* Bookmarks the given list of chapters.
|
||||
* @param selectedChapters the list of chapters to bookmark.
|
||||
*/
|
||||
fun bookmarkChapters(selectedChapters: List<ChapterModel>, bookmarked: Boolean) {
|
||||
Observable.from(selectedChapters)
|
||||
.doOnNext { chapter ->
|
||||
chapter.bookmark = bookmarked
|
||||
}
|
||||
.toList()
|
||||
.flatMap { db.updateChaptersProgress(it).asRxObservable() }
|
||||
.subscribeOn(Schedulers.io())
|
||||
.subscribe()
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes the given list of chapter.
|
||||
*
|
||||
* @param chapters the list of chapters to delete.
|
||||
*/
|
||||
fun deleteChapters(chapters: List<ChapterModel>) {
|
||||
@@ -328,7 +340,6 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
||||
|
||||
/**
|
||||
* Deletes a chapter from disk. This method is called in a background thread.
|
||||
*
|
||||
* @param chapter the chapter to delete.
|
||||
*/
|
||||
private fun deleteChapter(chapter: ChapterModel) {
|
||||
@@ -349,7 +360,6 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
||||
|
||||
/**
|
||||
* Sets the read filter and requests an UI update.
|
||||
*
|
||||
* @param onlyUnread whether to display only unread chapters or all chapters.
|
||||
*/
|
||||
fun setUnreadFilter(onlyUnread: Boolean) {
|
||||
@@ -360,7 +370,6 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
||||
|
||||
/**
|
||||
* Sets the read filter and requests an UI update.
|
||||
*
|
||||
* @param onlyRead whether to display only read chapters or all chapters.
|
||||
*/
|
||||
fun setReadFilter(onlyRead: Boolean) {
|
||||
@@ -371,7 +380,6 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
||||
|
||||
/**
|
||||
* Sets the download filter and requests an UI update.
|
||||
*
|
||||
* @param onlyDownloaded whether to display only downloaded chapters or all chapters.
|
||||
*/
|
||||
fun setDownloadedFilter(onlyDownloaded: Boolean) {
|
||||
@@ -380,19 +388,29 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
||||
refreshChapters()
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the bookmark filter and requests an UI update.
|
||||
* @param onlyBookmarked whether to display only bookmarked chapters or all chapters.
|
||||
*/
|
||||
fun setBookmarkedFilter(onlyBookmarked: Boolean) {
|
||||
manga.bookmarkedFilter = if (onlyBookmarked) Manga.SHOW_BOOKMARKED else Manga.SHOW_ALL
|
||||
db.updateFlags(manga).executeAsBlocking()
|
||||
refreshChapters()
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all filters and requests an UI update.
|
||||
*/
|
||||
fun removeFilters() {
|
||||
manga.readFilter = Manga.SHOW_ALL
|
||||
manga.downloadedFilter = Manga.SHOW_ALL
|
||||
manga.bookmarkedFilter = Manga.SHOW_ALL
|
||||
db.updateFlags(manga).executeAsBlocking()
|
||||
refreshChapters()
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the active display mode.
|
||||
*
|
||||
* @param mode the mode to set.
|
||||
*/
|
||||
fun setDisplayMode(mode: Int) {
|
||||
@@ -402,7 +420,6 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
||||
|
||||
/**
|
||||
* Sets the sorting method and requests an UI update.
|
||||
*
|
||||
* @param sort the sorting mode.
|
||||
*/
|
||||
fun setSorting(sort: Int) {
|
||||
@@ -418,6 +435,13 @@ class ChaptersPresenter : BasePresenter<ChaptersFragment>() {
|
||||
return manga.downloadedFilter == Manga.SHOW_DOWNLOADED
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the display only downloaded filter is enabled.
|
||||
*/
|
||||
fun onlyBookmarked(): Boolean {
|
||||
return manga.bookmarkedFilter == Manga.SHOW_BOOKMARKED
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the display only unread filter is enabled.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user