mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-12-23 14:01:52 +01:00
Add documentation to library presenter
This commit is contained in:
parent
2b6c435aba
commit
5d0ce6cb3f
@ -53,28 +53,27 @@ class LibraryPresenter(
|
||||
|
||||
private val loggedServices by lazy { Injekt.get<TrackManager>().services.filter { it.isLogged } }
|
||||
|
||||
/**
|
||||
* Categories of the library.
|
||||
*/
|
||||
/** Current categories of the library. */
|
||||
var categories: List<Category> = emptyList()
|
||||
private set
|
||||
|
||||
/** All categories of the library, in case they are hidden because of hide categories is on */
|
||||
var allCategories: List<Category> = emptyList()
|
||||
private set
|
||||
|
||||
/**
|
||||
* List of all manga to update the
|
||||
*/
|
||||
/** List of all manga to update the */
|
||||
var libraryItems: List<LibraryItem> = emptyList()
|
||||
private var allLibraryItems: List<LibraryItem> = emptyList()
|
||||
|
||||
private var totalChapters: Map<Long, Int>? = null
|
||||
|
||||
/** Save the current list to speed up loading later */
|
||||
fun onDestroy() {
|
||||
lastLibraryItems = libraryItems
|
||||
lastCategories = categories
|
||||
}
|
||||
|
||||
/** Restore the static items to speed up reloading the view */
|
||||
fun onRestore() {
|
||||
libraryItems = lastLibraryItems ?: return
|
||||
categories = lastCategories ?: return
|
||||
@ -82,6 +81,7 @@ class LibraryPresenter(
|
||||
lastLibraryItems = null
|
||||
}
|
||||
|
||||
/** Get favorited manga for library and sort and filter it */
|
||||
fun getLibrary() {
|
||||
launchUI {
|
||||
totalChapters = null
|
||||
@ -107,11 +107,11 @@ class LibraryPresenter(
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies library filters to the given map of manga.
|
||||
* Applies library filters to the given list of manga.
|
||||
*
|
||||
* @param map the map to filter.
|
||||
* @param items the items to filter.
|
||||
*/
|
||||
private fun applyFilters(map: List<LibraryItem>): List<LibraryItem> {
|
||||
private fun applyFilters(items: List<LibraryItem>): List<LibraryItem> {
|
||||
val filterDownloaded = preferences.filterDownloaded().getOrDefault()
|
||||
|
||||
val filterUnread = preferences.filterUnread().getOrDefault()
|
||||
@ -124,7 +124,7 @@ class LibraryPresenter(
|
||||
|
||||
val filterTrackers = FilterBottomSheet.FILTER_TRACKER
|
||||
|
||||
return map.filter f@{ item ->
|
||||
return items.filter f@{ item ->
|
||||
if (item.manga.isBlank()) {
|
||||
return@f filterDownloaded == 0 && filterUnread == 0 && filterCompleted == 0 &&
|
||||
filterTracked == 0 && filterMangaType == 0
|
||||
@ -193,7 +193,7 @@ class LibraryPresenter(
|
||||
/**
|
||||
* Sets downloaded chapter count to each manga.
|
||||
*
|
||||
* @param map the map of manga.
|
||||
* @param itemList the map of manga.
|
||||
*/
|
||||
private fun setDownloadCount(itemList: List<LibraryItem>) {
|
||||
if (!preferences.downloadBadge().getOrDefault()) {
|
||||
@ -217,11 +217,11 @@ class LibraryPresenter(
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies library sorting to the given map of manga.
|
||||
* Applies library sorting to the given list of manga.
|
||||
*
|
||||
* @param map the map to sort.
|
||||
* @param itemList the map to sort.
|
||||
*/
|
||||
private fun applySort(map: List<LibraryItem>): List<LibraryItem> {
|
||||
private fun applySort(itemList: List<LibraryItem>): List<LibraryItem> {
|
||||
val sortingMode = preferences.librarySortingMode().getOrDefault()
|
||||
|
||||
val lastReadManga by lazy {
|
||||
@ -280,9 +280,10 @@ class LibraryPresenter(
|
||||
else
|
||||
Collections.reverseOrder(sortFn)
|
||||
|
||||
return map.sortedWith(comparator)
|
||||
return itemList.sortedWith(comparator)
|
||||
}
|
||||
|
||||
/** Set the total chapters for the manga in the library */
|
||||
private fun setTotalChapters() {
|
||||
if (totalChapters != null) return
|
||||
val mangaMap = allLibraryItems
|
||||
@ -291,6 +292,10 @@ class LibraryPresenter(
|
||||
}.toMap()
|
||||
}
|
||||
|
||||
/** Gets the category by id
|
||||
*
|
||||
* @param categoryId id of the categoty to get
|
||||
*/
|
||||
private fun getCategory(categoryId: Int): Category {
|
||||
val category = categories.find { it.id == categoryId } ?: createDefaultCategory()
|
||||
if (category.isFirst == null) {
|
||||
@ -301,14 +306,20 @@ class LibraryPresenter(
|
||||
return category
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort 2 manga by the category's sorting
|
||||
*
|
||||
* @param i1 the first manga
|
||||
* @param i2 the second manga to compare
|
||||
* @param lastReadManga map of the last read of the library
|
||||
*/
|
||||
private fun sortCategory(
|
||||
i1: LibraryItem,
|
||||
i2: LibraryItem,
|
||||
lastReadManga: Map<Long, Int>,
|
||||
initCat: Category? = null
|
||||
lastReadManga: Map<Long, Int>
|
||||
): Int {
|
||||
return if (initCat != null || i1.manga.category == i2.manga.category) {
|
||||
val category = initCat ?: allCategories.find { it.id == i1.manga.category } ?: return 0
|
||||
return if (i1.manga.category == i2.manga.category) {
|
||||
val category = allCategories.find { it.id == i1.manga.category } ?: return 0
|
||||
if (category.mangaOrder.isNullOrEmpty() && category.mangaSort == null) {
|
||||
category.changeSortTo(preferences.librarySortingMode().getOrDefault())
|
||||
if (category.id == 0) preferences.defaultMangaOrder()
|
||||
@ -371,6 +382,12 @@ class LibraryPresenter(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort 2 manga by the their title (and remove articles if need be)
|
||||
*
|
||||
* @param i1 the first manga
|
||||
* @param i2 the second manga to compare
|
||||
*/
|
||||
private fun sortAlphabetical(i1: LibraryItem, i2: LibraryItem): Int {
|
||||
return if (preferences.removeArticles().getOrDefault())
|
||||
i1.manga.title.removeArticles().compareTo(i2.manga.title.removeArticles(), true)
|
||||
@ -380,7 +397,7 @@ class LibraryPresenter(
|
||||
/**
|
||||
* Get the categories and all its manga from the database.
|
||||
*
|
||||
* @return an observable of the categories and its manga.
|
||||
* @return an list of all the manga in a itemized form.
|
||||
*/
|
||||
private fun getLibraryFromDB(): List<LibraryItem> {
|
||||
val categories = db.getCategories().executeAsBlocking().toMutableList()
|
||||
@ -436,6 +453,7 @@ class LibraryPresenter(
|
||||
return items
|
||||
}
|
||||
|
||||
/** Create a default category with the sort set */
|
||||
private fun createDefaultCategory(): Category {
|
||||
val default = Category.createDefault(context)
|
||||
default.order = -1
|
||||
@ -445,9 +463,7 @@ class LibraryPresenter(
|
||||
return default
|
||||
}
|
||||
|
||||
/**
|
||||
* Requests the library to be filtered.
|
||||
*/
|
||||
/** Requests the library to be filtered. */
|
||||
fun requestFilterUpdate() {
|
||||
launchUI {
|
||||
var mangaMap = allLibraryItems
|
||||
@ -458,9 +474,7 @@ class LibraryPresenter(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Requests the library to have download badges added/removed.
|
||||
*/
|
||||
/** Requests the library to have download badges added/removed. */
|
||||
fun requestDownloadBadgesUpdate() {
|
||||
launchUI {
|
||||
val mangaMap = allLibraryItems
|
||||
@ -473,9 +487,7 @@ class LibraryPresenter(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Requests the library to have unread badges changed.
|
||||
*/
|
||||
/** Requests the library to have unread badges changed. */
|
||||
fun requestUnreadBadgesUpdate() {
|
||||
launchUI {
|
||||
val mangaMap = allLibraryItems
|
||||
@ -488,9 +500,7 @@ class LibraryPresenter(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Requests the library to be sorted.
|
||||
*/
|
||||
/** Requests the library to be sorted. */
|
||||
private fun requestSortUpdate() {
|
||||
launchUI {
|
||||
var mangaMap = libraryItems
|
||||
@ -528,6 +538,7 @@ class LibraryPresenter(
|
||||
}
|
||||
}
|
||||
|
||||
/** Remove manga from the library and delete the downloads */
|
||||
fun confirmDeletion(mangas: List<Manga>) {
|
||||
scope.launch {
|
||||
val mangaToDelete = mangas.distinctBy { it.id }
|
||||
@ -541,6 +552,7 @@ class LibraryPresenter(
|
||||
}
|
||||
}
|
||||
|
||||
/** Called when Library Service updates a manga, update the item as well */
|
||||
fun updateManga(manga: LibraryManga) {
|
||||
scope.launch {
|
||||
val rawMap = allLibraryItems
|
||||
@ -559,6 +571,7 @@ class LibraryPresenter(
|
||||
}
|
||||
}
|
||||
|
||||
/** Undo the removal of the manga once in library */
|
||||
fun reAddMangas(mangas: List<Manga>) {
|
||||
scope.launch {
|
||||
val mangaToAdd = mangas.distinctBy { it.id }
|
||||
@ -587,11 +600,13 @@ class LibraryPresenter(
|
||||
getLibrary()
|
||||
}
|
||||
|
||||
/** Returns first unread chapter of a manga */
|
||||
fun getFirstUnread(manga: Manga): Chapter? {
|
||||
val chapters = db.getChapters(manga).executeAsBlocking()
|
||||
return chapters.sortedByDescending { it.source_order }.find { !it.read }
|
||||
}
|
||||
|
||||
/** Update a category's sorting */
|
||||
fun sortCategory(catId: Int, order: Int) {
|
||||
val category = categories.find { catId == it.id } ?: return
|
||||
category.mangaSort = ('a' + (order - 1))
|
||||
@ -607,6 +622,7 @@ class LibraryPresenter(
|
||||
}
|
||||
}
|
||||
|
||||
/** Update a category's order */
|
||||
fun rearrangeCategory(catId: Int?, mangaIds: List<Long>) {
|
||||
scope.launch {
|
||||
val category = categories.find { catId == it.id } ?: return@launch
|
||||
@ -618,6 +634,7 @@ class LibraryPresenter(
|
||||
}
|
||||
}
|
||||
|
||||
/** Shift a manga's category via drag & drop */
|
||||
fun moveMangaToCategory(
|
||||
manga: LibraryManga,
|
||||
catId: Int?,
|
||||
@ -655,6 +672,7 @@ class LibraryPresenter(
|
||||
}
|
||||
}
|
||||
|
||||
/** Returns if manga is in a category by id */
|
||||
fun mangaIsInCategory(manga: LibraryManga, catId: Int?): Boolean {
|
||||
val categories = db.getCategoriesForManga(manga).executeAsBlocking().map { it.id }
|
||||
return catId in categories
|
||||
@ -664,6 +682,7 @@ class LibraryPresenter(
|
||||
private var lastLibraryItems: List<LibraryItem>? = null
|
||||
private var lastCategories: List<Category>? = null
|
||||
|
||||
/** Give library manga to a date added based on min chapter fetch + remove custom info */
|
||||
fun updateDB() {
|
||||
val db: DatabaseHelper = Injekt.get()
|
||||
db.inTransaction {
|
||||
|
Loading…
Reference in New Issue
Block a user