Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Verified Commit f64f8143 authored by Fahim M. Choudhury's avatar Fahim M. Choudhury
Browse files

refactor: improve readability on InstallStatusReconciler

parent b520cef5
Loading
Loading
Loading
Loading
+33 −13
Original line number Diff line number Diff line
@@ -78,21 +78,41 @@ class InstallStatusReconciler @Inject constructor(
        if (progress == null) {
            return null
        }

        val percent = appManagerWrapper.calculateProgress(activeDownload, progress)
        var result: Int? = percent.takeIf { it in 0..PERCENTAGE_MAX }
        if (result == null) {
            val id = progress.downloadId.takeIf { it != INVALID_DOWNLOAD_ID }
            val hasDownloadId = id != null && activeDownload.downloadIdMap.containsKey(id)
            if (hasDownloadId) {
                val total = progress.totalSizeBytes[id] ?: 0L
                if (total > 0) {
                    val done = progress.bytesDownloadedSoFar[id] ?: 0L
                    result = ((done / total.toDouble()) * PERCENTAGE_MAX)
                        .toInt()
                        .coerceIn(0, PERCENTAGE_MAX)
        val downloadId = progress.downloadId.takeIf { it != INVALID_DOWNLOAD_ID }
        val hasDownloadId =
            downloadId != null && activeDownload.downloadIdMap.containsKey(downloadId)

        val result = if (percent in 0..PERCENTAGE_MAX) {
            percent
        } else {
            calculatePercent(progress, downloadId, hasDownloadId)
        }

        return result
    }

    private fun calculatePercent(
        progress: DownloadProgress,
        downloadId: Long?,
        hasDownloadId: Boolean,
    ): Int? {
        val total = if (hasDownloadId && downloadId != null) {
            progress.totalSizeBytes[downloadId] ?: 0L
        } else {
            0L
        }

        val result = if (total > 0 && downloadId != null) {
            val done = progress.bytesDownloadedSoFar[downloadId] ?: 0L
            ((done / total.toDouble()) * PERCENTAGE_MAX)
                .toInt()
                .coerceIn(0, PERCENTAGE_MAX)
        } else {
            null
        }

        return result
    }