inorichi 7 жил өмнө
parent
commit
60ac27e401

+ 9 - 3
app/src/main/java/eu/kanade/tachiyomi/data/database/mappers/MangaTypeMapping.kt

@@ -65,9 +65,8 @@ class MangaPutResolver : DefaultPutResolver<Manga>() {
     }
 }
 
-open class MangaGetResolver : DefaultGetResolver<Manga>() {
-
-    override fun mapFromCursor(cursor: Cursor): Manga = MangaImpl().apply {
+interface BaseMangaGetResolver {
+    fun mapBaseFromCursor(manga: Manga, cursor: Cursor) = manga.apply {
         id = cursor.getLong(cursor.getColumnIndex(COL_ID))
         source = cursor.getLong(cursor.getColumnIndex(COL_SOURCE))
         url = cursor.getString(cursor.getColumnIndex(COL_URL))
@@ -86,6 +85,13 @@ open class MangaGetResolver : DefaultGetResolver<Manga>() {
     }
 }
 
+open class MangaGetResolver : DefaultGetResolver<Manga>(), BaseMangaGetResolver {
+
+    override fun mapFromCursor(cursor: Cursor): Manga {
+        return mapBaseFromCursor(MangaImpl(), cursor)
+    }
+}
+
 class MangaDeleteResolver : DefaultDeleteResolver<Manga>() {
 
     override fun mapToDeleteQuery(obj: Manga) = DeleteQuery.builder()

+ 11 - 0
app/src/main/java/eu/kanade/tachiyomi/data/database/models/LibraryManga.kt

@@ -0,0 +1,11 @@
+package eu.kanade.tachiyomi.data.database.models
+
+class LibraryManga : MangaImpl() {
+
+    var unread: Int = 0
+
+    var category: Int = 0
+
+    var downloadTotal: Int = 0
+
+}

+ 0 - 6
app/src/main/java/eu/kanade/tachiyomi/data/database/models/Manga.kt

@@ -16,12 +16,6 @@ interface Manga : SManga {
 
     var chapter_flags: Int
 
-    var unread: Int
-
-    var downloadTotal: Int
-
-    var category: Int
-
     fun setChapterOrder(order: Int) {
         setFlags(order, SORT_MASK)
     }

+ 1 - 7
app/src/main/java/eu/kanade/tachiyomi/data/database/models/MangaImpl.kt

@@ -1,6 +1,6 @@
 package eu.kanade.tachiyomi.data.database.models
 
-class MangaImpl : Manga {
+open class MangaImpl : Manga {
 
     override var id: Long? = null
 
@@ -32,12 +32,6 @@ class MangaImpl : Manga {
 
     override var chapter_flags: Int = 0
 
-    @Transient override var unread: Int = 0
-
-    @Transient override var downloadTotal: Int = 0
-
-    @Transient override var category: Int = 0
-
     override fun equals(other: Any?): Boolean {
         if (this === other) return true
         if (other == null || javaClass != other.javaClass) return false

+ 2 - 1
app/src/main/java/eu/kanade/tachiyomi/data/database/queries/MangaQueries.kt

@@ -4,6 +4,7 @@ import com.pushtorefresh.storio.sqlite.queries.DeleteQuery
 import com.pushtorefresh.storio.sqlite.queries.Query
 import com.pushtorefresh.storio.sqlite.queries.RawQuery
 import eu.kanade.tachiyomi.data.database.DbProvider
+import eu.kanade.tachiyomi.data.database.models.LibraryManga
 import eu.kanade.tachiyomi.data.database.models.Manga
 import eu.kanade.tachiyomi.data.database.resolvers.LibraryMangaGetResolver
 import eu.kanade.tachiyomi.data.database.resolvers.MangaFlagsPutResolver
@@ -23,7 +24,7 @@ interface MangaQueries : DbProvider {
             .prepare()
 
     fun getLibraryMangas() = db.get()
-            .listOfObjects(Manga::class.java)
+            .listOfObjects(LibraryManga::class.java)
             .withQuery(RawQuery.builder()
                     .query(libraryQuery)
                     .observesTables(MangaTable.TABLE, ChapterTable.TABLE, MangaCategoryTable.TABLE, CategoryTable.TABLE)

+ 9 - 10
app/src/main/java/eu/kanade/tachiyomi/data/database/resolvers/LibraryMangaGetResolver.kt

@@ -1,24 +1,23 @@
 package eu.kanade.tachiyomi.data.database.resolvers
 
 import android.database.Cursor
-import eu.kanade.tachiyomi.data.database.mappers.MangaGetResolver
-import eu.kanade.tachiyomi.data.database.models.Manga
+import com.pushtorefresh.storio.sqlite.operations.get.DefaultGetResolver
+import eu.kanade.tachiyomi.data.database.mappers.BaseMangaGetResolver
+import eu.kanade.tachiyomi.data.database.models.LibraryManga
 import eu.kanade.tachiyomi.data.database.tables.MangaTable
 
-class LibraryMangaGetResolver : MangaGetResolver() {
+class LibraryMangaGetResolver : DefaultGetResolver<LibraryManga>(), BaseMangaGetResolver {
 
     companion object {
         val INSTANCE = LibraryMangaGetResolver()
     }
 
-    override fun mapFromCursor(cursor: Cursor): Manga {
-        val manga = super.mapFromCursor(cursor)
+    override fun mapFromCursor(cursor: Cursor): LibraryManga {
+        val manga = LibraryManga()
 
-        val unreadColumn = cursor.getColumnIndex(MangaTable.COL_UNREAD)
-        manga.unread = cursor.getInt(unreadColumn)
-
-        val categoryColumn = cursor.getColumnIndex(MangaTable.COL_CATEGORY)
-        manga.category = cursor.getInt(categoryColumn)
+        mapBaseFromCursor(manga, cursor)
+        manga.unread = cursor.getInt(cursor.getColumnIndex(MangaTable.COL_UNREAD))
+        manga.category = cursor.getInt(cursor.getColumnIndex(MangaTable.COL_CATEGORY))
 
         return manga
     }

+ 7 - 6
app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt

@@ -14,6 +14,7 @@ import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.database.DatabaseHelper
 import eu.kanade.tachiyomi.data.database.models.Category
 import eu.kanade.tachiyomi.data.database.models.Chapter
+import eu.kanade.tachiyomi.data.database.models.LibraryManga
 import eu.kanade.tachiyomi.data.database.models.Manga
 import eu.kanade.tachiyomi.data.download.DownloadManager
 import eu.kanade.tachiyomi.data.download.DownloadService
@@ -231,7 +232,7 @@ class LibraryUpdateService(
      * @param target the target to update.
      * @return a list of manga to update
      */
-    fun getMangaToUpdate(intent: Intent, target: Target): List<Manga> {
+    fun getMangaToUpdate(intent: Intent, target: Target): List<LibraryManga> {
         val categoryId = intent.getIntExtra(KEY_CATEGORY, -1)
 
         var listToUpdate = if (categoryId != -1)
@@ -262,7 +263,7 @@ class LibraryUpdateService(
      * @param mangaToUpdate the list to update
      * @return an observable delivering the progress of each update.
      */
-    fun updateChapterList(mangaToUpdate: List<Manga>): Observable<Manga> {
+    fun updateChapterList(mangaToUpdate: List<LibraryManga>): Observable<LibraryManga> {
         // Initialize the variables holding the progress of the updates.
         val count = AtomicInteger(0)
         // List containing new updates
@@ -286,7 +287,7 @@ class LibraryUpdateService(
                             // If there's any error, return empty update and continue.
                             .onErrorReturn {
                                 failedUpdates.add(manga)
-                                Pair(emptyList<Chapter>(), emptyList<Chapter>())
+                                Pair(emptyList(), emptyList())
                             }
                             // Filter out mangas without new chapters (or failed).
                             .filter { pair -> pair.first.isNotEmpty() }
@@ -354,7 +355,7 @@ class LibraryUpdateService(
      * @param mangaToUpdate the list to update
      * @return an observable delivering the progress of each update.
      */
-    fun updateDetails(mangaToUpdate: List<Manga>): Observable<Manga> {
+    fun updateDetails(mangaToUpdate: List<LibraryManga>): Observable<LibraryManga> {
         // Initialize the variables holding the progress of the updates.
         val count = AtomicInteger(0)
 
@@ -365,7 +366,7 @@ class LibraryUpdateService(
                 // Update the details of the manga.
                 .concatMap { manga ->
                     val source = sourceManager.get(manga.source) as? HttpSource
-                            ?: return@concatMap Observable.empty<Manga>()
+                            ?: return@concatMap Observable.empty<LibraryManga>()
 
                     source.fetchMangaDetails(manga)
                             .map { networkManga ->
@@ -384,7 +385,7 @@ class LibraryUpdateService(
      * Method that updates the metadata of the connected tracking services. It's called in a
      * background thread, so it's safe to do heavy operations or network calls here.
      */
-    private fun updateTrackings(mangaToUpdate: List<Manga>): Observable<Manga> {
+    private fun updateTrackings(mangaToUpdate: List<LibraryManga>): Observable<LibraryManga> {
         // Initialize the variables holding the progress of the updates.
         var count = 0
 

+ 2 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryGridHolder.kt

@@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.ui.library
 import android.view.View
 import com.bumptech.glide.load.engine.DiskCacheStrategy
 import eu.davidea.flexibleadapter.FlexibleAdapter
+import eu.kanade.tachiyomi.data.database.models.LibraryManga
 import eu.kanade.tachiyomi.data.database.models.Manga
 import eu.kanade.tachiyomi.data.glide.GlideApp
 import eu.kanade.tachiyomi.data.preference.PreferencesHelper
@@ -34,7 +35,7 @@ class LibraryGridHolder(
      *
      * @param manga the manga to bind.
      */
-    override fun onSetValues(manga: Manga) {
+    override fun onSetValues(manga: LibraryManga) {
         // Update the title of the manga.
         view.title.text = manga.title
 

+ 2 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.kt

@@ -3,7 +3,7 @@ package eu.kanade.tachiyomi.ui.library
 import android.view.View
 import eu.davidea.flexibleadapter.FlexibleAdapter
 import eu.davidea.viewholders.FlexibleViewHolder
-import eu.kanade.tachiyomi.data.database.models.Manga
+import eu.kanade.tachiyomi.data.database.models.LibraryManga
 
 /**
  * Generic class used to hold the displayed data of a manga in the library.
@@ -23,6 +23,6 @@ abstract class LibraryHolder(
      *
      * @param manga the manga to bind.
      */
-    abstract fun onSetValues(manga: Manga)
+    abstract fun onSetValues(manga: LibraryManga)
 
 }

+ 2 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt

@@ -9,12 +9,12 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
 import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
 import eu.davidea.flexibleadapter.items.IFilterable
 import eu.kanade.tachiyomi.R
-import eu.kanade.tachiyomi.data.database.models.Manga
+import eu.kanade.tachiyomi.data.database.models.LibraryManga
 import eu.kanade.tachiyomi.util.inflate
 import eu.kanade.tachiyomi.widget.AutofitRecyclerView
 import kotlinx.android.synthetic.main.catalogue_grid_item.view.*
 
-class LibraryItem(val manga: Manga) : AbstractFlexibleItem<LibraryHolder>(), IFilterable {
+class LibraryItem(val manga: LibraryManga) : AbstractFlexibleItem<LibraryHolder>(), IFilterable {
 
     override fun getLayoutRes(): Int {
         return R.layout.catalogue_grid_item

+ 2 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListHolder.kt

@@ -3,7 +3,7 @@ package eu.kanade.tachiyomi.ui.library
 import android.view.View
 import com.bumptech.glide.load.engine.DiskCacheStrategy
 import eu.davidea.flexibleadapter.FlexibleAdapter
-import eu.kanade.tachiyomi.data.database.models.Manga
+import eu.kanade.tachiyomi.data.database.models.LibraryManga
 import eu.kanade.tachiyomi.data.glide.GlideApp
 import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 import eu.kanade.tachiyomi.data.preference.getOrDefault
@@ -34,7 +34,7 @@ class LibraryListHolder(
      *
      * @param manga the manga to bind.
      */
-    override fun onSetValues(manga: Manga) {
+    override fun onSetValues(manga: LibraryManga) {
         // Update the title of the manga.
         itemView.title.text = manga.title
 

+ 8 - 7
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt

@@ -7,6 +7,7 @@ import com.jakewharton.rxrelay.BehaviorRelay
 import eu.kanade.tachiyomi.data.cache.CoverCache
 import eu.kanade.tachiyomi.data.database.DatabaseHelper
 import eu.kanade.tachiyomi.data.database.models.Category
+import eu.kanade.tachiyomi.data.database.models.LibraryManga
 import eu.kanade.tachiyomi.data.database.models.Manga
 import eu.kanade.tachiyomi.data.database.models.MangaCategory
 import eu.kanade.tachiyomi.data.download.DownloadManager
@@ -98,7 +99,7 @@ class LibraryPresenter(
      *
      * @param map the map to filter.
      */
-    private fun applyFilters(map: Map<Int, List<Manga>>): Map<Int, List<Manga>> {
+    private fun applyFilters(map: Map<Int, List<LibraryManga>>): Map<Int, List<LibraryManga>> {
         // Cached list of downloaded manga directories given a source id.
         val mangaDirsForSource = mutableMapOf<Long, Map<String?, UniFile>>()
 
@@ -111,7 +112,7 @@ class LibraryPresenter(
 
         val filterCompleted = preferences.filterCompleted().getOrDefault()
 
-        val filterFn: (Manga) -> Boolean = f@ { manga ->
+        val filterFn: (LibraryManga) -> Boolean = f@ { manga ->
             // Filter out manga without source.
             val source = sourceManager.get(manga.source) ?: return@f false
 
@@ -153,7 +154,7 @@ class LibraryPresenter(
      *
      * @param map the map to filter.
      */
-    private fun addDownloadTotal(map: Map<Int, List<Manga>>): Map<Int, List<Manga>> {
+    private fun addDownloadTotal(map: Map<Int, List<LibraryManga>>): Map<Int, List<LibraryManga>> {
         // Cached list of downloaded manga directories given a source id.
         if (preferences.downloadBadge().getOrDefault()) {
             val mangaDirsForSource = mutableMapOf<Long, Map<String?, UniFile>>()
@@ -195,7 +196,7 @@ class LibraryPresenter(
      *
      * @param map the map to sort.
      */
-    private fun applySort(map: Map<Int, List<Manga>>): Map<Int, List<Manga>> {
+    private fun applySort(map: Map<Int, List<LibraryManga>>): Map<Int, List<LibraryManga>> {
         val sortingMode = preferences.librarySortingMode().getOrDefault()
 
         val lastReadManga by lazy {
@@ -207,7 +208,7 @@ class LibraryPresenter(
             db.getTotalChapterManga().executeAsBlocking().associate { it.id!! to counter++ }
         }
 
-        val sortFn: (Manga, Manga) -> Int = { manga1, manga2 ->
+        val sortFn: (LibraryManga, LibraryManga) -> Int = { manga1, manga2 ->
             when (sortingMode) {
                 LibrarySort.ALPHA -> manga1.title.compareTo(manga2.title)
                 LibrarySort.LAST_READ -> {
@@ -245,7 +246,7 @@ class LibraryPresenter(
      *
      * @return an observable of the categories and its manga.
      */
-    private fun getLibraryObservable(): Observable<Pair<List<Category>, Map<Int, List<Manga>>>> {
+    private fun getLibraryObservable(): Observable<Pair<List<Category>, Map<Int, List<LibraryManga>>>> {
         return Observable.combineLatest(getCategoriesObservable(), getLibraryMangasObservable(),
                 { dbCategories, libraryManga ->
                     val categories = if (libraryManga.containsKey(0))
@@ -273,7 +274,7 @@ class LibraryPresenter(
      * @return an observable containing a map with the category id as key and a list of manga as the
      * value.
      */
-    private fun getLibraryMangasObservable(): Observable<Map<Int, List<Manga>>> {
+    private fun getLibraryMangasObservable(): Observable<Map<Int, List<LibraryManga>>> {
         return db.getLibraryMangas().asRxObservable()
                 .map { list -> list.groupBy { it.category } }
     }