mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Remove need for SQLDelight primitive adapters
This commit is contained in:
		@@ -151,9 +151,9 @@ class SyncChaptersWithSource(
 | 
			
		||||
 | 
			
		||||
        val reAdded = mutableListOf<Chapter>()
 | 
			
		||||
 | 
			
		||||
        val deletedChapterNumbers = TreeSet<Float>()
 | 
			
		||||
        val deletedReadChapterNumbers = TreeSet<Float>()
 | 
			
		||||
        val deletedBookmarkedChapterNumbers = TreeSet<Float>()
 | 
			
		||||
        val deletedChapterNumbers = TreeSet<Double>()
 | 
			
		||||
        val deletedReadChapterNumbers = TreeSet<Double>()
 | 
			
		||||
        val deletedBookmarkedChapterNumbers = TreeSet<Double>()
 | 
			
		||||
 | 
			
		||||
        toDelete.forEach { chapter ->
 | 
			
		||||
            if (chapter.read) deletedReadChapterNumbers.add(chapter.chapterNumber)
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ fun Chapter.toSChapter(): SChapter {
 | 
			
		||||
        it.url = url
 | 
			
		||||
        it.name = name
 | 
			
		||||
        it.date_upload = dateUpload
 | 
			
		||||
        it.chapter_number = chapterNumber
 | 
			
		||||
        it.chapter_number = chapterNumber.toFloat()
 | 
			
		||||
        it.scanlator = scanlator
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -22,7 +22,7 @@ fun Chapter.copyFromSChapter(sChapter: SChapter): Chapter {
 | 
			
		||||
        name = sChapter.name,
 | 
			
		||||
        url = sChapter.url,
 | 
			
		||||
        dateUpload = sChapter.date_upload,
 | 
			
		||||
        chapterNumber = sChapter.chapter_number,
 | 
			
		||||
        chapterNumber = sChapter.chapter_number.toDouble(),
 | 
			
		||||
        scanlator = sChapter.scanlator?.ifBlank { null },
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
@@ -48,6 +48,6 @@ fun Chapter.toDbChapter(): DbChapter = ChapterImpl().also {
 | 
			
		||||
    it.last_page_read = lastPageRead.toInt()
 | 
			
		||||
    it.date_fetch = dateFetch
 | 
			
		||||
    it.date_upload = dateUpload
 | 
			
		||||
    it.chapter_number = chapterNumber
 | 
			
		||||
    it.chapter_number = chapterNumber.toFloat()
 | 
			
		||||
    it.source_order = sourceOrder.toInt()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -99,7 +99,7 @@ fun getComicInfo(manga: Manga, chapter: Chapter, chapterUrl: String, categories:
 | 
			
		||||
    title = ComicInfo.Title(chapter.name),
 | 
			
		||||
    series = ComicInfo.Series(manga.title),
 | 
			
		||||
    number = chapter.chapterNumber.takeIf { it >= 0 }?.let {
 | 
			
		||||
        if ((it.rem(1) == 0.0F)) {
 | 
			
		||||
        if ((it.rem(1) == 0.0)) {
 | 
			
		||||
            ComicInfo.Number(it.toInt().toString())
 | 
			
		||||
        } else {
 | 
			
		||||
            ComicInfo.Number(it.toString())
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ fun Track.toDbTrack(): DbTrack = DbTrack.create(syncId).also {
 | 
			
		||||
    it.last_chapter_read = lastChapterRead.toFloat()
 | 
			
		||||
    it.total_chapters = totalChapters.toInt()
 | 
			
		||||
    it.status = status.toInt()
 | 
			
		||||
    it.score = score
 | 
			
		||||
    it.score = score.toFloat()
 | 
			
		||||
    it.tracking_url = remoteUrl
 | 
			
		||||
    it.started_reading_date = startDate
 | 
			
		||||
    it.finished_reading_date = finishDate
 | 
			
		||||
@@ -40,7 +40,7 @@ fun DbTrack.toDomainTrack(idRequired: Boolean = true): Track? {
 | 
			
		||||
        lastChapterRead = last_chapter_read.toDouble(),
 | 
			
		||||
        totalChapters = total_chapters.toLong(),
 | 
			
		||||
        status = status.toLong(),
 | 
			
		||||
        score = score,
 | 
			
		||||
        score = score.toDouble(),
 | 
			
		||||
        remoteUrl = tracking_url,
 | 
			
		||||
        startDate = started_reading_date,
 | 
			
		||||
        finishDate = finished_reading_date,
 | 
			
		||||
 
 | 
			
		||||
@@ -98,7 +98,7 @@ fun TrackInfoDialogHome(
 | 
			
		||||
                    },
 | 
			
		||||
                    onChaptersClick = { onChapterClick(item) },
 | 
			
		||||
                    score = item.service.displayScore(item.track.toDbTrack())
 | 
			
		||||
                        .takeIf { supportsScoring && item.track.score != 0F },
 | 
			
		||||
                        .takeIf { supportsScoring && item.track.score != 0.0 },
 | 
			
		||||
                    onScoreClick = { onScoreClick(item) }
 | 
			
		||||
                        .takeIf { supportsScoring },
 | 
			
		||||
                    startDate = remember(item.track.startDate) { dateFormat.format(item.track.startDate) }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,6 @@ private val formatter = DecimalFormat(
 | 
			
		||||
    DecimalFormatSymbols().apply { decimalSeparator = '.' },
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
fun formatChapterNumber(chapterNumber: Float): String {
 | 
			
		||||
fun formatChapterNumber(chapterNumber: Double): String {
 | 
			
		||||
    return formatter.format(chapterNumber)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,6 @@ import android.os.Build
 | 
			
		||||
import androidx.core.content.ContextCompat
 | 
			
		||||
import androidx.sqlite.db.SupportSQLiteDatabase
 | 
			
		||||
import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory
 | 
			
		||||
import app.cash.sqldelight.adapter.primitive.FloatColumnAdapter
 | 
			
		||||
import app.cash.sqldelight.db.SqlDriver
 | 
			
		||||
import app.cash.sqldelight.driver.android.AndroidSqliteDriver
 | 
			
		||||
import eu.kanade.domain.base.BasePreferences
 | 
			
		||||
@@ -38,15 +37,13 @@ import tachiyomi.core.preference.PreferenceStore
 | 
			
		||||
import tachiyomi.core.provider.AndroidBackupFolderProvider
 | 
			
		||||
import tachiyomi.core.provider.AndroidDownloadFolderProvider
 | 
			
		||||
import tachiyomi.data.AndroidDatabaseHandler
 | 
			
		||||
import tachiyomi.data.Chapters
 | 
			
		||||
import tachiyomi.data.Database
 | 
			
		||||
import tachiyomi.data.DatabaseHandler
 | 
			
		||||
import tachiyomi.data.DateColumnAdapter
 | 
			
		||||
import tachiyomi.data.History
 | 
			
		||||
import tachiyomi.data.Manga_sync
 | 
			
		||||
import tachiyomi.data.Mangas
 | 
			
		||||
import tachiyomi.data.dateAdapter
 | 
			
		||||
import tachiyomi.data.listOfStringsAdapter
 | 
			
		||||
import tachiyomi.data.updateStrategyAdapter
 | 
			
		||||
import tachiyomi.data.StringListColumnAdapter
 | 
			
		||||
import tachiyomi.data.UpdateStrategyColumnAdapter
 | 
			
		||||
import tachiyomi.domain.backup.service.BackupPreferences
 | 
			
		||||
import tachiyomi.domain.download.service.DownloadPreferences
 | 
			
		||||
import tachiyomi.domain.library.service.LibraryPreferences
 | 
			
		||||
@@ -93,18 +90,12 @@ class AppModule(val app: Application) : InjektModule {
 | 
			
		||||
        addSingletonFactory {
 | 
			
		||||
            Database(
 | 
			
		||||
                driver = get(),
 | 
			
		||||
                chaptersAdapter = Chapters.Adapter(
 | 
			
		||||
                    chapter_numberAdapter = FloatColumnAdapter,
 | 
			
		||||
                ),
 | 
			
		||||
                historyAdapter = History.Adapter(
 | 
			
		||||
                    last_readAdapter = dateAdapter,
 | 
			
		||||
                ),
 | 
			
		||||
                manga_syncAdapter = Manga_sync.Adapter(
 | 
			
		||||
                    scoreAdapter = FloatColumnAdapter,
 | 
			
		||||
                    last_readAdapter = DateColumnAdapter,
 | 
			
		||||
                ),
 | 
			
		||||
                mangasAdapter = Mangas.Adapter(
 | 
			
		||||
                    genreAdapter = listOfStringsAdapter,
 | 
			
		||||
                    update_strategyAdapter = updateStrategyAdapter,
 | 
			
		||||
                    genreAdapter = StringListColumnAdapter,
 | 
			
		||||
                    update_strategyAdapter = UpdateStrategyColumnAdapter,
 | 
			
		||||
                ),
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -30,12 +30,11 @@ import logcat.LogPriority
 | 
			
		||||
import okio.buffer
 | 
			
		||||
import okio.gzip
 | 
			
		||||
import okio.sink
 | 
			
		||||
import tachiyomi.core.util.lang.toLong
 | 
			
		||||
import tachiyomi.core.util.system.logcat
 | 
			
		||||
import tachiyomi.data.DatabaseHandler
 | 
			
		||||
import tachiyomi.data.Manga_sync
 | 
			
		||||
import tachiyomi.data.Mangas
 | 
			
		||||
import tachiyomi.data.updateStrategyAdapter
 | 
			
		||||
import tachiyomi.data.UpdateStrategyColumnAdapter
 | 
			
		||||
import tachiyomi.domain.backup.service.BackupPreferences
 | 
			
		||||
import tachiyomi.domain.category.interactor.GetCategories
 | 
			
		||||
import tachiyomi.domain.category.model.Category
 | 
			
		||||
@@ -415,7 +414,7 @@ class BackupManager(
 | 
			
		||||
                        track.last_chapter_read,
 | 
			
		||||
                        track.total_chapters,
 | 
			
		||||
                        track.status,
 | 
			
		||||
                        track.score.toDouble(),
 | 
			
		||||
                        track.score,
 | 
			
		||||
                        track.remote_url,
 | 
			
		||||
                        track.start_date,
 | 
			
		||||
                        track.finish_date,
 | 
			
		||||
@@ -536,7 +535,7 @@ class BackupManager(
 | 
			
		||||
                coverLastModified = manga.coverLastModified,
 | 
			
		||||
                dateAdded = manga.dateAdded,
 | 
			
		||||
                mangaId = manga.id,
 | 
			
		||||
                updateStrategy = manga.updateStrategy.let(updateStrategyAdapter::encode),
 | 
			
		||||
                updateStrategy = manga.updateStrategy.let(UpdateStrategyColumnAdapter::encode),
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
        return manga.id
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ data class BackupChapter(
 | 
			
		||||
        return Chapter.create().copy(
 | 
			
		||||
            url = this@BackupChapter.url,
 | 
			
		||||
            name = this@BackupChapter.name,
 | 
			
		||||
            chapterNumber = this@BackupChapter.chapterNumber,
 | 
			
		||||
            chapterNumber = this@BackupChapter.chapterNumber.toDouble(),
 | 
			
		||||
            scanlator = this@BackupChapter.scanlator,
 | 
			
		||||
            read = this@BackupChapter.read,
 | 
			
		||||
            bookmark = this@BackupChapter.bookmark,
 | 
			
		||||
@@ -39,11 +39,11 @@ data class BackupChapter(
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
val backupChapterMapper = { _: Long, _: Long, url: String, name: String, scanlator: String?, read: Boolean, bookmark: Boolean, lastPageRead: Long, chapterNumber: Float, source_order: Long, dateFetch: Long, dateUpload: Long, lastModifiedAt: Long ->
 | 
			
		||||
val backupChapterMapper = { _: Long, _: Long, url: String, name: String, scanlator: String?, read: Boolean, bookmark: Boolean, lastPageRead: Long, chapterNumber: Double, source_order: Long, dateFetch: Long, dateUpload: Long, lastModifiedAt: Long ->
 | 
			
		||||
    BackupChapter(
 | 
			
		||||
        url = url,
 | 
			
		||||
        name = name,
 | 
			
		||||
        chapterNumber = chapterNumber,
 | 
			
		||||
        chapterNumber = chapterNumber.toFloat(),
 | 
			
		||||
        scanlator = scanlator,
 | 
			
		||||
        read = read,
 | 
			
		||||
        bookmark = bookmark,
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ data class BackupTracking(
 | 
			
		||||
            title = this@BackupTracking.title,
 | 
			
		||||
            lastChapterRead = this@BackupTracking.lastChapterRead.toDouble(),
 | 
			
		||||
            totalChapters = this@BackupTracking.totalChapters.toLong(),
 | 
			
		||||
            score = this@BackupTracking.score,
 | 
			
		||||
            score = this@BackupTracking.score.toDouble(),
 | 
			
		||||
            status = this@BackupTracking.status.toLong(),
 | 
			
		||||
            startDate = this@BackupTracking.startedReadingDate,
 | 
			
		||||
            finishDate = this@BackupTracking.finishedReadingDate,
 | 
			
		||||
@@ -54,7 +54,7 @@ data class BackupTracking(
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
val backupTrackMapper = {
 | 
			
		||||
        _: Long, _: Long, syncId: Long, mediaId: Long, libraryId: Long?, title: String, lastChapterRead: Double, totalChapters: Long, status: Long, score: Float, remoteUrl: String, startDate: Long, finishDate: Long ->
 | 
			
		||||
        _: Long, _: Long, syncId: Long, mediaId: Long, libraryId: Long?, title: String, lastChapterRead: Double, totalChapters: Long, status: Long, score: Double, remoteUrl: String, startDate: Long, finishDate: Long ->
 | 
			
		||||
    BackupTracking(
 | 
			
		||||
        syncId = syncId.toInt(),
 | 
			
		||||
        mediaId = mediaId,
 | 
			
		||||
@@ -63,7 +63,7 @@ val backupTrackMapper = {
 | 
			
		||||
        title = title,
 | 
			
		||||
        lastChapterRead = lastChapterRead.toFloat(),
 | 
			
		||||
        totalChapters = totalChapters.toInt(),
 | 
			
		||||
        score = score,
 | 
			
		||||
        score = score.toFloat(),
 | 
			
		||||
        status = status.toInt(),
 | 
			
		||||
        startedReadingDate = startDate,
 | 
			
		||||
        finishedReadingDate = finishDate,
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ fun Chapter.toDomainChapter(): DomainChapter? {
 | 
			
		||||
        url = url,
 | 
			
		||||
        name = name,
 | 
			
		||||
        dateUpload = date_upload,
 | 
			
		||||
        chapterNumber = chapter_number,
 | 
			
		||||
        chapterNumber = chapter_number.toDouble(),
 | 
			
		||||
        scanlator = scanlator,
 | 
			
		||||
        lastModifiedAt = last_modified,
 | 
			
		||||
    )
 | 
			
		||||
 
 | 
			
		||||
@@ -65,7 +65,7 @@ abstract class TrackService(val id: Long) {
 | 
			
		||||
    abstract fun getScoreList(): List<String>
 | 
			
		||||
 | 
			
		||||
    // TODO: Store all scores as 10 point in the future maybe?
 | 
			
		||||
    open fun get10PointScore(track: DomainTrack): Float {
 | 
			
		||||
    open fun get10PointScore(track: DomainTrack): Double {
 | 
			
		||||
        return track.score
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -93,9 +93,9 @@ class Anilist(id: Long) : TrackService(id), DeletableTrackService {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun get10PointScore(track: DomainTrack): Float {
 | 
			
		||||
    override fun get10PointScore(track: DomainTrack): Double {
 | 
			
		||||
        // Score is stored in 100 point format
 | 
			
		||||
        return track.score / 10f
 | 
			
		||||
        return track.score / 10.0
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun indexToScore(index: Int): Float {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,6 @@ fun SChapter.copyFrom(other: Chapters) {
 | 
			
		||||
    name = other.name
 | 
			
		||||
    url = other.url
 | 
			
		||||
    date_upload = other.date_upload
 | 
			
		||||
    chapter_number = other.chapter_number
 | 
			
		||||
    chapter_number = other.chapter_number.toFloat()
 | 
			
		||||
    scanlator = other.scanlator
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -137,15 +137,13 @@ class StatsScreenModel(
 | 
			
		||||
    private fun getTrackMeanScore(scoredMangaTrackMap: Map<Long, List<Track>>): Double {
 | 
			
		||||
        return scoredMangaTrackMap
 | 
			
		||||
            .map { (_, tracks) ->
 | 
			
		||||
                tracks.map {
 | 
			
		||||
                    get10PointScore(it)
 | 
			
		||||
                }.average()
 | 
			
		||||
                tracks.map(::get10PointScore).average()
 | 
			
		||||
            }
 | 
			
		||||
            .fastFilter { !it.isNaN() }
 | 
			
		||||
            .average()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun get10PointScore(track: Track): Float {
 | 
			
		||||
    private fun get10PointScore(track: Track): Double {
 | 
			
		||||
        val service = trackManager.getService(track.syncId)!!
 | 
			
		||||
        return service.get10PointScore(track)
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user