Просмотр исходного кода

通过数据库判断压缩文件是否在书架上

Xwite 3 лет назад
Родитель
Сommit
2eb872489c

+ 1 - 4
app/src/main/java/io/legado/app/data/dao/BookDao.kt

@@ -44,9 +44,6 @@ interface BookDao {
     )
     fun flowLocalNoGroup(): Flow<List<Book>>
 
-    @Query("SELECT bookUrl FROM books WHERE type & ${BookType.local} > 0")
-    fun flowLocalUri(): Flow<List<String>>
-
     @Query("SELECT * FROM books WHERE (`group` & :group) > 0")
     fun flowByGroup(group: Long): Flow<List<Book>>
 
@@ -104,7 +101,7 @@ interface BookDao {
     @Query("select 1 from books where bookUrl = :bookUrl")
     fun has(bookUrl: String): Boolean?
 
-    @Query("select 1 from books where originName = :fileName")
+    @Query("select 1 from books where originName = :fileName or origin like ${BookType.localTag} || '::' || :fileName")
     fun hasFile(fileName: String): Boolean?
 
     @Insert(onConflict = OnConflictStrategy.REPLACE)

+ 0 - 5
app/src/main/java/io/legado/app/ui/book/import/local/ImportBookActivity.kt

@@ -131,11 +131,6 @@ class ImportBookActivity : BaseImportBookActivity<ImportBookViewModel>(),
         viewModel.dataFlowStart = {
             initRootDoc()
         }
-        launch {
-            appDb.bookDao.flowLocal().conflate().collect {
-                adapter.upBookHas(it)
-            }
-        }
         launch {
             viewModel.dataFlow.conflate().collect { docs ->
                 adapter.setItems(docs)

+ 2 - 21
app/src/main/java/io/legado/app/ui/book/import/local/ImportBookAdapter.kt

@@ -12,6 +12,7 @@ import io.legado.app.data.entities.Book
 import io.legado.app.databinding.ItemImportBookBinding
 import io.legado.app.help.book.archiveName
 import io.legado.app.help.book.isArchive
+import io.legado.app.model.localBook.LocalBook
 import io.legado.app.utils.*
 
 
@@ -19,7 +20,6 @@ class ImportBookAdapter(context: Context, val callBack: CallBack) :
     RecyclerAdapter<FileDoc, ItemImportBookBinding>(context) {
     val selectedUris = hashSetOf<String>()
     var checkableCount = 0
-    private val bookOrArchiveNamesOnBookShelf = arrayListOf<String>()
 
     override fun getViewBinding(parent: ViewGroup): ItemImportBookBinding {
         return ItemImportBookBinding.inflate(inflater, parent, false)
@@ -87,26 +87,7 @@ class ImportBookAdapter(context: Context, val callBack: CallBack) :
     }
 
     private fun isOnBookShelf(fileDoc: FileDoc): Boolean {
-        return bookOrArchiveNamesOnBookShelf.contains(fileDoc.name)
-    }
-
-    @SuppressLint("NotifyDataSetChanged")
-    fun upBookHas(books: List<Book>) {
-        bookOrArchiveNamesOnBookShelf.clear()
-        books.forEach {
-            if (it.isArchive) {
-                bookOrArchiveNamesOnBookShelf.add(
-                    it.archiveName!!
-                )
-            } else {
-                val path = Uri.decode(it.bookUrl)
-                bookOrArchiveNamesOnBookShelf.add(
-                    FileUtils.getName(path)
-                )
-            }
-        }
-        notifyDataSetChanged()
-        upCheckableCount()
+        return LocalBook.isOnBookShelf(fileDoc.name)
     }
 
     private fun upCheckableCount() {