diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/MoGoUpgradeProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/MoGoUpgradeProviderImpl.kt index 981979edfe..cf731d2385 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/MoGoUpgradeProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/MoGoUpgradeProviderImpl.kt @@ -22,105 +22,79 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider { override fun init(context: Context?) {} override suspend fun recordUpgradeRecord(sn: String, mac: String, type: String?) { - UpgradeDbHelper.insertRecord(Record(AppUtils.getAppVersionName(), sn, mac, type)) + UpgradeDbHelper.insertRecord(Record(AppUtils.getAppVersionName(), sn, mac, type, time = System.currentTimeMillis())) } override suspend fun recordUpgradeRequestStart() { - UpgradeDbHelper.insertCheckRecord(CheckRecord(AppUtils.getAppVersionName(), START)) + UpgradeDbHelper.insertCheckRecord(CheckRecord(AppUtils.getAppVersionName(), START, time = System.currentTimeMillis())) } override suspend fun recordUpgradeRequestSuccess(response: String) { - UpgradeDbHelper.insertCheckRecord(CheckRecord(AppUtils.getAppVersionName(), SUCCESS, response)) + UpgradeDbHelper.insertCheckRecord(CheckRecord(AppUtils.getAppVersionName(), SUCCESS, response, time = System.currentTimeMillis())) } override suspend fun recordUpgradeRequestFailed(error: String) { - UpgradeDbHelper.insertCheckRecord(CheckRecord(AppUtils.getAppVersionName(), FAIL, error)) + UpgradeDbHelper.insertCheckRecord(CheckRecord(AppUtils.getAppVersionName(), FAIL, error, time = System.currentTimeMillis())) } override suspend fun recordUpgradeRecord(newVersionName: String, newMd5: String?, type: Int) { - UpgradeDbHelper.insertUpgradeRecord(UpgradeRecord(fromVersionName = AppUtils.getAppVersionName(), toVersionName = newVersionName, fromMd5 = AppUtils.getAppApkMd5(), toMD5 = newMd5, type = getType(type))) + UpgradeDbHelper.insertUpgradeRecord(UpgradeRecord(fromVersionName = AppUtils.getAppVersionName(), toVersionName = newVersionName, fromMd5 = AppUtils.getAppApkMd5(), toMD5 = newMd5, type = getType(type), time = System.currentTimeMillis())) } override suspend fun recordDownloadStart(downloadUrl: String) { - UpgradeDbHelper.insertDownloadRecord(DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadStart, downloadUrl = downloadUrl)) + UpgradeDbHelper.insertDownloadRecord(DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadStart, downloadUrl = downloadUrl, time = System.currentTimeMillis())) } override suspend fun recordDownloadFailed(downloadUrl: String, error: String) { - UpgradeDbHelper.insertDownloadRecord(DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadFailed, failReason = error, downloadUrl = downloadUrl)) + UpgradeDbHelper.insertDownloadRecord(DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadFailed, failReason = error, downloadUrl = downloadUrl, time = System.currentTimeMillis())) } override suspend fun recordDownloadSuccess(downloadUrl: String) { - UpgradeDbHelper.insertDownloadRecord(DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadComplete, downloadUrl = downloadUrl)) + UpgradeDbHelper.insertDownloadRecord(DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadComplete, downloadUrl = downloadUrl, time = System.currentTimeMillis())) } override suspend fun recordInstallStart() { - UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = InstallStart)) + UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = InstallStart, time = System.currentTimeMillis())) } override suspend fun recordSourceMd5CheckStart() { - UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = SourceMd5CheckStart)) + UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = SourceMd5CheckStart, time = System.currentTimeMillis())) } override suspend fun recordSourceMd5CheckFailed(error: String) { - UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = SourceMd5CheckFailed, failReason = error)) + UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = SourceMd5CheckFailed, failReason = error, time = System.currentTimeMillis())) } override suspend fun recordSourceMd5CheckSuccess() { - UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = SourceMd5CheckSuccess)) + UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = SourceMd5CheckSuccess, time = System.currentTimeMillis())) } override suspend fun recordInstallApplyPatchStart() { - UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = ApplyPatchStart)) + UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = ApplyPatchStart, time = System.currentTimeMillis())) } override suspend fun recordInstallApplyPatchFailed(error: String) { - UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = ApplyPatchFailed, failReason = error)) + UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = ApplyPatchFailed, failReason = error, time = System.currentTimeMillis())) } override suspend fun recordInstallApplyPatchSuccess() { - UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = ApplyPatchSuccess)) + UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = ApplyPatchSuccess, time = System.currentTimeMillis())) } override suspend fun recordTargetMd5CheckStart() { - UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = TargetMd5CheckStart)) + UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = TargetMd5CheckStart, time = System.currentTimeMillis())) } override suspend fun recordTargetMd5CheckFailed(error: String) { - UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = TargetMd5CheckFailed, failReason = error)) + UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = TargetMd5CheckFailed, failReason = error, time = System.currentTimeMillis())) } override suspend fun recordTargetMd5CheckSuccess() { - UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = TargetMd5CheckSuccess)) + UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = TargetMd5CheckSuccess, time = System.currentTimeMillis())) } override suspend fun recordInstallFailed(code: Int, error: String) { - UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = InstallFailed, code = code, failReason = error)) - } - - override suspend fun isUpgradeSuccess(type: Int): Boolean { - val currentVersion = AppUtils.getAppVersionName() - val record = UpgradeDbHelper.getUpgradeRecordFull(currentVersion) - val toType = if (type == 0) FULL else PATCH - if (record != null) { - return (record.upgrades?.find { it.type == toType } != null) && (record.installs?.find { it.status == InstallSuccess } != null) - } - val records = UpgradeDbHelper.getAllRecords() - if (records.isEmpty()) { - return false - } - records.forEach { r -> - val oldVersion = r.versionName - val q = UpgradeDbHelper.getUpgradeRecordFull(oldVersion) - val f = q?.upgrades?.find { it.toVersionName == currentVersion && it.type == toType } - if (f != null) { - val install = q.installs?.find { it.status == InstallSuccess } - if (install == null) { - UpgradeDbHelper.insertInstallRecord(InstallRecord(oldVersion, InstallSuccess, 0)) - } - return true - } - } - return false + UpgradeDbHelper.insertInstallRecord(InstallRecord(version = AppUtils.getAppVersionName(), status = InstallFailed, code = code, failReason = error, time = System.currentTimeMillis())) } override suspend fun getUpgradeRecords(): Map>>? { @@ -131,6 +105,10 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider { } val success = records.find { itx -> itx.versionName != currentVersion && (UpgradeDbHelper.getUpgradeRecordFull(itx.versionName)?.upgrades?.find { it.toVersionName == currentVersion } != null) } val fail = records.find { it.versionName == currentVersion } + val left = if (success != null && fail != null) (records - success - fail) else if (success != null) (records - success) else if (fail != null) (records - fail) else records + if (left.isNotEmpty()) { + UpgradeDbHelper.deleteRecords(left.map { it.versionName }) + } return TreeMap>>().also { itx -> if (success != null) { val all = UpgradeDbHelper.getUpgradeRecordFull(success.versionName) @@ -140,6 +118,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider { itx["step_2"] = all.upgrades?.mapIndexed { index, r -> "$index" to GsonUtils.toJson(r) } ?: emptyList() itx["step_3"] = all.downloads?.sortedBy { it.status.ordinal }?.mapIndexed { index, r -> "$index" to GsonUtils.toJson(r) } ?: emptyList() itx["step_4"] = all.installs?.let { ArrayList(it) + InstallRecord(success.versionName, InstallSuccess, 0) }?.sortedBy { it.status.ordinal }?.mapIndexed { index, r -> "$index" to GsonUtils.toJson(r) } ?: emptyList() + return@also } } if (fail != null) { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/UpgradeDbHelper.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/UpgradeDbHelper.kt index 9135cbec5d..80d6a1408b 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/UpgradeDbHelper.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/UpgradeDbHelper.kt @@ -71,4 +71,10 @@ internal object UpgradeDbHelper { } catch (e: Exception) { e.printStackTrace() } + + suspend fun deleteRecords(versions: List) = try { + db.dao().deleteRecords(versions) + } catch (e: Exception) { + e.printStackTrace() + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/dao/IUpgradeRecordDao.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/dao/IUpgradeRecordDao.kt index 85439d43f4..e9a75d7be6 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/dao/IUpgradeRecordDao.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/dao/IUpgradeRecordDao.kt @@ -44,4 +44,8 @@ internal interface IUpgradeRecordDao { @Query("SELECT * FROM records") suspend fun getAllRecords(): List + + @Query("DELETE FROM records WHERE version_name IN (:versions)") + @Transaction + suspend fun deleteRecords(versions: List) } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/vo/Vo.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/vo/Vo.kt index f7cf8e8d1a..deeb37932b 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/vo/Vo.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/vo/Vo.kt @@ -11,7 +11,8 @@ data class Record( var versionName: String, var sn: String, var mac: String, - var type: String? + var type: String?, + var time: Long = 0L ) @Entity(tableName = "check_upgrade_record",foreignKeys = [ @@ -34,6 +35,7 @@ data class CheckRecord( var status: Status, var message: String? = null, + var time: Long = 0L ) { @PrimaryKey(autoGenerate = true) var id: Long = 0L @@ -84,7 +86,9 @@ data class UpgradeRecord( var toMD5: String?, @field:TypeConverters(Type::class) - var type: Type + var type: Type, + + var time: Long = 0L ) { @PrimaryKey(autoGenerate = true) @@ -134,7 +138,9 @@ data class DownloadRecord( var status: Status, @ColumnInfo(name = "reason") - var failReason: String? = null + var failReason: String? = null, + + var time: Long = 0L ) { @PrimaryKey(autoGenerate = true) @@ -188,7 +194,9 @@ data class InstallRecord( var code: Int = 0, @ColumnInfo(name = "reason") - var failReason: String? = null + var failReason: String? = null, + + var time: Long = 0L ) { @PrimaryKey(autoGenerate = true) diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/upgrade/IMoGoUpgradeProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/upgrade/IMoGoUpgradeProvider.kt index 8918ae577d..04083d4c87 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/upgrade/IMoGoUpgradeProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/upgrade/IMoGoUpgradeProvider.kt @@ -42,8 +42,6 @@ interface IMoGoUpgradeProvider: IProvider { suspend fun recordInstallFailed(code: Int, error: String) - suspend fun isUpgradeSuccess(type: Int): Boolean - suspend fun getUpgradeRecords(): Map>>? suspend fun hasUpgradeRecord(): Boolean diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ApkInstaller.kt b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ApkInstaller.kt index d962921066..a6e1a90e5e 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ApkInstaller.kt +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/ApkInstaller.kt @@ -150,12 +150,12 @@ class InstallApkSessionApi: AppCompatActivity() { STATUS_FAILURE_INVALID, STATUS_FAILURE_STORAGE -> { Toast.makeText(this, "Install failed! $status, $message", Toast.LENGTH_SHORT).show() - listener?.invoke(status, "安装失败") + listener?.invoke(status, message ?: "安装失败") finish() listener = null } else -> { - status?.also { listener?.invoke(it, "未知状态") } + status?.also { listener?.invoke(it, message ?: "未知状态") } Toast.makeText(this, "Unrecognized status received from installer: $status", Toast.LENGTH_SHORT).show() finish() listener = null