mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 16:18:55 +01:00 
			
		
		
		
	@@ -495,6 +495,7 @@ open class BrowseCatalogueController(bundle: Bundle) :
 | 
			
		||||
    override fun onItemLongClick(position: Int) {
 | 
			
		||||
        val activity = activity ?: return
 | 
			
		||||
        val manga = (adapter?.getItem(position) as? CatalogueItem?)?.manga ?: return
 | 
			
		||||
 | 
			
		||||
        if (manga.favorite) {
 | 
			
		||||
            MaterialDialog.Builder(activity)
 | 
			
		||||
                    .items(activity.getString(R.string.remove_from_library))
 | 
			
		||||
@@ -508,16 +509,30 @@ open class BrowseCatalogueController(bundle: Bundle) :
 | 
			
		||||
                        }
 | 
			
		||||
                    }.show()
 | 
			
		||||
        } else {
 | 
			
		||||
            presenter.changeMangaFavorite(manga)
 | 
			
		||||
            adapter?.notifyItemChanged(position)
 | 
			
		||||
 | 
			
		||||
            val categories = presenter.getCategories()
 | 
			
		||||
            val defaultCategoryId = preferences.defaultCategory()
 | 
			
		||||
            val defaultCategory = categories.find { it.id == defaultCategoryId }
 | 
			
		||||
 | 
			
		||||
            when {
 | 
			
		||||
                defaultCategory != null -> presenter.moveMangaToCategory(manga, defaultCategory)
 | 
			
		||||
                defaultCategoryId == 0 || categories.isEmpty() -> // 'Default' or no category
 | 
			
		||||
                // Default category set
 | 
			
		||||
                defaultCategory != null -> {
 | 
			
		||||
                    presenter.moveMangaToCategory(manga, defaultCategory)
 | 
			
		||||
 | 
			
		||||
                    presenter.changeMangaFavorite(manga)
 | 
			
		||||
                    adapter?.notifyItemChanged(position)
 | 
			
		||||
                    activity.toast(activity.getString(R.string.manga_added_library))
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Automatic 'Default' or no categories
 | 
			
		||||
                defaultCategoryId == 0 || categories.isEmpty() -> {
 | 
			
		||||
                    presenter.moveMangaToCategory(manga, null)
 | 
			
		||||
 | 
			
		||||
                    presenter.changeMangaFavorite(manga)
 | 
			
		||||
                    adapter?.notifyItemChanged(position)
 | 
			
		||||
                    activity.toast(activity.getString(R.string.manga_added_library))
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Choose a category
 | 
			
		||||
                else -> {
 | 
			
		||||
                    val ids = presenter.getMangaCategoryIds(manga)
 | 
			
		||||
                    val preselected = ids.mapNotNull { id ->
 | 
			
		||||
@@ -528,7 +543,6 @@ open class BrowseCatalogueController(bundle: Bundle) :
 | 
			
		||||
                            .showDialog(router)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            activity.toast(activity.getString(R.string.manga_added_library))
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -540,7 +554,15 @@ open class BrowseCatalogueController(bundle: Bundle) :
 | 
			
		||||
     */
 | 
			
		||||
    override fun updateCategoriesForMangas(mangas: List<Manga>, categories: List<Category>) {
 | 
			
		||||
        val manga = mangas.firstOrNull() ?: return
 | 
			
		||||
 | 
			
		||||
        presenter.changeMangaFavorite(manga)
 | 
			
		||||
        presenter.updateMangaCategories(manga, categories)
 | 
			
		||||
 | 
			
		||||
        val position = adapter?.currentItems?.indexOfFirst { it -> (it as CatalogueItem).manga.id == manga.id }
 | 
			
		||||
        if (position != null) {
 | 
			
		||||
            adapter?.notifyItemChanged(position)
 | 
			
		||||
        }
 | 
			
		||||
        activity?.toast(activity?.getString(R.string.manga_added_library))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected companion object {
 | 
			
		||||
 
 | 
			
		||||
@@ -375,13 +375,15 @@ open class BrowseCataloguePresenter(
 | 
			
		||||
     * @param selectedCategories selected categories
 | 
			
		||||
     */
 | 
			
		||||
    fun updateMangaCategories(manga: Manga, selectedCategories: List<Category>) {
 | 
			
		||||
        if (selectedCategories.isNotEmpty()) {
 | 
			
		||||
            if (!manga.favorite)
 | 
			
		||||
                changeMangaFavorite(manga)
 | 
			
		||||
        if (!manga.favorite) {
 | 
			
		||||
            changeMangaFavorite(manga)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (selectedCategories.isNotEmpty()) {
 | 
			
		||||
            moveMangaToCategories(manga, selectedCategories.filter { it.id != 0 })
 | 
			
		||||
        } else {
 | 
			
		||||
            changeMangaFavorite(manga)
 | 
			
		||||
            // Default category
 | 
			
		||||
            moveMangaToCategories(manga, emptyList())
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -380,20 +380,33 @@ class MangaInfoController : NucleusController<MangaInfoPresenter>(),
 | 
			
		||||
        swipe_refresh?.isRefreshing = value
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Called when the fab is clicked.
 | 
			
		||||
     */
 | 
			
		||||
    private fun onFabClick() {
 | 
			
		||||
        val manga = presenter.manga
 | 
			
		||||
        toggleFavorite()
 | 
			
		||||
 | 
			
		||||
        if (manga.favorite) {
 | 
			
		||||
            toggleFavorite()
 | 
			
		||||
            activity?.toast(activity?.getString(R.string.manga_removed_library))
 | 
			
		||||
        } else {
 | 
			
		||||
            val categories = presenter.getCategories()
 | 
			
		||||
            val defaultCategoryId = preferences.defaultCategory()
 | 
			
		||||
            val defaultCategory = categories.find { it.id == defaultCategoryId }
 | 
			
		||||
 | 
			
		||||
            when {
 | 
			
		||||
                defaultCategory != null -> presenter.moveMangaToCategory(manga, defaultCategory)
 | 
			
		||||
                defaultCategoryId == 0 || categories.isEmpty() -> // 'Default' or no category
 | 
			
		||||
                // Default category set
 | 
			
		||||
                defaultCategory != null -> {
 | 
			
		||||
                    toggleFavorite()
 | 
			
		||||
                    presenter.moveMangaToCategory(manga, defaultCategory)
 | 
			
		||||
                    activity?.toast(activity?.getString(R.string.manga_added_library))
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Automatic 'Default' or no categories
 | 
			
		||||
                defaultCategoryId == 0 || categories.isEmpty() -> {
 | 
			
		||||
                    toggleFavorite()
 | 
			
		||||
                    presenter.moveMangaToCategory(manga, null)
 | 
			
		||||
                    activity?.toast(activity?.getString(R.string.manga_added_library))
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Choose a category
 | 
			
		||||
                else -> {
 | 
			
		||||
                    val ids = presenter.getMangaCategoryIds(manga)
 | 
			
		||||
                    val preselected = ids.mapNotNull { id ->
 | 
			
		||||
@@ -404,26 +417,15 @@ class MangaInfoController : NucleusController<MangaInfoPresenter>(),
 | 
			
		||||
                            .showDialog(router)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            activity?.toast(activity?.getString(R.string.manga_added_library))
 | 
			
		||||
        } else {
 | 
			
		||||
            activity?.toast(activity?.getString(R.string.manga_removed_library))
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Called when the fab is long clicked.
 | 
			
		||||
     */
 | 
			
		||||
    private fun onFabLongClick() {
 | 
			
		||||
        val manga = presenter.manga
 | 
			
		||||
        if (!manga.favorite) {
 | 
			
		||||
            toggleFavorite()
 | 
			
		||||
            activity?.toast(activity?.getString(R.string.manga_added_library))
 | 
			
		||||
        }
 | 
			
		||||
        val categories = presenter.getCategories()
 | 
			
		||||
        if (categories.isEmpty()) {
 | 
			
		||||
            // no categories exist, display a message about adding categories
 | 
			
		||||
            activity?.toast(activity?.getString(R.string.action_add_category))
 | 
			
		||||
        } else {
 | 
			
		||||
 | 
			
		||||
        if (manga.favorite && presenter.getCategories().isNotEmpty()) {
 | 
			
		||||
            val categories = presenter.getCategories()
 | 
			
		||||
 | 
			
		||||
            val ids = presenter.getMangaCategoryIds(manga)
 | 
			
		||||
            val preselected = ids.mapNotNull { id ->
 | 
			
		||||
                categories.indexOfFirst { it.id == id }.takeIf { it != -1 }
 | 
			
		||||
@@ -431,12 +433,20 @@ class MangaInfoController : NucleusController<MangaInfoPresenter>(),
 | 
			
		||||
 | 
			
		||||
            ChangeMangaCategoriesDialog(this, listOf(manga), categories, preselected)
 | 
			
		||||
                    .showDialog(router)
 | 
			
		||||
        } else {
 | 
			
		||||
            onFabClick()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun updateCategoriesForMangas(mangas: List<Manga>, categories: List<Category>) {
 | 
			
		||||
        val manga = mangas.firstOrNull() ?: return
 | 
			
		||||
 | 
			
		||||
        if (!manga.favorite) {
 | 
			
		||||
            toggleFavorite()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        presenter.moveMangaToCategories(manga, categories)
 | 
			
		||||
        activity?.toast(activity?.getString(R.string.manga_added_library))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user