diff --git a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowActivity.kt b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowActivity.kt index 894521c68..bb660c3c3 100644 --- a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowActivity.kt @@ -6,7 +6,6 @@ import androidx.core.os.bundleOf import androidx.recyclerview.widget.RecyclerView import io.legado.app.R import io.legado.app.base.VMBaseActivity -import io.legado.app.data.entities.Book import io.legado.app.data.entities.SearchBook import io.legado.app.databinding.ActivityExploreShowBinding import io.legado.app.databinding.ViewLoadMoreBinding @@ -82,11 +81,11 @@ class ExploreShowActivity : VMBaseActivity { putExtra("name", book.name) putExtra("author", book.author) diff --git a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowAdapter.kt b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowAdapter.kt index 30d7628e1..84b1b6ae2 100644 --- a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowAdapter.kt @@ -7,7 +7,6 @@ import androidx.core.view.isVisible import io.legado.app.R import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.RecyclerAdapter -import io.legado.app.data.entities.Book import io.legado.app.data.entities.SearchBook import io.legado.app.databinding.ItemSearchBinding import io.legado.app.help.config.AppConfig @@ -43,7 +42,7 @@ class ExploreShowAdapter(context: Context, val callBack: CallBack) : binding.run { tvName.text = item.name tvAuthor.text = context.getString(R.string.author_show, item.author) - ivInBookshelf.isVisible = callBack.isInBookshelf(item.name, item.author) + ivInBookshelf.isVisible = callBack.isInBookshelf(item) if (item.latestChapterTitle.isNullOrEmpty()) { tvLasted.gone() } else { @@ -73,7 +72,7 @@ class ExploreShowAdapter(context: Context, val callBack: CallBack) : bundle.keySet().forEach { when (it) { "isInBookshelf" -> ivInBookshelf.isVisible = - callBack.isInBookshelf(item.name, item.author) + callBack.isInBookshelf(item) } } } @@ -82,7 +81,7 @@ class ExploreShowAdapter(context: Context, val callBack: CallBack) : override fun registerListener(holder: ItemViewHolder, binding: ItemSearchBinding) { holder.itemView.setOnClickListener { getItem(holder.layoutPosition)?.let { - callBack.showBookInfo(it.toBook()) + callBack.showBookInfo(it) } } } @@ -91,8 +90,8 @@ class ExploreShowAdapter(context: Context, val callBack: CallBack) : /** * 是否已经加入书架 */ - fun isInBookshelf(name: String, author: String): Boolean + fun isInBookshelf(book: SearchBook): Boolean - fun showBookInfo(book: Book) + fun showBookInfo(book: SearchBook) } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt index 1fc24f296..4bcc43855 100644 --- a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt @@ -40,6 +40,7 @@ class ExploreShowViewModel(application: Application) : BaseViewModel(application .forEach { keys.add("${it.name}-${it.author}") keys.add(it.name) + keys.add(it.bookUrl) } keys }.catch { @@ -82,12 +83,13 @@ class ExploreShowViewModel(application: Application) : BaseViewModel(application } } - fun isInBookShelf(name: String, author: String): Boolean { - return if (author.isNotBlank()) { - bookshelf.contains("$name-$author") - } else { - bookshelf.contains(name) - } + fun isInBookShelf(book: SearchBook): Boolean { + val name = book.name + val author = book.author + val bookUrl = book.bookUrl + return (author.isNotBlank() && bookshelf.contains("$name-$author")) + || bookshelf.contains(name) + || bookshelf.contains(bookUrl) } } diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt index 81656879f..c161a7993 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt @@ -65,6 +65,11 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { return@execute } if (bookUrl.isNotBlank()) { + appDb.bookDao.getBook(bookUrl)?.let { + inBookshelf = !it.isNotShelf + upBook(it) + return@execute + } appDb.searchBookDao.getSearchBook(bookUrl)?.toBook()?.let { upBook(it) return@execute diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt index bbada624b..935d6d00f 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt @@ -24,6 +24,7 @@ import io.legado.app.constant.AppLog import io.legado.app.constant.PreferKey import io.legado.app.data.appDb import io.legado.app.data.entities.Book +import io.legado.app.data.entities.SearchBook import io.legado.app.data.entities.SearchKeyword import io.legado.app.databinding.ActivityBookSearchBinding import io.legado.app.lib.dialogs.alert @@ -470,8 +471,8 @@ class SearchActivity : VMBaseActivity upLasted(binding, searchBook.latestChapterTitle) "intro" -> tvIntroduce.text = searchBook.trimIntro(context) "kind" -> upKind(binding, searchBook.getKindList()) - "isInBookshelf" -> ivInBookshelf.isVisible = - callBack.isInBookshelf(searchBook.name, searchBook.author) + "isInBookshelf" -> ivInBookshelf.isVisible = callBack.isInBookshelf(searchBook) "cover" -> ivCover.load( searchBook.coverUrl, searchBook.name, @@ -147,7 +145,7 @@ class SearchAdapter(context: Context, val callBack: CallBack) : /** * 是否已经加入书架 */ - fun isInBookshelf(name: String, author: String): Boolean + fun isInBookshelf(book: SearchBook): Boolean /** * 显示书籍详情 diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt index aa2fc980e..426186af8 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchViewModel.kt @@ -69,6 +69,7 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { .forEach { keys.add("${it.name}-${it.author}") keys.add(it.name) + keys.add(it.bookUrl) } keys }.catch { @@ -83,12 +84,13 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { } } - fun isInBookShelf(name: String, author: String): Boolean { - return if (author.isNotBlank()) { - bookshelf.contains("$name-$author") - } else { - bookshelf.contains(name) - } + fun isInBookShelf(book: SearchBook): Boolean { + val name = book.name + val author = book.author + val bookUrl = book.bookUrl + return (author.isNotBlank() && bookshelf.contains("$name-$author")) + || bookshelf.contains(name) + || bookshelf.contains(bookUrl) } /**