ModeleLocal.kt 37 lignes · 1115 octets
package fr.ebii.card2vcf.modeles

enum class TypeModele {
    /** Fichier `.traineddata` Tesseract, déposé tel quel. */
    TESSDATA,

    /** Archive zip Vosk, décompressée après téléchargement. */
    VOSK,
}

/**
 * Un modèle téléchargeable après installation.
 *
 * [tailleOctets] et [sha256] sont épinglés au catalogue : ils servent à afficher le poids
 * avant téléchargement et à vérifier l'intégrité de ce qui a été reçu.
 */
data class ModeleLocal(
    val id: String,
    val type: TypeModele,
    val tailleOctets: Long,
    val sha256: String,
) {
    /** Nom du fichier tel qu'il est publié en amont (et attendu sur un miroir). */
    val nomFichier: String
        get() = when (type) {
            TypeModele.TESSDATA -> "$id.traineddata"
            TypeModele.VOSK -> "$id.zip"
        }
}

/** État d'un modèle sur l'appareil. */
sealed interface EtatModele {
    data object Absent : EtatModele
    data class EnCours(val pourcentage: Int) : EtatModele
    data class Present(val tailleOctets: Long) : EtatModele
    data class Echec(val message: String) : EtatModele
}