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

Commit bf6a977e authored by Hasib Prince's avatar Hasib Prince
Browse files

App Lounge: Conflict resolved -> branch -> issue_4488_rebase

parents b91f5ab3 caed975b
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
package foundation.e.apps.api

import retrofit2.Response

suspend fun <T> getResult(apiCall: suspend () -> Response<T>): Result<T> {
    return try {
        fetchResult(apiCall())
    } catch (e: Exception) {
        Result.error(e.message ?: e.toString())
    }
}

private fun <T> fetchResult(response: Response<T>): Result<T> {
    if (response.isSuccessful) {
        response.body()?.let {
            return Result.success(it)
        }
    }

    return Result.error(response.message(), response.body())
}
+46 −0
Original line number Diff line number Diff line
package foundation.e.apps.api

data class Result<T>(val status: Status, val data: T?, val message: String?) {

    enum class Status {
        SUCCESS,
        ERROR,
        LOADING
    }

    companion object {
        fun <T> success(data: T): Result<T> {
            return Result(
                Status.SUCCESS,
                data,
                null
            )
        }

        fun <T> error(message: String, data: T? = null): Result<T> {
            return Result(
                Status.ERROR,
                data,
                message
            )
        }

        fun <T> loading(data: T? = null): Result<T> {
            return Result(
                Status.LOADING,
                data,
                null
            )
        }
    }

    fun isSuccess() = status == Status.SUCCESS

    fun handleResult(handler: () -> Unit, defaultErrorData: T?): T? {
        if (isSuccess()) {
            handler()
            return data ?: defaultErrorData
        }
        return defaultErrorData
    }
}
+12 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import foundation.e.apps.api.exodus.ExodusTrackerApi
import okhttp3.Cache
import okhttp3.Interceptor
import okhttp3.OkHttpClient
@@ -49,6 +50,17 @@ object RetrofitModule {
            .create(CleanAPKInterface::class.java)
    }

    @Singleton
    @Provides
    fun provideExodusApi(okHttpClient: OkHttpClient): ExodusTrackerApi {
        return Retrofit.Builder()
            .baseUrl(ExodusTrackerApi.BASE_URL)
            .client(okHttpClient)
            .addConverterFactory(MoshiConverterFactory.create())
            .build()
            .create(ExodusTrackerApi::class.java)
    }

    @Singleton
    @Provides
    fun provideInterceptor(): Interceptor {
+33 −0
Original line number Diff line number Diff line
package foundation.e.apps.api.database

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import foundation.e.apps.api.exodus.Tracker
import foundation.e.apps.api.exodus.TrackerDao

@Database(
    entities = [Tracker::class],
    version = 1,
    exportSchema = false
)
abstract class AppDatabase : RoomDatabase() {
    abstract fun trackerDao(): TrackerDao

    companion object {
        private lateinit var INSTANCE: AppDatabase

        fun getInstance(context: Context): AppDatabase {
            if (!Companion::INSTANCE.isInitialized) {
                synchronized(AppDatabase::class) {
                    INSTANCE =
                        Room.databaseBuilder(context, AppDatabase::class.java, "App_Lounge")
                            .fallbackToDestructiveMigration()
                            .build()
                }
            }
            return INSTANCE
        }
    }
}
+19 −0
Original line number Diff line number Diff line
package foundation.e.apps.api.exodus

import retrofit2.Response
import retrofit2.http.GET
import retrofit2.http.Path

interface ExodusTrackerApi {

    companion object {
        const val BASE_URL = "https://exodus.ecloud.global/api/"
        const val VERSION = "190239"
    }

    @GET("trackers?v=$VERSION")
    suspend fun getTrackerList(): Response<Trackers>

    @GET("search/{appHandle}")
    suspend fun getTrackerInfoOfApp(@Path("appHandle") appHandle: String): Response<Map<String, TrackerInfo>>
}
Loading