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

Commit 41994fa2 authored by Jonathan Klee's avatar Jonathan Klee
Browse files

fix: prevent potential fdroid metadata request IOException crash

parent d0fe175b
Loading
Loading
Loading
Loading
+19 −3
Original line number Diff line number Diff line
@@ -5,7 +5,12 @@ import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.cleanapk.ApkSignatureManager
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.fdroid.models.BuildInfo
import foundation.e.apps.data.fdroid.models.FdroidApiModel
import foundation.e.apps.data.fdroid.models.FdroidEntity
import kotlinx.coroutines.CancellationException
import retrofit2.Response
import timber.log.Timber
import java.io.IOException
import javax.inject.Inject
import javax.inject.Singleton

@@ -29,7 +34,7 @@ class FDroidRepository @Inject constructor(
     */
    override suspend fun getFdroidInfo(packageName: String): FdroidEntity? {
        return fdroidDao.getFdroidEntityFromPackageName(packageName)
            ?: fdroidApi.getFdroidInfoForPackage(packageName).body()?.let {
            ?: getFdroidApiResponse(packageName)?.body()?.let {
                FdroidEntity(packageName, it.authorName).also {
                    fdroidDao.saveFdroidEntity(it)
                }
@@ -37,7 +42,7 @@ class FDroidRepository @Inject constructor(
    }

    suspend fun getBuildVersionInfo(packageName: String): List<BuildInfo>? {
        return fdroidApi.getFdroidInfoForPackage(packageName).body()?.builds
        return getFdroidApiResponse(packageName)?.body()?.builds
    }

    override suspend fun getAuthorName(application: Application): String {
@@ -69,6 +74,17 @@ class FDroidRepository @Inject constructor(
    }

    override suspend fun isFdroidApplication(packageName: String): Boolean {
        return fdroidApi.getFdroidInfoForPackage(packageName).isSuccessful
        return getFdroidApiResponse(packageName)?.isSuccessful == true
    }

    private suspend fun getFdroidApiResponse(packageName: String): Response<FdroidApiModel?>? {
        return try {
            fdroidApi.getFdroidInfoForPackage(packageName)
        } catch (exception: CancellationException) {
            throw exception
        } catch (exception: IOException) {
            Timber.w(exception, "Failed to fetch F-Droid metadata for %s", packageName)
            null
        }
    }
}