From 85bc13ab0a35b7693cf3486f373706b27613a61d Mon Sep 17 00:00:00 2001 From: Caesar2011 Date: Thu, 2 Aug 2018 19:00:09 +0200 Subject: [PATCH] Refresh Failed Canteen List --- .../services/Canteen/CanteenBrowser.java | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/de/sebse/fuplanner/services/Canteen/CanteenBrowser.java b/app/src/main/java/de/sebse/fuplanner/services/Canteen/CanteenBrowser.java index 9f7e9fd..f21dbd8 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/Canteen/CanteenBrowser.java +++ b/app/src/main/java/de/sebse/fuplanner/services/Canteen/CanteenBrowser.java @@ -8,10 +8,12 @@ import org.json.JSONObject; import java.io.IOException; +import de.sebse.fuplanner.MainActivity; import de.sebse.fuplanner.services.Canteen.types.Canteen; import de.sebse.fuplanner.services.Canteen.types.Canteens; import de.sebse.fuplanner.services.Canteen.types.Day; import de.sebse.fuplanner.tools.AsyncQueue; +import de.sebse.fuplanner.tools.MainAcitivityListener; import de.sebse.fuplanner.tools.network.HTTPService; import de.sebse.fuplanner.tools.network.NetworkCallback; import de.sebse.fuplanner.tools.network.NetworkError; @@ -21,10 +23,15 @@ public class CanteenBrowser extends HTTPService { private Canteens canteens; private final AsyncQueue queue = new AsyncQueue(); private final Context context; + private MainAcitivityListener mListener; public CanteenBrowser(Context context) { super(context); this.context = context; + if (context instanceof MainAcitivityListener) + mListener = (MainActivity) context; + else + throw new RuntimeException(context.toString() + "must implement MainActivityListener"); try { this.canteens = Canteens.load(context); } catch (IOException e) { @@ -46,15 +53,14 @@ public class CanteenBrowser extends HTTPService { return; } this.upgradeCanteens(success -> { - log.d("updated canteen list"); if (this.canteens == null) this.canteens = success; else this.canteens.update(success); this.save(); - callback.onResponse(this.canteens); + saveOnCallback(callback, forceRefresh).onResponse(this.canteens); queue.next("list"); - }, queue.check("list", errorCallback)); + }, queue.check("list", errorOnCallback(errorCallback))); }); } @@ -111,12 +117,11 @@ public class CanteenBrowser extends HTTPService { return; } this.upgradeCanteen(canteen, success -> { - log.d("updated canteen"); canteen.update(success); this.save(); - callback.onResponse(canteen); + saveOnCallback(callback, forceRefresh).onResponse(canteen); queue.next(hash); - }, queue.check(hash, errorCallback)); + }, queue.check(hash, errorOnCallback(errorCallback))); }); } @@ -159,12 +164,11 @@ public class CanteenBrowser extends HTTPService { return; } this.upgradeDay(day, success -> { - log.d("updated day"); day.update(success); this.save(); - callback.onResponse(day); + saveOnCallback(callback, forceRefresh).onResponse(day); queue.next(hash); - }, queue.check(hash, errorCallback)); + }, queue.check(hash, errorOnCallback(errorCallback))); }); } @@ -216,4 +220,22 @@ public class CanteenBrowser extends HTTPService { e.printStackTrace(); } } + + private NetworkCallback saveOnCallback(NetworkCallback callback, boolean forceRefresh){ + return (success -> { + if (forceRefresh) + mListener.refreshFailed(false); + callback.onResponse(success); + }); + } + + private NetworkErrorCallback errorOnCallback(NetworkErrorCallback errorCallback){ + return (error -> { + if (error.getHttpStatus() == 401 || error.getHttpStatus() == 403) + mListener.loginTokenInvalid(false); + else + mListener.refreshFailed(true); + errorCallback.onError(error); + }); + } }