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

Commit f4791934 authored by Nihar Thakkar's avatar Nihar Thakkar
Browse files

Create structure to handle networking errors

parent 226bcf1c
Loading
Loading
Loading
Loading
+22 −2
Original line number Diff line number Diff line
@@ -4,8 +4,13 @@ import com.fasterxml.jackson.annotation.JsonCreator
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.ObjectMapper
import io.eelo.appinstaller.application.model.data.FullData
import io.eelo.appinstaller.utils.Error
import io.eelo.appinstaller.utils.Constants
import java.io.IOException
import java.lang.Exception
import java.net.SocketTimeoutException
import java.net.URL
import javax.net.ssl.HttpsURLConnection

class AppDetailRequest(private val id: String) {

@@ -13,8 +18,23 @@ class AppDetailRequest(private val id: String) {
        private val reader = ObjectMapper().readerFor(Result::class.java)
    }

    fun request(): FullData {
        return reader.readValue<Result>(URL(Constants.BASE_URL + "apps?action=app_detail&id=$id")).app
    fun request(callback: (Error?, FullData?) -> Unit) {
        try {
            val url = URL(Constants.BASE_URL + "apps?action=app_detail&id=$id")
            val urlConnection = url.openConnection() as HttpsURLConnection
            urlConnection.requestMethod = Constants.REQUEST_METHOD
            urlConnection.connectTimeout = Constants.CONNECT_TIMEOUT
            urlConnection.readTimeout = Constants.READ_TIMEOUT
            val result = reader.readValue<Result>(urlConnection.inputStream)
            urlConnection.disconnect()
            callback.invoke(null, result.app)
        } catch (e: SocketTimeoutException) {
            callback.invoke(Error.REQUEST_TIMEOUT, null)
        } catch (e: IOException) {
            callback.invoke(Error.SERVER_UNAVAILABLE, null)
        } catch (e: Exception) {
            callback.invoke(Error.UNKNOWN, null)
        }
    }

    class Result @JsonCreator
+22 −2
Original line number Diff line number Diff line
@@ -8,9 +8,14 @@ import com.fasterxml.jackson.databind.ObjectMapper
import io.eelo.appinstaller.application.model.Application
import io.eelo.appinstaller.application.model.InstallManager
import io.eelo.appinstaller.application.model.data.FullData
import io.eelo.appinstaller.utils.Error
import io.eelo.appinstaller.utils.ApplicationParser
import io.eelo.appinstaller.utils.Constants
import java.io.IOException
import java.lang.Exception
import java.net.SocketTimeoutException
import java.net.URL
import javax.net.ssl.HttpsURLConnection

class HomeRequest {

@@ -18,8 +23,23 @@ class HomeRequest {
        private val reader = ObjectMapper().readerFor(HomeResult::class.java)
    }

    fun request(): HomeResult {
        return reader.readValue(URL(Constants.BASE_URL + "apps?action=list_home"))
    fun request(callback: (Error?, HomeResult?) -> Unit) {
        try {
            val url = URL(Constants.BASE_URL + "apps?action=list_home")
            val urlConnection = url.openConnection() as HttpsURLConnection
            urlConnection.requestMethod = Constants.REQUEST_METHOD
            urlConnection.connectTimeout = Constants.CONNECT_TIMEOUT
            urlConnection.readTimeout = Constants.READ_TIMEOUT
            val result = reader.readValue<HomeResult>(urlConnection.inputStream)
            urlConnection.disconnect()
            callback.invoke(null, result)
        } catch (e: SocketTimeoutException) {
            callback.invoke(Error.REQUEST_TIMEOUT, null)
        } catch (e: IOException) {
            callback.invoke(Error.SERVER_UNAVAILABLE, null)
        } catch (e: Exception) {
            callback.invoke(Error.UNKNOWN, null)
        }
    }

    class HomeResult @JsonCreator
+22 −2
Original line number Diff line number Diff line
@@ -7,9 +7,14 @@ import com.fasterxml.jackson.databind.ObjectMapper
import io.eelo.appinstaller.application.model.Application
import io.eelo.appinstaller.application.model.InstallManager
import io.eelo.appinstaller.application.model.data.FullData
import io.eelo.appinstaller.utils.Error
import io.eelo.appinstaller.utils.ApplicationParser
import io.eelo.appinstaller.utils.Constants
import java.io.IOException
import java.lang.Exception
import java.net.SocketTimeoutException
import java.net.URL
import javax.net.ssl.HttpsURLConnection

class ListApplicationsRequest(private val category: String, private val page: Int, private val resultsPerPage: Int) {

@@ -17,8 +22,23 @@ class ListApplicationsRequest(private val category: String, private val page: In
        private val reader = ObjectMapper().readerFor(ListApplicationsResult::class.java)
    }

    fun request(): ListApplicationsResult {
        return reader.readValue(URL(Constants.BASE_URL + "apps?action=list_apps&category=$category&nres=$resultsPerPage&page=$page"))
    fun request(callback: (Error?, ListApplicationsResult?) -> Unit) {
        try {
            val url = URL(Constants.BASE_URL + "apps?action=list_apps&category=$category&nres=$resultsPerPage&page=$page")
            val urlConnection = url.openConnection() as HttpsURLConnection
            urlConnection.requestMethod = Constants.REQUEST_METHOD
            urlConnection.connectTimeout = Constants.CONNECT_TIMEOUT
            urlConnection.readTimeout = Constants.READ_TIMEOUT
            val result = reader.readValue<ListApplicationsResult>(urlConnection.inputStream)
            urlConnection.disconnect()
            callback.invoke(null, result)
        } catch (e: SocketTimeoutException) {
            callback.invoke(Error.REQUEST_TIMEOUT, null)
        } catch (e: IOException) {
            callback.invoke(Error.SERVER_UNAVAILABLE, null)
        } catch (e: Exception) {
            callback.invoke(Error.UNKNOWN, null)
        }
    }

    class ListApplicationsResult @JsonCreator
+22 −2
Original line number Diff line number Diff line
@@ -3,8 +3,13 @@ package io.eelo.appinstaller.api
import com.fasterxml.jackson.annotation.JsonCreator
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.ObjectMapper
import io.eelo.appinstaller.utils.Error
import io.eelo.appinstaller.utils.Constants
import java.io.IOException
import java.lang.Exception
import java.net.SocketTimeoutException
import java.net.URL
import javax.net.ssl.HttpsURLConnection

class ListCategoriesRequest {

@@ -12,8 +17,23 @@ class ListCategoriesRequest {
        private val reader = ObjectMapper().readerFor(ListCategoriesResult::class.java)
    }

    fun request(): ListCategoriesResult {
        return reader.readValue<ListCategoriesResult>(URL(Constants.BASE_URL + "apps?action=list_cat"))
    fun request(callback: (Error?, ListCategoriesResult?) -> Unit) {
        try {
            val url = URL(Constants.BASE_URL + "apps?action=list_cat")
            val urlConnection = url.openConnection() as HttpsURLConnection
            urlConnection.requestMethod = Constants.REQUEST_METHOD
            urlConnection.connectTimeout = Constants.CONNECT_TIMEOUT
            urlConnection.readTimeout = Constants.READ_TIMEOUT
            val result = reader.readValue<ListCategoriesResult>(urlConnection.inputStream)
            urlConnection.disconnect()
            callback.invoke(null, result)
        } catch (e: SocketTimeoutException) {
            callback.invoke(Error.REQUEST_TIMEOUT, null)
        } catch (e: IOException) {
            callback.invoke(Error.SERVER_UNAVAILABLE, null)
        } catch (e: Exception) {
            callback.invoke(Error.UNKNOWN, null)
        }
    }

    class ListCategoriesResult @JsonCreator
+21 −2
Original line number Diff line number Diff line
@@ -4,8 +4,12 @@ import com.fasterxml.jackson.annotation.JsonCreator
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.ObjectMapper
import io.eelo.appinstaller.application.model.data.FullData
import io.eelo.appinstaller.utils.Error
import io.eelo.appinstaller.utils.Constants
import java.io.IOException
import java.net.SocketTimeoutException
import java.net.URL
import javax.net.ssl.HttpsURLConnection

class PackageNameSearchRequest(private val packageName: String) {

@@ -13,8 +17,23 @@ class PackageNameSearchRequest(private val packageName: String) {
        private val reader = ObjectMapper().readerFor(SearchResult::class.java)
    }

    fun request(): SearchResult {
        return reader.readValue(URL(Constants.BASE_URL + "apps?action=search&keyword=$packageName&by=package_name"))
    fun request(callback: (Error?, SearchResult?) -> Unit) {
        try {
            val url = URL(Constants.BASE_URL + "apps?action=search&keyword=$packageName&by=package_name")
            val urlConnection = url.openConnection() as HttpsURLConnection
            urlConnection.requestMethod = Constants.REQUEST_METHOD
            urlConnection.connectTimeout = Constants.CONNECT_TIMEOUT
            urlConnection.readTimeout = Constants.READ_TIMEOUT
            val result = reader.readValue<SearchResult>(urlConnection.inputStream)
            urlConnection.disconnect()
            callback.invoke(null, result)
        } catch (e: SocketTimeoutException) {
            callback.invoke(Error.REQUEST_TIMEOUT, null)
        } catch (e: IOException) {
            callback.invoke(Error.SERVER_UNAVAILABLE, null)
        } catch (e: Exception) {
            callback.invoke(Error.UNKNOWN, null)
        }
    }

    class SearchResult @JsonCreator
Loading