diff --git a/app/src/main/java/net/underdesk/circolapp/fragments/CircularLetterFragment.kt b/app/src/main/java/net/underdesk/circolapp/fragments/CircularLetterFragment.kt index f1622c8..e17ba41 100644 --- a/app/src/main/java/net/underdesk/circolapp/fragments/CircularLetterFragment.kt +++ b/app/src/main/java/net/underdesk/circolapp/fragments/CircularLetterFragment.kt @@ -75,14 +75,16 @@ class CircularLetterFragment : circularLetterViewModel.showMessage.observe( viewLifecycleOwner, { - if (it) activity?.findViewById(R.id.container)?.let { view -> + if (it < 0) activity?.findViewById(R.id.container)?.let { view -> + val message = if (it == -1) getString(R.string.snackbar_generic_error) else getString(R.string.snackbar_connection_not_available) + Snackbar.make( view, - getString(R.string.snackbar_connection_not_available), + message, Snackbar.LENGTH_LONG ).show() - circularLetterViewModel.showMessage.postValue(false) + circularLetterViewModel.showMessage.postValue(0) } } ) @@ -91,8 +93,6 @@ class CircularLetterFragment : { if (it) { binding.circularsRefresh.isRefreshing = false - - circularLetterViewModel.showMessage.postValue(false) } } ) diff --git a/app/src/main/java/net/underdesk/circolapp/viewmodels/CircularLetterViewModel.kt b/app/src/main/java/net/underdesk/circolapp/viewmodels/CircularLetterViewModel.kt index 4694044..81e021c 100644 --- a/app/src/main/java/net/underdesk/circolapp/viewmodels/CircularLetterViewModel.kt +++ b/app/src/main/java/net/underdesk/circolapp/viewmodels/CircularLetterViewModel.kt @@ -49,7 +49,7 @@ class CircularLetterViewModel internal constructor( } } - val showMessage = MutableLiveData().apply { value = false } + val showMessage = MutableLiveData().apply { value = 0 } val circularsUpdated = MutableLiveData().apply { value = false } private var isNotUpdating = true @@ -65,9 +65,8 @@ class CircularLetterViewModel internal constructor( viewModelScope.launch { isNotUpdating = false - if (circularRepository.updateCirculars(false).second == -1) { - showMessage.postValue(true) - } + val result = circularRepository.updateCirculars(false).second + showMessage.postValue(result) isNotUpdating = true circularsUpdated.postValue(true) diff --git a/app/src/main/java/net/underdesk/circolapp/works/PollWork.kt b/app/src/main/java/net/underdesk/circolapp/works/PollWork.kt index 1c36792..cd42c53 100644 --- a/app/src/main/java/net/underdesk/circolapp/works/PollWork.kt +++ b/app/src/main/java/net/underdesk/circolapp/works/PollWork.kt @@ -83,7 +83,9 @@ class PollWork(appContext: Context, workerParams: WorkerParameters) : val circularRepository = AndroidCircularRepository.getInstance(applicationContext) val result = circularRepository.updateCirculars() - if (result.second == -1) + + // Retry only if it's a network error, otherwise there is probably an issue with the parser code which can only be solved with an update + if (result.second == -2) return@coroutineScope Result.retry() val newCirculars = result.first diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 2818300..ab0392f 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -77,6 +77,7 @@ La circolare sarà salvata nella cartella Download Rete non disponibile. I risultati potrebbero non essere aggiornati + Si è verificato un errore Visualizza allegato Condividi allegato diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c4d2324..111f73d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -78,6 +78,7 @@ The circular letter will be saved into the download folder Network not available. Results may be outdated + An error has occurred View attachment Share attachment diff --git a/backend/src/main/kotlin/net/underdesk/circolapp/backend/ServerUtils.kt b/backend/src/main/kotlin/net/underdesk/circolapp/backend/ServerUtils.kt index 813d6bc..4833c11 100644 --- a/backend/src/main/kotlin/net/underdesk/circolapp/backend/ServerUtils.kt +++ b/backend/src/main/kotlin/net/underdesk/circolapp/backend/ServerUtils.kt @@ -45,8 +45,10 @@ class ServerUtils { var errorCode = 0 val result = server.getCircularsFromServer() - if (result.second == ServerAPI.Companion.Result.ERROR) + if (result.second == ServerAPI.Companion.Result.GENERIC_ERROR) return Pair(emptyList(), -1) + if (result.second == ServerAPI.Companion.Result.NETWORK_ERROR) + return Pair(emptyList(), -2) val oldCirculars = circularDao.getCirculars(server.serverID) val newCirculars = result.first @@ -71,7 +73,7 @@ class ServerUtils { private suspend fun checkServer(server: Server) { val newCirculars = updateCirculars(server) - if (newCirculars.second != -1 && newCirculars.first.isNotEmpty()) { + if (newCirculars.second >= 0 && newCirculars.first.isNotEmpty()) { for (circular in newCirculars.first) { PushNotificationUtils.createPushNotification( circular, diff --git a/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/data/CircularRepository.kt b/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/data/CircularRepository.kt index b4d3b23..8f2c316 100644 --- a/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/data/CircularRepository.kt +++ b/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/data/CircularRepository.kt @@ -11,9 +11,13 @@ class CircularRepository( var errorCode = 0 val result = serverAPI.getCircularsFromServer() - if (result.second == ServerAPI.Companion.Result.ERROR) + + if (result.second == ServerAPI.Companion.Result.GENERIC_ERROR) return Pair(emptyList(), -1) + if (result.second == ServerAPI.Companion.Result.NETWORK_ERROR) + return Pair(emptyList(), -2) + val oldCirculars = circularDao.getCirculars(serverAPI.serverID()) val newCirculars = result.first diff --git a/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/server/ServerAPI.kt b/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/server/ServerAPI.kt index af89991..0baa272 100644 --- a/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/server/ServerAPI.kt +++ b/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/server/ServerAPI.kt @@ -38,8 +38,11 @@ class ServerAPI(serverName: Servers) { suspend fun getCircularsFromServer(): Pair, Result> = withContext(PlatformDispatcher.IO) { val newCircularsAvailable = server.newCircularsAvailable() - if (newCircularsAvailable.second == Result.ERROR) - return@withContext Pair(emptyList(), Result.ERROR) + if (newCircularsAvailable.second == Result.GENERIC_ERROR) + return@withContext Pair(emptyList(), Result.GENERIC_ERROR) + + if (newCircularsAvailable.second == Result.NETWORK_ERROR) + return@withContext Pair(emptyList(), Result.NETWORK_ERROR) if (!newCircularsAvailable.first) return@withContext Pair(emptyList(), Result.SUCCESS) @@ -57,7 +60,7 @@ class ServerAPI(serverName: Servers) { } enum class Result { - SUCCESS, ERROR + SUCCESS, NETWORK_ERROR, GENERIC_ERROR } val numberOfServers = Servers.values().size diff --git a/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/server/curie/CurieServer.kt b/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/server/curie/CurieServer.kt index d1d5560..15874a0 100644 --- a/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/server/curie/CurieServer.kt +++ b/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/server/curie/CurieServer.kt @@ -22,7 +22,9 @@ class CurieServer(ktorClient: HttpClient) : Server(ktorClient) { Pair(list, ServerAPI.Companion.Result.SUCCESS) } } catch (exception: IOException) { - Pair(emptyList(), ServerAPI.Companion.Result.ERROR) + Pair(emptyList(), ServerAPI.Companion.Result.NETWORK_ERROR) + } catch (exception: Exception) { + Pair(emptyList(), ServerAPI.Companion.Result.GENERIC_ERROR) } } diff --git a/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/server/porporato/PorporatoServer.kt b/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/server/porporato/PorporatoServer.kt index 1990f7f..baa3f93 100644 --- a/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/server/porporato/PorporatoServer.kt +++ b/shared/src/commonMain/kotlin/net/underdesk/circolapp/shared/server/porporato/PorporatoServer.kt @@ -43,7 +43,9 @@ class PorporatoServer(ktorClient: HttpClient) : Server(ktorClient) { Pair(list, ServerAPI.Companion.Result.SUCCESS) } catch (exception: IOException) { - Pair(emptyList(), ServerAPI.Companion.Result.ERROR) + Pair(emptyList(), ServerAPI.Companion.Result.NETWORK_ERROR) + } catch (exception: Exception) { + Pair(emptyList(), ServerAPI.Companion.Result.GENERIC_ERROR) } }