Module Detail Overview Implementation #1
This commit is contained in:
@@ -2,6 +2,7 @@ package de.sebse.fuplanner.tools;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import de.sebse.fuplanner.tools.network.NetworkCallback;
|
||||
@@ -9,22 +10,22 @@ import de.sebse.fuplanner.tools.network.NetworkError;
|
||||
import de.sebse.fuplanner.tools.network.NetworkErrorCallback;
|
||||
|
||||
public class AsyncQueue {
|
||||
private LinkedList<AsyncQueueCallback> mQueue = new LinkedList<>();
|
||||
private boolean mRunning = false;
|
||||
private HashMap<String, LinkedList<AsyncQueueCallback>> mQueues = new HashMap<>();
|
||||
private HashMap<String, Boolean> mRunnings = new HashMap<>();
|
||||
|
||||
public void add(AsyncQueueCallback callback) {
|
||||
if (mRunning)
|
||||
mQueue.addLast(callback);
|
||||
public void add(String hash, AsyncQueueCallback callback) {
|
||||
if (isRunning(hash))
|
||||
getQueue(hash).addLast(callback);
|
||||
else {
|
||||
mRunning = true;
|
||||
setRunning(hash, true);
|
||||
callback.run();
|
||||
}
|
||||
}
|
||||
|
||||
public void next() {
|
||||
AsyncQueueCallback callback = mQueue.pollFirst();
|
||||
public void next(String hash) {
|
||||
AsyncQueueCallback callback = getQueue(hash).pollFirst();
|
||||
if (callback == null)
|
||||
mRunning = false;
|
||||
setRunning(hash, false);
|
||||
else
|
||||
callback.run();
|
||||
}
|
||||
@@ -33,25 +34,33 @@ public class AsyncQueue {
|
||||
void run();
|
||||
}
|
||||
|
||||
public NetworkErrorCallback check(final NetworkErrorCallback value) {
|
||||
return new NetworkErrorCallback() {
|
||||
@Override
|
||||
public void onError(NetworkError error) {
|
||||
value.onError(error);
|
||||
next();
|
||||
}
|
||||
public NetworkErrorCallback check(String hash, NetworkErrorCallback value) {
|
||||
return error -> {
|
||||
value.onError(error);
|
||||
next(hash);
|
||||
};
|
||||
}
|
||||
|
||||
public <T> NetworkCallback<T> check(final NetworkCallback<T> value) {
|
||||
return new NetworkCallback<T>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull T success) {
|
||||
value.onResponse(success);
|
||||
next();
|
||||
}
|
||||
public <T> NetworkCallback<T> check(String hash, NetworkCallback<T> value) {
|
||||
return success -> {
|
||||
value.onResponse(success);
|
||||
next(hash);
|
||||
};
|
||||
}
|
||||
|
||||
private boolean isRunning(String hash) {
|
||||
return mRunnings.containsKey(hash) && mRunnings.get(hash);
|
||||
}
|
||||
|
||||
private void setRunning(String hash, boolean value) {
|
||||
mRunnings.put(hash, value);
|
||||
}
|
||||
|
||||
private LinkedList<AsyncQueueCallback> getQueue(String hash) {
|
||||
if (mQueues.get(hash) == null)
|
||||
mQueues.put(hash, new LinkedList<>());
|
||||
return mQueues.get(hash);
|
||||
}
|
||||
}
|
||||
|
||||
/*public class AsyncQueue<T, U> {
|
||||
|
||||
Reference in New Issue
Block a user