Update: Migrating Release to a database.entity

This commit is contained in:
machiav3lli 2022-02-04 01:17:48 +01:00
parent 67ec9649a8
commit e95b3aeea3
12 changed files with 24 additions and 21 deletions

View File

@ -1,7 +1,7 @@
package com.looker.droidify.database
import androidx.room.TypeConverter
import com.looker.droidify.entity.Release
import com.looker.droidify.database.entity.Release
import com.looker.droidify.utility.jsonGenerate
import com.looker.droidify.utility.jsonParse

View File

@ -3,7 +3,6 @@ package com.looker.droidify.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
import com.looker.droidify.entity.ProductItem
import com.looker.droidify.entity.Release
@Entity(tableName = "product", primaryKeys = ["repository_id", "package_name"])
open class Product {

View File

@ -1,14 +1,16 @@
package com.looker.droidify.entity
package com.looker.droidify.database.entity
import android.net.Uri
import androidx.room.Entity
import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.core.JsonToken
import com.looker.droidify.database.entity.Repository
import com.looker.droidify.utility.extension.json.*
// TODO make a Room entity
@Entity(primaryKeys = ["packageName", "versionCode", "signature"])
data class Release(
val packageName: String,
val selected: Boolean,
val version: String,
val versionCode: Long,
@ -51,6 +53,7 @@ data class Release(
get() = "${hash.replace('/', '-')}.apk"
fun serialize(generator: JsonGenerator) {
generator.writeStringField("packageName", packageName)
generator.writeNumberField("serialVersion", 1)
generator.writeBooleanField("selected", selected)
generator.writeStringField("version", version)
@ -99,6 +102,7 @@ data class Release(
companion object {
fun deserialize(parser: JsonParser): Release {
var packageName = ""
var selected = false
var version = ""
var versionCode = 0L
@ -124,6 +128,7 @@ data class Release(
var incompatibilities = emptyList<Incompatibility>()
parser.forEachKey { it ->
when {
it.string("packageName") -> packageName = valueAsString
it.boolean("selected") -> selected = valueAsBoolean
it.string("version") -> version = valueAsString
it.number("versionCode") -> versionCode = valueAsLong
@ -169,6 +174,7 @@ data class Release(
}
}
return Release(
packageName,
selected,
version,
versionCode,

View File

@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.core.JsonToken
import com.looker.droidify.database.entity.Installed
import com.looker.droidify.database.entity.Release
import com.looker.droidify.utility.extension.json.*
import com.looker.droidify.utility.extension.text.nullIfEmpty

View File

@ -1,7 +1,7 @@
package com.looker.droidify.index
import com.looker.droidify.database.entity.Release
import com.looker.droidify.entity.Product
import com.looker.droidify.entity.Release
import com.looker.droidify.utility.extension.android.Android
import org.xml.sax.Attributes
import org.xml.sax.helpers.DefaultHandler
@ -116,6 +116,7 @@ class IndexHandler(private val repositoryId: Long, private val callback: Callbac
}
private class ReleaseBuilder {
var packageName = ""
var version = ""
var versionCode = 0L
var added = 0L
@ -141,6 +142,7 @@ class IndexHandler(private val repositoryId: Long, private val callback: Callbac
val obbMainHashType = if (obbMainHash.isNotEmpty()) "sha256" else ""
val obbPatchHashType = if (obbPatchHash.isNotEmpty()) "sha256" else ""
return Release(
packageName,
false,
version,
versionCode,

View File

@ -3,8 +3,8 @@ package com.looker.droidify.index
import android.content.ContentValues
import android.database.sqlite.SQLiteDatabase
import com.fasterxml.jackson.core.JsonToken
import com.looker.droidify.database.entity.Release
import com.looker.droidify.entity.Product
import com.looker.droidify.entity.Release
import com.looker.droidify.utility.extension.android.asSequence
import com.looker.droidify.utility.extension.android.execWithResult
import com.looker.droidify.utility.extension.json.Json

View File

@ -2,8 +2,8 @@ package com.looker.droidify.index
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.core.JsonToken
import com.looker.droidify.database.entity.Release
import com.looker.droidify.entity.Product
import com.looker.droidify.entity.Release
import com.looker.droidify.utility.extension.android.Android
import com.looker.droidify.utility.extension.json.*
import com.looker.droidify.utility.extension.text.nullIfEmpty
@ -91,7 +91,8 @@ object IndexV1Parser {
it.dictionary("packages") -> forEachKey {
if (it.token == JsonToken.START_ARRAY) {
val packageName = it.key
val releases = collectNotNull(JsonToken.START_OBJECT) { parseRelease() }
val releases =
collectNotNull(JsonToken.START_OBJECT) { parseRelease(packageName) }
callback.onReleases(packageName, releases)
} else {
skipChildren()
@ -250,7 +251,7 @@ object IndexV1Parser {
)
}
private fun JsonParser.parseRelease(): Release {
private fun JsonParser.parseRelease(packageName: String): Release {
var version = ""
var versionCode = 0L
var added = 0L
@ -300,6 +301,7 @@ object IndexV1Parser {
val obbMainHashType = if (obbMainHash.isNotEmpty()) "sha256" else ""
val obbPatchHashType = if (obbPatchHash.isNotEmpty()) "sha256" else ""
return Release(
packageName,
false,
version,
versionCode,

View File

@ -4,9 +4,9 @@ import android.content.Context
import android.net.Uri
import com.looker.droidify.content.Cache
import com.looker.droidify.database.DatabaseX
import com.looker.droidify.database.entity.Release
import com.looker.droidify.database.entity.Repository
import com.looker.droidify.entity.Product
import com.looker.droidify.entity.Release
import com.looker.droidify.network.Downloader
import com.looker.droidify.utility.ProgressInputStream
import com.looker.droidify.utility.RxUtils

View File

@ -10,7 +10,7 @@ import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.looker.droidify.R
import com.looker.droidify.entity.Release
import com.looker.droidify.database.entity.Release
import com.looker.droidify.ui.fragments.RepositorySheetX
import com.looker.droidify.utility.KParcelable
import com.looker.droidify.utility.PackageItemResolver

View File

@ -9,8 +9,8 @@ import android.view.ContextThemeWrapper
import androidx.core.app.NotificationCompat
import com.looker.droidify.*
import com.looker.droidify.content.Cache
import com.looker.droidify.database.entity.Release
import com.looker.droidify.database.entity.Repository
import com.looker.droidify.entity.Release
import com.looker.droidify.installer.AppInstaller
import com.looker.droidify.network.Downloader
import com.looker.droidify.ui.activities.MainActivityX

View File

@ -44,10 +44,10 @@ import com.looker.droidify.R
import com.looker.droidify.content.Preferences
import com.looker.droidify.content.ProductPreferences
import com.looker.droidify.database.entity.Installed
import com.looker.droidify.database.entity.Release
import com.looker.droidify.database.entity.Repository
import com.looker.droidify.entity.Product
import com.looker.droidify.entity.ProductPreference
import com.looker.droidify.entity.Release
import com.looker.droidify.network.CoilDownloader
import com.looker.droidify.screen.ScreenshotsAdapter
import com.looker.droidify.utility.KParcelable
@ -1412,13 +1412,6 @@ class AppDetailAdapter(private val callbacks: Callbacks) :
holder.packageName.text = item.packageName
}
}::class
}
private fun formatHtml(text: String): SpannableStringBuilder {
val html = HtmlCompat.fromHtml(text, HtmlCompat.FROM_HTML_MODE_LEGACY)
val builder = run {
val builder = SpannableStringBuilder(html)
val last = builder.indexOfLast { it != '\n' }
val first = builder.indexOfFirst { it != '\n' }
if (last >= 0) {
builder.delete(last + 1, builder.length)

View File

@ -17,10 +17,10 @@ import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.looker.droidify.R
import com.looker.droidify.content.ProductPreferences
import com.looker.droidify.database.entity.Release
import com.looker.droidify.database.entity.Repository
import com.looker.droidify.entity.Product
import com.looker.droidify.entity.ProductPreference
import com.looker.droidify.entity.Release
import com.looker.droidify.installer.AppInstaller
import com.looker.droidify.screen.MessageDialog
import com.looker.droidify.screen.ScreenFragment