Reuse testLoginToken result if set in last 30 secounds

This commit is contained in:
Caesar2011
2019-02-05 22:53:42 +01:00
parent d78948d349
commit 25004f8784
4 changed files with 32 additions and 0 deletions

View File

@@ -18,6 +18,9 @@ import de.sebse.fuplanner.tools.network.NetworkErrorCallback;
public class BBLogin extends HTTPService {
private final FULogin mFULogin;
private long lastHash;
private long lastSync;
private static final long MAX_CACHE_TIME = 1000 * 60; // 1 minute
public BBLogin(Context context, FULogin fuLogin) {
super(context);
@@ -25,6 +28,10 @@ public class BBLogin extends HTTPService {
}
public void testLoginToken(@NotNull LoginTokenBB token, @NotNull NetworkCallback<LoginTokenBB> callback, @NotNull NetworkErrorCallback errorCallback) {
if (token.hashCode() == lastHash && lastSync + MAX_CACHE_TIME > System.currentTimeMillis() && token.getStudentId() != null) {
callback.onResponse(token);
return;
}
get(String.format("https://lms.fu-berlin.de/learn/api/public/v1/users/?userName=%s", token.getUsername()), token.getCookies(), response -> {
String body = response.getParsed();
if (body == null) {
@@ -37,6 +44,8 @@ public class BBLogin extends HTTPService {
String id = json.getString("id");
String studentId = json.getString("studentId");
token.setAdditionals(id, studentId);
lastSync = System.currentTimeMillis();
lastHash = token.hashCode();
callback.onResponse(token);
} catch (JSONException e) {
errorCallback.onError(new NetworkError(100271, 403, "Cannot parse profile!"));

View File

@@ -18,6 +18,9 @@ import de.sebse.fuplanner.tools.network.NetworkErrorCallback;
public class KVVLogin extends HTTPService {
private final FULogin mFULogin;
private long lastHash;
private long lastSync;
private static final long MAX_CACHE_TIME = 1000 * 60; // 1 minute
public KVVLogin(Context context, FULogin fuLogin) {
super(context);
@@ -26,6 +29,10 @@ public class KVVLogin extends HTTPService {
public void testLoginToken(@NotNull LoginTokenKVV token, @NotNull NetworkCallback<LoginTokenKVV> callback, @NotNull NetworkErrorCallback errorCallback) {
if (token.hashCode() == lastHash && lastSync + MAX_CACHE_TIME > System.currentTimeMillis() && token.getFullName() != null) {
callback.onResponse(token);
return;
}
get(String.format("https://kvv.imp.fu-berlin.de/direct/profile/%s.json", token.getUsername()), token.getCookies(), response -> {
String body = response.getParsed();
if (body == null) {
@@ -37,6 +44,8 @@ public class KVVLogin extends HTTPService {
String displayName = json.getString("displayName");
String email = json.getString("email");
token.setAdditionals(displayName, email);
lastSync = System.currentTimeMillis();
lastHash = token.hashCode();
callback.onResponse(token);
} catch (JSONException e) {
errorCallback.onError(new NetworkError(100171, 403, "Cannot parse profile!"));

View File

@@ -1,5 +1,7 @@
package de.sebse.fuplanner.services.kvv.types;
import com.google.android.gms.common.internal.Objects;
import org.json.JSONException;
import org.json.JSONObject;
@@ -143,6 +145,11 @@ public class LoginTokenBB {
}
}
@Override
public int hashCode() {
return Objects.hashCode(s_session_id, session_id, username, id, studentId);
}
public interface LoginTokenInterface {
void run(LoginTokenBB token);
}

View File

@@ -1,5 +1,7 @@
package de.sebse.fuplanner.services.kvv.types;
import com.google.android.gms.common.internal.Objects;
import org.json.JSONException;
import org.json.JSONObject;
@@ -135,6 +137,11 @@ public class LoginTokenKVV {
}
}
@Override
public int hashCode() {
return Objects.hashCode(username, JSESSIONID, fullName, email);
}
public interface LoginTokenInterface {
void run(LoginTokenKVV token);
}