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