Dantotsu/app/src/main/java/ani/dantotsu/others/imagesearch/ImageSearchViewModel.kt
Finnley Somdahl afa960c808 reformat
2023-12-01 01:22:15 -06:00

78 lines
No EOL
2.3 KiB
Kotlin

package ani.dantotsu.others.imagesearch
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import ani.dantotsu.client
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonElement
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.toRequestBody
import java.io.InputStream
class ImageSearchViewModel : ViewModel() {
val searchResultLiveData: MutableLiveData<SearchResult> = MutableLiveData()
private val url = "https://api.trace.moe/search?cutBorders&anilistInfo"
suspend fun analyzeImage(inputStream: InputStream) {
val requestBody = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(
"image",
"image.jpg",
inputStream.readBytes().toRequestBody("image/jpeg".toMediaType())
)
.build()
val res = client.post(url, requestBody = requestBody).parsed<SearchResult>()
searchResultLiveData.postValue(res)
}
fun clearResults() {
searchResultLiveData.postValue(SearchResult())
}
@Serializable
data class SearchResult(
val frameCount: Long? = null,
val error: String? = null,
val result: List<ImageResult>? = null
)
@Serializable
data class ImageResult(
val anilist: AnilistData? = null,
val filename: String? = null,
@SerialName("episode") val rawEpisode: JsonElement? = null,
val from: Double? = null,
val to: Double? = null,
val similarity: Double? = null,
val video: String? = null,
val image: String? = null
) {
val episode: String?
get() = rawEpisode?.toString()
override fun toString(): String {
return "$image & $video"
}
}
@Serializable
data class AnilistData(
val id: Long? = null,
val idMal: Long? = null,
val title: Title? = null,
val synonyms: List<String>? = null,
val isAdult: Boolean? = null
)
@Serializable
data class Title(
val native: String? = null,
val romaji: String? = null,
val english: String? = null
)
}