Fix #277, library not updating

This commit is contained in:
len 2016-04-23 15:39:41 +02:00
parent cb58145361
commit 4befcf3819
4 changed files with 30 additions and 41 deletions

View File

@ -5,7 +5,7 @@ import eu.kanade.tachiyomi.data.database.models.Manga
class LibraryMangaEvent(val mangas: Map<Int, List<Manga>>) {
fun getMangasForCategory(category: Category): List<Manga>? {
fun getMangaForCategory(category: Category): List<Manga>? {
return mangas[category.id]
}
}

View File

@ -15,7 +15,6 @@ import eu.kanade.tachiyomi.ui.base.fragment.BaseFragment
import eu.kanade.tachiyomi.ui.manga.MangaActivity
import kotlinx.android.synthetic.main.fragment_library_category.*
import rx.Subscription
import java.util.*
/**
* Fragment containing the library manga for a certain category.
@ -34,14 +33,6 @@ class LibraryCategoryFragment : BaseFragment(), FlexibleViewHolder.OnListItemCli
*/
private var position: Int = 0
/**
* Manga in this category.
*/
private var mangas: List<Manga>? = null
set(value) {
field = value ?: ArrayList()
}
/**
* Subscription for the library manga.
*/
@ -119,7 +110,7 @@ class LibraryCategoryFragment : BaseFragment(), FlexibleViewHolder.OnListItemCli
override fun onResume() {
super.onResume()
libraryMangaSubscription = libraryPresenter.libraryMangaSubject
.subscribe { if (it != null) onNextLibraryManga(it) }
.subscribe { onNextLibraryManga(it) }
}
override fun onPause() {
@ -134,8 +125,8 @@ class LibraryCategoryFragment : BaseFragment(), FlexibleViewHolder.OnListItemCli
}
/**
* Subscribe to [LibraryMangaEvent]. When an event is received, it updates [mangas] if needed
* and refresh the content of the adapter.
* Subscribe to [LibraryMangaEvent]. When an event is received, it updates the content of the
* adapter.
*
* @param event the event received.
*/
@ -146,15 +137,11 @@ class LibraryCategoryFragment : BaseFragment(), FlexibleViewHolder.OnListItemCli
// When a category is deleted, the index can be greater than the number of categories.
if (position >= categories.size) return
// Get the manga list for this category
val mangaForCategory = event.getMangasForCategory(categories[position])
// Get the manga list for this category.
val mangaForCategory = event.getMangaForCategory(categories[position]) ?: emptyList()
// Update the list only if the reference to the list is different, avoiding reseting the
// adapter after every onResume.
if (mangas !== mangaForCategory) {
mangas = mangaForCategory
adapter.setItems(mangas ?: emptyList())
}
// Update the category with its manga.
adapter.setItems(mangaForCategory)
}
/**

View File

@ -125,6 +125,11 @@ class LibraryFragment : BaseRxFragment<LibraryPresenter>(), ActionMode.Callback
}
}
override fun onResume() {
super.onResume()
presenter.subscribeLibrary()
}
override fun onDestroyView() {
tabs.visibility = View.GONE
super.onDestroyView()

View File

@ -44,7 +44,7 @@ class LibraryPresenter : BasePresenter<LibraryFragment>() {
/**
* Subject to notify the library's viewpager for updates.
*/
val libraryMangaSubject = BehaviorSubject.create<LibraryMangaEvent?>()
val libraryMangaSubject = BehaviorSubject.create<LibraryMangaEvent>()
/**
* Database.
@ -91,18 +91,6 @@ class LibraryPresenter : BasePresenter<LibraryFragment>() {
}
override fun onDropView() {
libraryMangaSubject.onNext(null)
super.onDropView()
}
override fun onTakeView(libraryFragment: LibraryFragment) {
super.onTakeView(libraryFragment)
if (isUnsubscribed(GET_LIBRARY)) {
start(GET_LIBRARY)
}
}
/**
* Get the categories and all its manga from the database.
*
@ -114,13 +102,6 @@ class LibraryPresenter : BasePresenter<LibraryFragment>() {
.observeOn(AndroidSchedulers.mainThread())
}
/**
* Update the library information
*/
fun updateLibrary() {
start(GET_LIBRARY)
}
/**
* Get the categories from the database.
*
@ -151,6 +132,22 @@ class LibraryPresenter : BasePresenter<LibraryFragment>() {
}
}
/**
* Resubscribes to library if needed.
*/
fun subscribeLibrary() {
if (isUnsubscribed(GET_LIBRARY)) {
start(GET_LIBRARY)
}
}
/**
* Resubscribes to library.
*/
fun updateLibrary() {
start(GET_LIBRARY)
}
/**
* Filter library by preference
*