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

View File

@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.core.JsonParser import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.core.JsonToken import com.fasterxml.jackson.core.JsonToken
import com.looker.droidify.database.entity.Installed 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.json.*
import com.looker.droidify.utility.extension.text.nullIfEmpty import com.looker.droidify.utility.extension.text.nullIfEmpty

View File

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

View File

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

View File

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

View File

@ -10,7 +10,7 @@ import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.looker.droidify.R 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.ui.fragments.RepositorySheetX
import com.looker.droidify.utility.KParcelable import com.looker.droidify.utility.KParcelable
import com.looker.droidify.utility.PackageItemResolver import com.looker.droidify.utility.PackageItemResolver

View File

@ -9,8 +9,8 @@ import android.view.ContextThemeWrapper
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import com.looker.droidify.* import com.looker.droidify.*
import com.looker.droidify.content.Cache import com.looker.droidify.content.Cache
import com.looker.droidify.database.entity.Release
import com.looker.droidify.database.entity.Repository import com.looker.droidify.database.entity.Repository
import com.looker.droidify.entity.Release
import com.looker.droidify.installer.AppInstaller import com.looker.droidify.installer.AppInstaller
import com.looker.droidify.network.Downloader import com.looker.droidify.network.Downloader
import com.looker.droidify.ui.activities.MainActivityX 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.Preferences
import com.looker.droidify.content.ProductPreferences import com.looker.droidify.content.ProductPreferences
import com.looker.droidify.database.entity.Installed 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.database.entity.Repository
import com.looker.droidify.entity.Product import com.looker.droidify.entity.Product
import com.looker.droidify.entity.ProductPreference import com.looker.droidify.entity.ProductPreference
import com.looker.droidify.entity.Release
import com.looker.droidify.network.CoilDownloader import com.looker.droidify.network.CoilDownloader
import com.looker.droidify.screen.ScreenshotsAdapter import com.looker.droidify.screen.ScreenshotsAdapter
import com.looker.droidify.utility.KParcelable import com.looker.droidify.utility.KParcelable
@ -1412,13 +1412,6 @@ class AppDetailAdapter(private val callbacks: Callbacks) :
holder.packageName.text = item.packageName holder.packageName.text = item.packageName
} }
}::class }::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' } val first = builder.indexOfFirst { it != '\n' }
if (last >= 0) { if (last >= 0) {
builder.delete(last + 1, builder.length) 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.google.android.material.dialog.MaterialAlertDialogBuilder
import com.looker.droidify.R import com.looker.droidify.R
import com.looker.droidify.content.ProductPreferences import com.looker.droidify.content.ProductPreferences
import com.looker.droidify.database.entity.Release
import com.looker.droidify.database.entity.Repository import com.looker.droidify.database.entity.Repository
import com.looker.droidify.entity.Product import com.looker.droidify.entity.Product
import com.looker.droidify.entity.ProductPreference import com.looker.droidify.entity.ProductPreference
import com.looker.droidify.entity.Release
import com.looker.droidify.installer.AppInstaller import com.looker.droidify.installer.AppInstaller
import com.looker.droidify.screen.MessageDialog import com.looker.droidify.screen.MessageDialog
import com.looker.droidify.screen.ScreenFragment import com.looker.droidify.screen.ScreenFragment