mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +01:00 
			
		
		
		
	Move backup models to domain module
This commit is contained in:
		
							
								
								
									
										18
									
								
								domain/src/main/java/tachiyomi/domain/backup/model/Backup.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								domain/src/main/java/tachiyomi/domain/backup/model/Backup.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
package tachiyomi.domain.backup.model
 | 
			
		||||
 | 
			
		||||
import kotlinx.serialization.Serializable
 | 
			
		||||
import kotlinx.serialization.Serializer
 | 
			
		||||
import kotlinx.serialization.protobuf.ProtoNumber
 | 
			
		||||
 | 
			
		||||
@Serializer(forClass = Backup::class)
 | 
			
		||||
object BackupSerializer
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class Backup(
 | 
			
		||||
    @ProtoNumber(1) val backupManga: List<BackupManga>,
 | 
			
		||||
    @ProtoNumber(2) var backupCategories: List<BackupCategory> = emptyList(),
 | 
			
		||||
    @ProtoNumber(100) var backupBrokenSources: List<BrokenBackupSource> = emptyList(),
 | 
			
		||||
    @ProtoNumber(101) var backupSources: List<BackupSource> = emptyList(),
 | 
			
		||||
    @ProtoNumber(104) var backupPreferences: List<BackupPreference> = emptyList(),
 | 
			
		||||
    @ProtoNumber(105) var backupSourcePreferences: List<BackupSourcePreferences> = emptyList(),
 | 
			
		||||
)
 | 
			
		||||
@@ -0,0 +1,28 @@
 | 
			
		||||
package tachiyomi.domain.backup.model
 | 
			
		||||
 | 
			
		||||
import kotlinx.serialization.Serializable
 | 
			
		||||
import kotlinx.serialization.protobuf.ProtoNumber
 | 
			
		||||
import tachiyomi.domain.category.model.Category
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
class BackupCategory(
 | 
			
		||||
    @ProtoNumber(1) var name: String,
 | 
			
		||||
    @ProtoNumber(2) var order: Long = 0,
 | 
			
		||||
    // @ProtoNumber(3) val updateInterval: Int = 0, 1.x value not used in 0.x
 | 
			
		||||
    @ProtoNumber(100) var flags: Long = 0,
 | 
			
		||||
) {
 | 
			
		||||
    fun toCategory(id: Long) = Category(
 | 
			
		||||
        id = id,
 | 
			
		||||
        name = this@BackupCategory.name,
 | 
			
		||||
        flags = this@BackupCategory.flags,
 | 
			
		||||
        order = this@BackupCategory.order,
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
val backupCategoryMapper = { category: Category ->
 | 
			
		||||
    BackupCategory(
 | 
			
		||||
        name = category.name,
 | 
			
		||||
        order = category.order,
 | 
			
		||||
        flags = category.flags,
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,70 @@
 | 
			
		||||
package tachiyomi.domain.backup.model
 | 
			
		||||
 | 
			
		||||
import kotlinx.serialization.Serializable
 | 
			
		||||
import kotlinx.serialization.protobuf.ProtoNumber
 | 
			
		||||
import tachiyomi.domain.chapter.model.Chapter
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class BackupChapter(
 | 
			
		||||
    // in 1.x some of these values have different names
 | 
			
		||||
    // url is called key in 1.x
 | 
			
		||||
    @ProtoNumber(1) var url: String,
 | 
			
		||||
    @ProtoNumber(2) var name: String,
 | 
			
		||||
    @ProtoNumber(3) var scanlator: String? = null,
 | 
			
		||||
    @ProtoNumber(4) var read: Boolean = false,
 | 
			
		||||
    @ProtoNumber(5) var bookmark: Boolean = false,
 | 
			
		||||
    // lastPageRead is called progress in 1.x
 | 
			
		||||
    @ProtoNumber(6) var lastPageRead: Long = 0,
 | 
			
		||||
    @ProtoNumber(7) var dateFetch: Long = 0,
 | 
			
		||||
    @ProtoNumber(8) var dateUpload: Long = 0,
 | 
			
		||||
    // chapterNumber is called number is 1.x
 | 
			
		||||
    @ProtoNumber(9) var chapterNumber: Float = 0F,
 | 
			
		||||
    @ProtoNumber(10) var sourceOrder: Long = 0,
 | 
			
		||||
    @ProtoNumber(11) var lastModifiedAt: Long = 0,
 | 
			
		||||
) {
 | 
			
		||||
    fun toChapterImpl(): Chapter {
 | 
			
		||||
        return Chapter.create().copy(
 | 
			
		||||
            url = this@BackupChapter.url,
 | 
			
		||||
            name = this@BackupChapter.name,
 | 
			
		||||
            chapterNumber = this@BackupChapter.chapterNumber.toDouble(),
 | 
			
		||||
            scanlator = this@BackupChapter.scanlator,
 | 
			
		||||
            read = this@BackupChapter.read,
 | 
			
		||||
            bookmark = this@BackupChapter.bookmark,
 | 
			
		||||
            lastPageRead = this@BackupChapter.lastPageRead,
 | 
			
		||||
            dateFetch = this@BackupChapter.dateFetch,
 | 
			
		||||
            dateUpload = this@BackupChapter.dateUpload,
 | 
			
		||||
            sourceOrder = this@BackupChapter.sourceOrder,
 | 
			
		||||
            lastModifiedAt = this@BackupChapter.lastModifiedAt,
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
val backupChapterMapper = {
 | 
			
		||||
        _: Long,
 | 
			
		||||
        _: Long,
 | 
			
		||||
        url: String,
 | 
			
		||||
        name: String,
 | 
			
		||||
        scanlator: String?,
 | 
			
		||||
        read: Boolean,
 | 
			
		||||
        bookmark: Boolean,
 | 
			
		||||
        lastPageRead: Long,
 | 
			
		||||
        chapterNumber: Double,
 | 
			
		||||
        sourceOrder: Long,
 | 
			
		||||
        dateFetch: Long,
 | 
			
		||||
        dateUpload: Long,
 | 
			
		||||
        lastModifiedAt: Long,
 | 
			
		||||
    ->
 | 
			
		||||
    BackupChapter(
 | 
			
		||||
        url = url,
 | 
			
		||||
        name = name,
 | 
			
		||||
        chapterNumber = chapterNumber.toFloat(),
 | 
			
		||||
        scanlator = scanlator,
 | 
			
		||||
        read = read,
 | 
			
		||||
        bookmark = bookmark,
 | 
			
		||||
        lastPageRead = lastPageRead,
 | 
			
		||||
        dateFetch = dateFetch,
 | 
			
		||||
        dateUpload = dateUpload,
 | 
			
		||||
        sourceOrder = sourceOrder,
 | 
			
		||||
        lastModifiedAt = lastModifiedAt,
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,32 @@
 | 
			
		||||
package tachiyomi.domain.backup.model
 | 
			
		||||
 | 
			
		||||
import kotlinx.serialization.Serializable
 | 
			
		||||
import kotlinx.serialization.protobuf.ProtoNumber
 | 
			
		||||
import tachiyomi.domain.history.model.History
 | 
			
		||||
import java.util.Date
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class BackupHistory(
 | 
			
		||||
    @ProtoNumber(1) var url: String,
 | 
			
		||||
    @ProtoNumber(2) var lastRead: Long,
 | 
			
		||||
    @ProtoNumber(3) var readDuration: Long = 0,
 | 
			
		||||
) {
 | 
			
		||||
    fun getHistoryImpl(): History {
 | 
			
		||||
        return History.create().copy(
 | 
			
		||||
            readAt = Date(lastRead),
 | 
			
		||||
            readDuration = readDuration,
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Deprecated("Replaced with BackupHistory. This is retained for legacy reasons.")
 | 
			
		||||
@Serializable
 | 
			
		||||
data class BrokenBackupHistory(
 | 
			
		||||
    @ProtoNumber(0) var url: String,
 | 
			
		||||
    @ProtoNumber(1) var lastRead: Long,
 | 
			
		||||
    @ProtoNumber(2) var readDuration: Long = 0,
 | 
			
		||||
) {
 | 
			
		||||
    fun toBackupHistory(): BackupHistory {
 | 
			
		||||
        return BackupHistory(url, lastRead, readDuration)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,62 @@
 | 
			
		||||
package tachiyomi.domain.backup.model
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.UpdateStrategy
 | 
			
		||||
import kotlinx.serialization.Serializable
 | 
			
		||||
import kotlinx.serialization.protobuf.ProtoNumber
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
 | 
			
		||||
@Suppress("DEPRECATION")
 | 
			
		||||
@Serializable
 | 
			
		||||
data class BackupManga(
 | 
			
		||||
    // in 1.x some of these values have different names
 | 
			
		||||
    @ProtoNumber(1) var source: Long,
 | 
			
		||||
    // url is called key in 1.x
 | 
			
		||||
    @ProtoNumber(2) var url: String,
 | 
			
		||||
    @ProtoNumber(3) var title: String = "",
 | 
			
		||||
    @ProtoNumber(4) var artist: String? = null,
 | 
			
		||||
    @ProtoNumber(5) var author: String? = null,
 | 
			
		||||
    @ProtoNumber(6) var description: String? = null,
 | 
			
		||||
    @ProtoNumber(7) var genre: List<String> = emptyList(),
 | 
			
		||||
    @ProtoNumber(8) var status: Int = 0,
 | 
			
		||||
    // thumbnailUrl is called cover in 1.x
 | 
			
		||||
    @ProtoNumber(9) var thumbnailUrl: String? = null,
 | 
			
		||||
    // @ProtoNumber(10) val customCover: String = "", 1.x value, not used in 0.x
 | 
			
		||||
    // @ProtoNumber(11) val lastUpdate: Long = 0, 1.x value, not used in 0.x
 | 
			
		||||
    // @ProtoNumber(12) val lastInit: Long = 0, 1.x value, not used in 0.x
 | 
			
		||||
    @ProtoNumber(13) var dateAdded: Long = 0,
 | 
			
		||||
    @ProtoNumber(14) var viewer: Int = 0, // Replaced by viewer_flags
 | 
			
		||||
    // @ProtoNumber(15) val flags: Int = 0, 1.x value, not used in 0.x
 | 
			
		||||
    @ProtoNumber(16) var chapters: List<BackupChapter> = emptyList(),
 | 
			
		||||
    @ProtoNumber(17) var categories: List<Long> = emptyList(),
 | 
			
		||||
    @ProtoNumber(18) var tracking: List<BackupTracking> = emptyList(),
 | 
			
		||||
    // Bump by 100 for values that are not saved/implemented in 1.x but are used in 0.x
 | 
			
		||||
    @ProtoNumber(100) var favorite: Boolean = true,
 | 
			
		||||
    @ProtoNumber(101) var chapterFlags: Int = 0,
 | 
			
		||||
    @ProtoNumber(102) var brokenHistory: List<BrokenBackupHistory> = emptyList(),
 | 
			
		||||
    @ProtoNumber(103) var viewer_flags: Int? = null,
 | 
			
		||||
    @ProtoNumber(104) var history: List<BackupHistory> = emptyList(),
 | 
			
		||||
    @ProtoNumber(105) var updateStrategy: UpdateStrategy = UpdateStrategy.ALWAYS_UPDATE,
 | 
			
		||||
    @ProtoNumber(106) var lastModifiedAt: Long = 0,
 | 
			
		||||
    @ProtoNumber(107) var favoriteModifiedAt: Long? = null,
 | 
			
		||||
) {
 | 
			
		||||
    fun getMangaImpl(): Manga {
 | 
			
		||||
        return Manga.create().copy(
 | 
			
		||||
            url = this@BackupManga.url,
 | 
			
		||||
            title = this@BackupManga.title,
 | 
			
		||||
            artist = this@BackupManga.artist,
 | 
			
		||||
            author = this@BackupManga.author,
 | 
			
		||||
            description = this@BackupManga.description,
 | 
			
		||||
            genre = this@BackupManga.genre,
 | 
			
		||||
            status = this@BackupManga.status.toLong(),
 | 
			
		||||
            thumbnailUrl = this@BackupManga.thumbnailUrl,
 | 
			
		||||
            favorite = this@BackupManga.favorite,
 | 
			
		||||
            source = this@BackupManga.source,
 | 
			
		||||
            dateAdded = this@BackupManga.dateAdded,
 | 
			
		||||
            viewerFlags = (this@BackupManga.viewer_flags ?: this@BackupManga.viewer).toLong(),
 | 
			
		||||
            chapterFlags = this@BackupManga.chapterFlags.toLong(),
 | 
			
		||||
            updateStrategy = this@BackupManga.updateStrategy,
 | 
			
		||||
            lastModifiedAt = this@BackupManga.lastModifiedAt,
 | 
			
		||||
            favoriteModifiedAt = this@BackupManga.favoriteModifiedAt,
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,37 @@
 | 
			
		||||
package tachiyomi.domain.backup.model
 | 
			
		||||
 | 
			
		||||
import kotlinx.serialization.Serializable
 | 
			
		||||
import kotlinx.serialization.protobuf.ProtoNumber
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class BackupPreference(
 | 
			
		||||
    @ProtoNumber(1) val key: String,
 | 
			
		||||
    @ProtoNumber(2) val value: PreferenceValue,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class BackupSourcePreferences(
 | 
			
		||||
    @ProtoNumber(1) val sourceKey: String,
 | 
			
		||||
    @ProtoNumber(2) val prefs: List<BackupPreference>,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
sealed class PreferenceValue
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class IntPreferenceValue(val value: Int) : PreferenceValue()
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class LongPreferenceValue(val value: Long) : PreferenceValue()
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class FloatPreferenceValue(val value: Float) : PreferenceValue()
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class StringPreferenceValue(val value: String) : PreferenceValue()
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class BooleanPreferenceValue(val value: Boolean) : PreferenceValue()
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class StringSetPreferenceValue(val value: Set<String>) : PreferenceValue()
 | 
			
		||||
@@ -0,0 +1,18 @@
 | 
			
		||||
package tachiyomi.domain.backup.model
 | 
			
		||||
 | 
			
		||||
import kotlinx.serialization.Serializable
 | 
			
		||||
import kotlinx.serialization.protobuf.ProtoNumber
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class BackupSource(
 | 
			
		||||
    @ProtoNumber(1) var name: String = "",
 | 
			
		||||
    @ProtoNumber(2) var sourceId: Long,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class BrokenBackupSource(
 | 
			
		||||
    @ProtoNumber(0) var name: String = "",
 | 
			
		||||
    @ProtoNumber(1) var sourceId: Long,
 | 
			
		||||
) {
 | 
			
		||||
    fun toBackupSource() = BackupSource(name, sourceId)
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,85 @@
 | 
			
		||||
package tachiyomi.domain.backup.model
 | 
			
		||||
 | 
			
		||||
import kotlinx.serialization.Serializable
 | 
			
		||||
import kotlinx.serialization.protobuf.ProtoNumber
 | 
			
		||||
import tachiyomi.domain.track.model.Track
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class BackupTracking(
 | 
			
		||||
    // in 1.x some of these values have different types or names
 | 
			
		||||
    // syncId is called siteId in 1,x
 | 
			
		||||
    @ProtoNumber(1) var syncId: Int,
 | 
			
		||||
    // LibraryId is not null in 1.x
 | 
			
		||||
    @ProtoNumber(2) var libraryId: Long,
 | 
			
		||||
    @Deprecated("Use mediaId instead", level = DeprecationLevel.WARNING)
 | 
			
		||||
    @ProtoNumber(3)
 | 
			
		||||
    var mediaIdInt: Int = 0,
 | 
			
		||||
    // trackingUrl is called mediaUrl in 1.x
 | 
			
		||||
    @ProtoNumber(4) var trackingUrl: String = "",
 | 
			
		||||
    @ProtoNumber(5) var title: String = "",
 | 
			
		||||
    // lastChapterRead is called last read, and it has been changed to a float in 1.x
 | 
			
		||||
    @ProtoNumber(6) var lastChapterRead: Float = 0F,
 | 
			
		||||
    @ProtoNumber(7) var totalChapters: Int = 0,
 | 
			
		||||
    @ProtoNumber(8) var score: Float = 0F,
 | 
			
		||||
    @ProtoNumber(9) var status: Int = 0,
 | 
			
		||||
    // startedReadingDate is called startReadTime in 1.x
 | 
			
		||||
    @ProtoNumber(10) var startedReadingDate: Long = 0,
 | 
			
		||||
    // finishedReadingDate is called endReadTime in 1.x
 | 
			
		||||
    @ProtoNumber(11) var finishedReadingDate: Long = 0,
 | 
			
		||||
    @ProtoNumber(100) var mediaId: Long = 0,
 | 
			
		||||
) {
 | 
			
		||||
 | 
			
		||||
    @Suppress("DEPRECATION")
 | 
			
		||||
    fun getTrackImpl(): Track {
 | 
			
		||||
        return Track(
 | 
			
		||||
            id = -1,
 | 
			
		||||
            mangaId = -1,
 | 
			
		||||
            syncId = this@BackupTracking.syncId.toLong(),
 | 
			
		||||
            remoteId = if (this@BackupTracking.mediaIdInt != 0) {
 | 
			
		||||
                this@BackupTracking.mediaIdInt.toLong()
 | 
			
		||||
            } else {
 | 
			
		||||
                this@BackupTracking.mediaId
 | 
			
		||||
            },
 | 
			
		||||
            libraryId = this@BackupTracking.libraryId,
 | 
			
		||||
            title = this@BackupTracking.title,
 | 
			
		||||
            lastChapterRead = this@BackupTracking.lastChapterRead.toDouble(),
 | 
			
		||||
            totalChapters = this@BackupTracking.totalChapters.toLong(),
 | 
			
		||||
            score = this@BackupTracking.score.toDouble(),
 | 
			
		||||
            status = this@BackupTracking.status.toLong(),
 | 
			
		||||
            startDate = this@BackupTracking.startedReadingDate,
 | 
			
		||||
            finishDate = this@BackupTracking.finishedReadingDate,
 | 
			
		||||
            remoteUrl = this@BackupTracking.trackingUrl,
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
val backupTrackMapper = {
 | 
			
		||||
        _: 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,
 | 
			
		||||
        // forced not null so its compatible with 1.x backup system
 | 
			
		||||
        libraryId = libraryId ?: 0,
 | 
			
		||||
        title = title,
 | 
			
		||||
        lastChapterRead = lastChapterRead.toFloat(),
 | 
			
		||||
        totalChapters = totalChapters.toInt(),
 | 
			
		||||
        score = score.toFloat(),
 | 
			
		||||
        status = status.toInt(),
 | 
			
		||||
        startedReadingDate = startDate,
 | 
			
		||||
        finishedReadingDate = finishDate,
 | 
			
		||||
        trackingUrl = remoteUrl,
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user