Refresh Failed Canteen List

This commit is contained in:
Caesar2011
2018-08-02 19:00:09 +02:00
parent 2bf56d4c1e
commit 85bc13ab0a

View File

@@ -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<T> NetworkCallback<T> saveOnCallback(NetworkCallback<T> 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);
});
}
}