More efficient re-login
This commit is contained in:
@@ -22,6 +22,11 @@ public class Login extends HTTPService {
|
||||
public static final int RESTORE_STATUS_SUCCESS = 1;
|
||||
public static final int RESTORE_STATUS_ERROR = 2;
|
||||
public static final int RESTORE_STATUS_INVALID_PASSWORD = 3;
|
||||
|
||||
public static final int LOGOUT_KVV = 2;
|
||||
public static final int LOGOUT_BB = 1;
|
||||
public static final int RELOGIN = 0;
|
||||
|
||||
private final KVVListener mListener;
|
||||
@Nullable private LoginTokenKVV mTokenKVV;
|
||||
@Nullable private LoginTokenBB mTokenBB;
|
||||
@@ -110,14 +115,25 @@ public class Login extends HTTPService {
|
||||
return mTokenBB;
|
||||
}
|
||||
|
||||
void refreshLogin(NetworkCallback<Pair<LoginTokenKVV, LoginTokenBB>> success, NetworkErrorCallback error) {
|
||||
void refreshLogin(NetworkCallback<Pair<LoginTokenKVV, LoginTokenBB>> success, NetworkErrorCallback error, int flags) {
|
||||
boolean isFirst = mRefreshCallbacks.isEmpty();
|
||||
mRefreshCallbacks.add(success, error);
|
||||
if (!isFirst)
|
||||
return;
|
||||
refreshLoginRunner(success, error, flags);
|
||||
}
|
||||
|
||||
private void refreshLoginRunner(NetworkCallback<Pair<LoginTokenKVV, LoginTokenBB>> success, NetworkErrorCallback error, int flags) {
|
||||
CustomAccountManager manager = mListener.getAccountManager();
|
||||
if ((flags & LOGOUT_KVV) == LOGOUT_KVV) {
|
||||
manager.doInvalidateToken(AccountGeneral.ACCOUNT_TYPE, AccountGeneral.AUTHTOKEN_TYPE_KVV, ignored -> {
|
||||
manager.doInvalidateToken(AccountGeneral.ACCOUNT_TYPE, AccountGeneral.AUTHTOKEN_TYPE_BLACKBOARD, ignored2 -> {
|
||||
refreshLoginRunner(success, error, flags & ~LOGOUT_KVV);
|
||||
});
|
||||
} else if ((flags & LOGOUT_BB) == LOGOUT_BB) {
|
||||
manager.doInvalidateToken(AccountGeneral.ACCOUNT_TYPE, AccountGeneral.AUTHTOKEN_TYPE_BLACKBOARD, ignored -> {
|
||||
refreshLoginRunner(success, error, flags & ~LOGOUT_BB);
|
||||
});
|
||||
} else if (flags == RELOGIN) {
|
||||
restoreOnlineLogin(restoreResult -> {
|
||||
if (restoreResult == RESTORE_STATUS_SUCCESS)
|
||||
testLoginToken(mRefreshCallbacks::responseResponse, mRefreshCallbacks::responseError);
|
||||
@@ -128,8 +144,9 @@ public class Login extends HTTPService {
|
||||
mRefreshCallbacks.responseError(new NetworkError(100181, 403, "Re-login failed (error)!"));
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
} else {
|
||||
throw new IllegalArgumentException("Invalid flag in refreshLoginRunner: "+flags);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ import java.util.LinkedHashSet;
|
||||
import java.util.regex.MatchResult;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
import androidx.arch.core.util.Function;
|
||||
import de.sebse.fuplanner.services.kvv.types.Lecturer;
|
||||
import de.sebse.fuplanner.services.kvv.types.Modules;
|
||||
import de.sebse.fuplanner.services.kvv.types.Semester;
|
||||
@@ -129,7 +130,7 @@ public class ModulesList extends HTTPService {
|
||||
mQueue.next();
|
||||
return;
|
||||
}
|
||||
NetworkErrorCallback errorFunc = (error -> {
|
||||
Function<Integer, NetworkErrorCallback> errorFunc = ((Integer errorCode) -> (error -> {
|
||||
if (retries > 0 && (error.getHttpStatus() == 401 || error.getHttpStatus() == 403)) {
|
||||
mLogin.refreshLogin(success -> {
|
||||
recv(callback, errorCallback, forceRefresh, retries - 1);
|
||||
@@ -137,12 +138,12 @@ public class ModulesList extends HTTPService {
|
||||
}, error1 -> {
|
||||
errorCallback.onError(error1);
|
||||
mQueue.next();
|
||||
});
|
||||
}, errorCode);
|
||||
return;
|
||||
}
|
||||
errorCallback.onError(error);
|
||||
mQueue.next();
|
||||
});
|
||||
}));
|
||||
this.upgradeKVV(successKVV -> {
|
||||
this.upgradeBlackboard(successKVV, success -> {
|
||||
if (this.mModules == null)
|
||||
@@ -153,8 +154,8 @@ public class ModulesList extends HTTPService {
|
||||
}
|
||||
callback.onResponse(this.mModules);
|
||||
mQueue.next();
|
||||
}, errorFunc);
|
||||
}, errorFunc);
|
||||
}, errorFunc.apply(Login.LOGOUT_BB));
|
||||
}, errorFunc.apply(Login.LOGOUT_KVV));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -257,11 +257,11 @@ public class ModulesResources extends PartModules<ArrayList<Resource>> {
|
||||
return;
|
||||
}
|
||||
}
|
||||
fileUpgrade(filename, url , modulename, callback, error -> {
|
||||
fileUpgrade(filename, url, modulename, callback, error -> {
|
||||
if (retries >= 0 && (error.getHttpStatus() == 401 || error.getHttpStatus() == 403)) {
|
||||
mLogin.refreshLogin(success -> {
|
||||
file(filename, url, modulename, callback, errorCallback, forceRefresh, retries-1);
|
||||
}, errorCallback);
|
||||
}, errorCallback, url.contains("lms.fu-berlin.de") ? Login.LOGOUT_BB : Login.LOGOUT_KVV);
|
||||
return;
|
||||
}
|
||||
errorCallback.onError(error);
|
||||
|
||||
@@ -39,7 +39,7 @@ abstract class PartModules<T> extends Part<Modules.Module> {
|
||||
}, error1 -> {
|
||||
errorCallback.onError(error1);
|
||||
mQueue.next();
|
||||
});
|
||||
}, module.getModuleType() == Modules.TYPE_BB ? Login.LOGOUT_BB : Login.LOGOUT_KVV);
|
||||
return;
|
||||
}
|
||||
errorCallback.onError(error);
|
||||
|
||||
Reference in New Issue
Block a user