Added Undo button for swiping in manga details
This commit is contained in:
parent
651682df4a
commit
ddb4092e16
@ -547,13 +547,48 @@ class MangaDetailsController : BaseController,
|
|||||||
|
|
||||||
fun bookmarkChapter(position: Int) {
|
fun bookmarkChapter(position: Int) {
|
||||||
val item = adapter?.getItem(position) as? ChapterItem ?: return
|
val item = adapter?.getItem(position) as? ChapterItem ?: return
|
||||||
bookmarkChapters(listOf(item), !item.bookmark)
|
val chapter = item.chapter
|
||||||
|
val bookmarked = item.bookmark
|
||||||
|
bookmarkChapters(listOf(item), !bookmarked)
|
||||||
|
snack?.dismiss()
|
||||||
|
snack = view?.snack(
|
||||||
|
if (bookmarked) R.string.removed_bookmark
|
||||||
|
else R.string.bookmarked, Snackbar.LENGTH_INDEFINITE
|
||||||
|
) {
|
||||||
|
setAction(R.string.action_undo) {
|
||||||
|
bookmarkChapters(listOf(item), bookmarked)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(activity as? MainActivity)?.setUndoSnackBar(snack)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun toggleReadChapter(position: Int) {
|
fun toggleReadChapter(position: Int) {
|
||||||
val item = adapter?.getItem(position) as? ChapterItem ?: return
|
val item = adapter?.getItem(position) as? ChapterItem ?: return
|
||||||
if (!item.read) markAsRead(listOf(item))
|
val chapter = item.chapter
|
||||||
else markAsUnread(listOf(item))
|
val lastRead = chapter.last_page_read
|
||||||
|
val pagesLeft = chapter.pages_left
|
||||||
|
val read = item.chapter.read
|
||||||
|
presenter.markChaptersRead(listOf(item), !read, false)
|
||||||
|
snack?.dismiss()
|
||||||
|
snack = view?.snack(
|
||||||
|
if (read) R.string.marked_as_unread
|
||||||
|
else R.string.marked_as_read, Snackbar.LENGTH_INDEFINITE
|
||||||
|
) {
|
||||||
|
var undoing = false
|
||||||
|
setAction(R.string.action_undo) {
|
||||||
|
presenter.markChaptersRead(listOf(item), read, true, lastRead, pagesLeft)
|
||||||
|
undoing = true
|
||||||
|
}
|
||||||
|
addCallback(object : BaseTransientBottomBar.BaseCallback<Snackbar>() {
|
||||||
|
override fun onDismissed(transientBottomBar: Snackbar?, event: Int) {
|
||||||
|
super.onDismissed(transientBottomBar, event)
|
||||||
|
if (!undoing && !read && presenter.preferences.removeAfterMarkedAsRead()) {
|
||||||
|
presenter.deleteChapters(listOf(item))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
(activity as? MainActivity)?.setUndoSnackBar(snack)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun bookmarkChapters(chapters: List<ChapterItem>, bookmarked: Boolean) {
|
private fun bookmarkChapters(chapters: List<ChapterItem>, bookmarked: Boolean) {
|
||||||
|
@ -290,26 +290,16 @@ class MangaDetailsPresenter(
|
|||||||
* @param chapters the list of chapters to delete.
|
* @param chapters the list of chapters to delete.
|
||||||
*/
|
*/
|
||||||
fun deleteChapters(chapters: List<ChapterItem>, update: Boolean = true) {
|
fun deleteChapters(chapters: List<ChapterItem>, update: Boolean = true) {
|
||||||
deleteChaptersInternal(chapters)
|
downloadManager.deleteChapters(chapters, manga, source)
|
||||||
|
|
||||||
chapters.forEach { chapter ->
|
chapters.forEach { chapter ->
|
||||||
this.chapters.find { it.id == chapter.id }?.download?.status = Download.NOT_DOWNLOADED
|
this.chapters.find { it.id == chapter.id }?.apply {
|
||||||
|
status = Download.NOT_DOWNLOADED
|
||||||
|
download = null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (update)
|
if (update) controller.updateChapters(this.chapters)
|
||||||
controller.updateChapters(this.chapters)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Deletes a list of chapters from disk. This method is called in a background thread.
|
|
||||||
* @param chapters the chapters to delete.
|
|
||||||
*/
|
|
||||||
private fun deleteChaptersInternal(chapters: List<ChapterItem>) {
|
|
||||||
downloadManager.deleteChapters(chapters, manga, source)
|
|
||||||
chapters.forEach {
|
|
||||||
it.status = Download.NOT_DOWNLOADED
|
|
||||||
it.download = null
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun refreshAll() {
|
fun refreshAll() {
|
||||||
@ -412,17 +402,23 @@ class MangaDetailsPresenter(
|
|||||||
* @param selectedChapters the list of selected chapters.
|
* @param selectedChapters the list of selected chapters.
|
||||||
* @param read whether to mark chapters as read or unread.
|
* @param read whether to mark chapters as read or unread.
|
||||||
*/
|
*/
|
||||||
fun markChaptersRead(selectedChapters: List<ChapterItem>, read: Boolean) {
|
fun markChaptersRead(
|
||||||
|
selectedChapters: List<ChapterItem>,
|
||||||
|
read: Boolean,
|
||||||
|
deleteNow: Boolean = true,
|
||||||
|
lastRead: Int? = null,
|
||||||
|
pagesLeft: Int? = null
|
||||||
|
) {
|
||||||
scope.launch(Dispatchers.IO) {
|
scope.launch(Dispatchers.IO) {
|
||||||
selectedChapters.forEach {
|
selectedChapters.forEach {
|
||||||
it.read = read
|
it.read = read
|
||||||
if (!read) {
|
if (!read) {
|
||||||
it.last_page_read = 0
|
it.last_page_read = lastRead ?: 0
|
||||||
it.pages_left = 0
|
it.pages_left = pagesLeft ?: 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
db.updateChaptersProgress(selectedChapters).executeAsBlocking()
|
db.updateChaptersProgress(selectedChapters).executeAsBlocking()
|
||||||
if (read && preferences.removeAfterMarkedAsRead()) {
|
if (read && deleteNow && preferences.removeAfterMarkedAsRead()) {
|
||||||
deleteChapters(selectedChapters, false)
|
deleteChapters(selectedChapters, false)
|
||||||
}
|
}
|
||||||
getChapters()
|
getChapters()
|
||||||
|
@ -203,7 +203,7 @@ class RecentChaptersController(bundle: Bundle? = null) : BaseController(bundle),
|
|||||||
snack = view?.snack(R.string.marked_as_read, Snackbar.LENGTH_INDEFINITE) {
|
snack = view?.snack(R.string.marked_as_read, Snackbar.LENGTH_INDEFINITE) {
|
||||||
var undoing = false
|
var undoing = false
|
||||||
setAction(R.string.action_undo) {
|
setAction(R.string.action_undo) {
|
||||||
presenter.markChapterRead(item, !item.chapter.read, lastRead, pagesLeft)
|
presenter.markChapterRead(item, read, lastRead, pagesLeft)
|
||||||
undoing = true
|
undoing = true
|
||||||
}
|
}
|
||||||
addCallback(object : BaseTransientBottomBar.BaseCallback<Snackbar>() {
|
addCallback(object : BaseTransientBottomBar.BaseCallback<Snackbar>() {
|
||||||
|
@ -780,6 +780,9 @@
|
|||||||
<string name="view_history">View history</string>
|
<string name="view_history">View history</string>
|
||||||
<string name="view_all_updates">View all updates</string>
|
<string name="view_all_updates">View all updates</string>
|
||||||
<string name="marked_as_read">Marked as read</string>
|
<string name="marked_as_read">Marked as read</string>
|
||||||
|
<string name="marked_as_unread">Marked as unread</string>
|
||||||
|
<string name="bookmarked">Bookmarked</string>
|
||||||
|
<string name="removed_bookmark">Removed bookmark</string>
|
||||||
<string name="no_search_result">No search results</string>
|
<string name="no_search_result">No search results</string>
|
||||||
<string name="search_recents">Search recents…</string>
|
<string name="search_recents">Search recents…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user