From 27465a086dc87f308e6218a6842dc45c9e63a7a4 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Sun, 7 Jan 2018 13:17:53 +0100 Subject: [PATCH] Add displaying more specific api errors. Now app will show more specific api errors to user. Signed-off-by: Yahor Berdnikau --- .../ultrasonic/service/RESTMusicService.java | 2 +- .../service/parser/SubsonicRESTException.java | 33 ++++++++-------- .../moire/ultrasonic/util/BackgroundTask.java | 6 +++ .../ultrasonic/subsonic/RestErrorMapper.kt | 38 +++++++++++++++++++ ultrasonic/src/main/res/values-es/strings.xml | 16 ++++++-- ultrasonic/src/main/res/values-fr/strings.xml | 16 ++++++-- ultrasonic/src/main/res/values-hu/strings.xml | 16 ++++++-- .../src/main/res/values-pt-rBR/strings.xml | 16 ++++++-- ultrasonic/src/main/res/values-pt/strings.xml | 16 ++++++-- ultrasonic/src/main/res/values/strings.xml | 16 ++++++-- 10 files changed, 134 insertions(+), 41 deletions(-) create mode 100644 ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/RestErrorMapper.kt diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java index 6b269680..41b57e72 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java @@ -698,7 +698,7 @@ public class RESTMusicService implements MusicService { throws SubsonicRESTException, IOException { if (response.hasError() || response.getStream() == null) { if (response.getApiError() != null) { - throw new SubsonicRESTException(response.getApiError().getCode(), "rest error"); + throw new SubsonicRESTException(response.getApiError()); } else { throw new IOException("Failed to make endpoint request, code: " + response.getResponseHttpCode()); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/parser/SubsonicRESTException.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/parser/SubsonicRESTException.java index abc1373f..5ffbc3dd 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/parser/SubsonicRESTException.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/parser/SubsonicRESTException.java @@ -1,26 +1,27 @@ package org.moire.ultrasonic.service.parser; +import org.moire.ultrasonic.api.subsonic.SubsonicError; + /** + * Exception returned by API with given {@code code}. + * * @author Sindre Mehus * @version $Id$ */ -public class SubsonicRESTException extends Exception -{ +public class SubsonicRESTException extends Exception { + private final SubsonicError error; - /** - * - */ - private static final long serialVersionUID = 859440717343258203L; - private final int code; + public SubsonicRESTException(final SubsonicError error) { + super("Api error: " + error.name()); + this.error = error; + } - public SubsonicRESTException(int code, String message) - { - super(message); - this.code = code; - } + public int getCode() + { + return error.getCode(); + } - public int getCode() - { - return code; - } + public SubsonicError getError() { + return error; + } } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/BackgroundTask.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/BackgroundTask.java index 76448a18..20ccf443 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/BackgroundTask.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/BackgroundTask.java @@ -24,6 +24,8 @@ import android.util.Log; import org.moire.ultrasonic.R; +import org.moire.ultrasonic.service.parser.SubsonicRESTException; +import org.moire.ultrasonic.subsonic.RestErrorMapper; import org.xmlpull.v1.XmlPullParserException; import java.io.FileNotFoundException; @@ -90,6 +92,10 @@ public abstract class BackgroundTask implements ProgressListener return activity.getResources().getString(R.string.background_task_parse_error); } + if (error instanceof SubsonicRESTException) { + return RestErrorMapper.getLocalizedErrorMessage((SubsonicRESTException) error, activity); + } + String message = error.getMessage(); if (message != null) { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/RestErrorMapper.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/RestErrorMapper.kt new file mode 100644 index 00000000..7ab5a93d --- /dev/null +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/RestErrorMapper.kt @@ -0,0 +1,38 @@ +@file:JvmName("RestErrorMapper") +package org.moire.ultrasonic.subsonic + +import android.content.Context +import org.moire.ultrasonic.R +import org.moire.ultrasonic.api.subsonic.SubsonicError.GENERIC +import org.moire.ultrasonic.api.subsonic.SubsonicError.INCOMPATIBLE_CLIENT_PROTOCOL_VERSION +import org.moire.ultrasonic.api.subsonic.SubsonicError.INCOMPATIBLE_SERVER_PROTOCOL_VERSION +import org.moire.ultrasonic.api.subsonic.SubsonicError.REQUESTED_DATA_WAS_NOT_FOUND +import org.moire.ultrasonic.api.subsonic.SubsonicError.REQUIRED_PARAM_MISSING +import org.moire.ultrasonic.api.subsonic.SubsonicError.TOKEN_AUTH_NOT_SUPPORTED_FOR_LDAP +import org.moire.ultrasonic.api.subsonic.SubsonicError.TRIAL_PERIOD_IS_OVER +import org.moire.ultrasonic.api.subsonic.SubsonicError.USER_NOT_AUTHORIZED_FOR_OPERATION +import org.moire.ultrasonic.api.subsonic.SubsonicError.WRONG_USERNAME_OR_PASSWORD +import org.moire.ultrasonic.service.parser.SubsonicRESTException + +/** + * Extension for [SubsonicRESTException] that returns localized error string, that can used to + * display error reason for user. + */ +fun SubsonicRESTException.getLocalizedErrorMessage(context: Context): String = + when (error) { + GENERIC -> context.getString(R.string.api_subsonic_generic) + REQUIRED_PARAM_MISSING -> context.getString(R.string.api_subsonic_param_missing) + INCOMPATIBLE_CLIENT_PROTOCOL_VERSION -> context + .getString(R.string.api_subsonic_upgrade_client) + INCOMPATIBLE_SERVER_PROTOCOL_VERSION -> context + .getString(R.string.api_subsonic_upgrade_server) + WRONG_USERNAME_OR_PASSWORD -> context.getString(R.string.api_subsonic_not_authenticated) + TOKEN_AUTH_NOT_SUPPORTED_FOR_LDAP -> context + .getString(R.string.api_subsonic_token_auth_not_supported_for_ldap) + USER_NOT_AUTHORIZED_FOR_OPERATION -> context + .getString(R.string.api_subsonic_not_authorized) + TRIAL_PERIOD_IS_OVER -> context.getString(R.string.api_subsonic_trial_period_is_over) + REQUESTED_DATA_WAS_NOT_FOUND -> context + .getString(R.string.api_subsonic_requested_data_was_not_found) + else -> context.getString(R.string.api_subsonic_unknown_api_error) + } diff --git a/ultrasonic/src/main/res/values-es/strings.xml b/ultrasonic/src/main/res/values-es/strings.xml index 5f633be2..ce42c741 100644 --- a/ultrasonic/src/main/res/values-es/strings.xml +++ b/ultrasonic/src/main/res/values-es/strings.xml @@ -108,12 +108,8 @@ Medios sin conexión Se ha producido un error de red. Reintento %1$d de %2$d. Obtenido(s) %d artista(s). - Nombre de usuario o contraseña incorrectos. - No autorizado. Comprueba los permisos de usuario en el servidor de Subsonic. Leyendo del servidor. Leyendo del servidor. ¡Hecho! - Versiones incompatibles. Por favor actualiza la aplicación de Android UltraSonic. - Versiones incompatibles. Por favor actualiza el servidor de Subsonic. Listas de reproducción Actualizar Información Actualizada la información de la lista de reproducción para %s @@ -426,4 +422,16 @@ Podcast No hay canales de Podcasts registrados + + Error genérico de api. + La autenticación por token no es compatible con usuarios LDAP. + Nombre de usuario o contraseña incorrectos. + No autorizado. Comprueba los permisos de usuario en el servidor de Subsonic. + Falta el parámetro requerido. + No se encontraron los datos solicitados. + El período de prueba ha terminado. + Error de api desconocido. + Versiones incompatibles. Por favor actualiza la aplicación de Android UltraSonic. + Versiones incompatibles. Por favor actualiza el servidor de Subsonic. + \ No newline at end of file diff --git a/ultrasonic/src/main/res/values-fr/strings.xml b/ultrasonic/src/main/res/values-fr/strings.xml index d32bb208..4fde27db 100644 --- a/ultrasonic/src/main/res/values-fr/strings.xml +++ b/ultrasonic/src/main/res/values-fr/strings.xml @@ -108,12 +108,8 @@ Musique hors-ligne Une erreur de réseau s\'est produite. Essai %1$d de %2$d. %d artistes récupérés. - Mauvais nom d\'usager ou mot de passe. - Non autorisé. Vérifiez les permissions de l\'utilisateur dans le serveur Subsonic. Lecture du serveur. Lecture du serveur. Terminé! - Versions incompatible. Veuillez mette à jour l\'application Android UltraSonic. - Versions incompatible. Veuillez mette à jour le serveur Subsonic. Playlists Mise à jour des informations Informations de la playlist %s mises à jour @@ -426,4 +422,16 @@ Podcast No podcasts channels registered + + Erreur api générique. + L\'authentification par jeton n\'est pas prise en charge pour les utilisateurs LDAP. + Mauvais nom d\'usager ou mot de passe. + Non autorisé. Vérifiez les permissions de l\'utilisateur dans le serveur Subsonic. + Param nécessaire manquant. + Les données demandées n\'ont pas été trouvées. + La période d\'essai est terminée. + Erreur d\'api inconnue. + Versions incompatible. Veuillez mette à jour l\'application Android UltraSonic. + Versions incompatible. Veuillez mette à jour le serveur Subsonic. + \ No newline at end of file diff --git a/ultrasonic/src/main/res/values-hu/strings.xml b/ultrasonic/src/main/res/values-hu/strings.xml index 2c561cd2..34a5e88a 100644 --- a/ultrasonic/src/main/res/values-hu/strings.xml +++ b/ultrasonic/src/main/res/values-hu/strings.xml @@ -108,12 +108,8 @@ Kapcsolat nélküli médiák Hálózati hiba történt! Újrapróbálkozás %1$d - %2$d. %d előadó található a médiakönyvtárban. - Hibás felhasználónév vagy jelszó! - Nem engedélyezett! Ellenőrizze a felhasználó jogosultságait a Subsonic kiszolgálón! Olvasás a kiszolgálóról… Olvasás a kiszolgálóról… Kész! - Nem kompatibilis verzió. Kérjük, frissítse az UltraSonic Android alkalmazást! - Nem kompatibilis verzió. Kérjük, frissítse a Subsonic kiszolgálót! Lejátszási listák Módosítás Módosított lejátszási lista %s @@ -426,4 +422,16 @@ Podcast No podcasts channels registered + + Általános api hiba. + Az LDAP-felhasználók számára nem támogatott a token-hitelesítés. + Hibás felhasználónév vagy jelszó! + Nem engedélyezett! Ellenőrizze a felhasználó jogosultságait a Subsonic kiszolgálón! + A szükséges param hiányzik. + A keresett adatokat nem találtuk. + A próbaidő vége. + Ismeretlen api hiba. + Nem kompatibilis verzió. Kérjük, frissítse az UltraSonic Android alkalmazást! + Nem kompatibilis verzió. Kérjük, frissítse a Subsonic kiszolgálót! + \ No newline at end of file diff --git a/ultrasonic/src/main/res/values-pt-rBR/strings.xml b/ultrasonic/src/main/res/values-pt-rBR/strings.xml index 553c9f89..d84aa701 100644 --- a/ultrasonic/src/main/res/values-pt-rBR/strings.xml +++ b/ultrasonic/src/main/res/values-pt-rBR/strings.xml @@ -111,12 +111,8 @@ Mídia Offline Ocorreu um erro de rede. Tentativa %1$d de %2$d. Obtive %d Artistas. - Login ou senha errada. - Não autorizado. Verifique as permissões do usuário no servidor Subsonic. Lendo do servidor. Lendo do servidor. Pronto! - Versões incompativeis. Atualize o aplicativo UltraSonic para Android. - Versões incompativeis. Atualize o servidor UltraSonic. Playlists Atualizar Informação Informação da playlist atualizada para %s @@ -426,4 +422,16 @@ Restam %d dias para o fim do período de teste + + Erro de api genérico. + A autenticação por token não é suportada para usuários LDAP. + Login ou senha errada. + Não autorizado. Verifique as permissões do usuário no servidor Subsonic. + O parâmetro requerido está faltando. + Os dados solicitados não foram encontrados. + O período de avaliação acabou. + Erro de api desconhecido. + Versões incompativeis. Atualize o aplicativo UltraSonic para Android. + Versões incompativeis. Atualize o servidor UltraSonic. + diff --git a/ultrasonic/src/main/res/values-pt/strings.xml b/ultrasonic/src/main/res/values-pt/strings.xml index ae8eaf4f..aa4ffa69 100644 --- a/ultrasonic/src/main/res/values-pt/strings.xml +++ b/ultrasonic/src/main/res/values-pt/strings.xml @@ -111,12 +111,8 @@ Mídia Offline Ocorreu um erro de rede. Tentativa %1$d de %2$d. Obtive %d Artistas. - Login ou senha errada. - Não autorizado. Verifique as permissões do usuário no servidor Subsonic. Lendo do servidor. Lendo do servidor. Pronto! - Versões incompativeis. Atualize o aplicativo UltraSonic para Android. - Versões incompativeis. Atualize o servidor UltraSonic. Playlists Atualizar Informação Informação da playlist atualizada para %s @@ -426,4 +422,16 @@ Restam %d dias para o fim do período de teste + + Erro de api genérico. + A autenticação por token não é suportada para usuários LDAP. + Login ou senha errada. + Não autorizado. Verifique as permissões do usuário no servidor Subsonic. + O parâmetro requerido está faltando. + Os dados solicitados não foram encontrados. + O período de avaliação acabou. + Erro de api desconhecido. + Versões incompativeis. Atualize o aplicativo UltraSonic para Android. + Versões incompativeis. Atualize o servidor UltraSonic. + diff --git a/ultrasonic/src/main/res/values/strings.xml b/ultrasonic/src/main/res/values/strings.xml index 97687ad0..b653822c 100644 --- a/ultrasonic/src/main/res/values/strings.xml +++ b/ultrasonic/src/main/res/values/strings.xml @@ -111,12 +111,8 @@ Offline Media A network error occurred. Retrying %1$d of %2$d. Got %d Artists. - Wrong username or password. - Not authorized. Check user permissions in Subsonic server. Reading from server. Reading from server. Done! - Incompatible versions. Please upgrade UltraSonic Android app. - Incompatible versions. Please upgrade Subsonic server. Playlists Update Information Updated playlist information for %s @@ -428,4 +424,16 @@ %d days left of trial period + + Generic api error. + Authentication by token is not supported for LDAP users. + Wrong username or password. + Not authorized. Check user permissions in Subsonic server. + Required param is missing. + Requested data was not found. + Trial period is over. + Unknown api error. + Incompatible versions. Please upgrade UltraSonic Android app. + Incompatible versions. Please upgrade Subsonic server. + \ No newline at end of file