Use Kotlinx Serialization with the update check API.

Also replace Author and Uploader data classes with a single User class.
This commit is contained in:
Isira Seneviratne 2023-01-19 06:22:48 +05:30
parent fccb198f04
commit 0cf5853a3a
7 changed files with 83 additions and 100 deletions

View File

@ -1,20 +1,22 @@
package com.github.libretube.obj.update
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import kotlinx.datetime.Instant
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@JsonIgnoreProperties(ignoreUnknown = true)
@Serializable
data class Asset(
val browser_download_url: String? = null,
val content_type: String? = null,
val created_at: String? = null,
val download_count: Int? = null,
val id: Int? = null,
val label: Any? = null,
val name: String? = null,
val node_id: String? = null,
val size: Int? = null,
val state: String? = null,
val updated_at: String? = null,
val uploader: Uploader? = null,
val url: String? = null
@SerialName("browser_download_url") val browserDownloadUrl: String,
@SerialName("content_type") val contentType: String,
@SerialName("created_at") val createdAt: Instant,
@SerialName("download_count") val downloadCount: Int,
val id: Int,
val label: String? = null,
val name: String,
@SerialName("node_id") val nodeId: String,
val size: Int,
val state: String,
@SerialName("updated_at") val updatedAt: Instant,
val uploader: User,
val url: String
)

View File

@ -1,25 +0,0 @@
package com.github.libretube.obj.update
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
@JsonIgnoreProperties(ignoreUnknown = true)
data class Author(
val avatar_url: String? = null,
val events_url: String? = null,
val followers_url: String? = null,
val following_url: String? = null,
val gists_url: String? = null,
val gravatar_id: String? = null,
val html_url: String? = null,
val id: Int? = null,
val login: String? = null,
val node_id: String? = null,
val organizations_url: String? = null,
val received_events_url: String? = null,
val repos_url: String? = null,
val site_admin: Boolean? = null,
val starred_url: String? = null,
val subscriptions_url: String? = null,
val type: String? = null,
val url: String? = null
)

View File

@ -1,15 +1,16 @@
package com.github.libretube.obj.update
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@JsonIgnoreProperties(ignoreUnknown = true)
@Serializable
data class Reactions(
val confused: Int? = null,
val eyes: Int? = null,
val heart: Int? = null,
val hooray: Int? = null,
val laugh: Int? = null,
val rocket: Int? = null,
val total_count: Int? = null,
val url: String? = null
val confused: Int,
val eyes: Int,
val heart: Int,
val hooray: Int,
val laugh: Int,
val rocket: Int,
@SerialName("total_count") val totalCount: Int,
val url: String
)

View File

@ -1,27 +1,29 @@
package com.github.libretube.obj.update
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import kotlinx.datetime.Instant
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@JsonIgnoreProperties(ignoreUnknown = true)
@Serializable
data class UpdateInfo(
val assets: List<Asset>? = null,
val assets_url: String? = null,
val author: Author? = null,
val body: String? = null,
val created_at: String? = null,
val draft: Boolean? = null,
val html_url: String? = null,
val id: Int? = null,
val mentions_count: Int? = null,
val name: String? = null,
val node_id: String? = null,
val prerelease: Boolean? = null,
val published_at: String? = null,
val reactions: Reactions? = null,
val tag_name: String? = null,
val tarball_url: String? = null,
val target_commitish: String? = null,
val upload_url: String? = null,
val url: String? = null,
val zipball_url: String? = null
val assets: List<Asset> = emptyList(),
@SerialName("assets_url") val assetsUrl: String,
val author: User,
val body: String,
@SerialName("created_at") val createdAt: Instant,
val draft: Boolean,
@SerialName("html_url") val htmlUrl: String,
val id: Int,
@SerialName("mentions_count") val mentionsCount: Int,
val name: String,
@SerialName("node_id") val nodeId: String,
val prerelease: Boolean,
@SerialName("published_at") val publishedAt: Instant,
val reactions: Reactions,
@SerialName("tag_name") val tagName: String,
@SerialName("tarball_url") val tarballUrl: String,
@SerialName("target_commitish") val targetCommitish: String,
@SerialName("upload_url") val uploadUrl: String,
val url: String,
@SerialName("zipball_url") val zipballUrl: String
)

View File

@ -1,25 +0,0 @@
package com.github.libretube.obj.update
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
@JsonIgnoreProperties(ignoreUnknown = true)
data class Uploader(
val avatar_url: String? = null,
val events_url: String? = null,
val followers_url: String? = null,
val following_url: String? = null,
val gists_url: String? = null,
val gravatar_id: String? = null,
val html_url: String? = null,
val id: Int? = null,
val login: String? = null,
val node_id: String? = null,
val organizations_url: String? = null,
val received_events_url: String? = null,
val repos_url: String? = null,
val site_admin: Boolean? = null,
val starred_url: String? = null,
val subscriptions_url: String? = null,
val type: String? = null,
val url: String? = null
)

View File

@ -0,0 +1,26 @@
package com.github.libretube.obj.update
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class User(
@SerialName("avatar_url") val avatarUrl: String,
@SerialName("events_url") val eventsUrl: String,
@SerialName("followers_url") val followersUrl: String,
@SerialName("following_url") val followingUrl: String,
@SerialName("gists_url") val gistsUrl: String,
@SerialName("gravatar_id") val gravatarId: String,
@SerialName("html_url") val htmlUrl: String,
val id: Int,
val login: String,
@SerialName("node_id") val nodeId: String,
@SerialName("organizations_url") val organizationsUrl: String,
@SerialName("received_events_url") val receivedEventsUrl: String,
@SerialName("repos_url") val reposUrl: String,
@SerialName("site_admin") val siteAdmin: Boolean,
@SerialName("starred_url") val starredUrl: String,
@SerialName("subscriptions_url") val subscriptionsUrl: String,
val type: String,
val url: String
)

View File

@ -29,7 +29,7 @@ class UpdateDialog(
intent.putExtra("downloadUrl", downloadUrl)
context?.startService(intent)
} else {
val uri = Uri.parse(updateInfo.html_url)
val uri = Uri.parse(updateInfo.htmlUrl)
val intent = Intent(Intent.ACTION_VIEW).setData(uri)
startActivity(intent)
}
@ -40,8 +40,10 @@ class UpdateDialog(
private fun getDownloadUrl(updateInfo: UpdateInfo): String? {
val supportedArchitectures = Build.SUPPORTED_ABIS
supportedArchitectures.forEach { arch ->
updateInfo.assets?.forEach { asset ->
if (asset.name?.contains(arch) == true) return asset.browser_download_url
updateInfo.assets.forEach { asset ->
if (asset.name.contains(arch)) {
return asset.browserDownloadUrl
}
}
}
return null