diff --git a/app/src/main/java/de/sebse/fuplanner/services/kvv/sync/BBLogin.java b/app/src/main/java/de/sebse/fuplanner/services/kvv/sync/BBLogin.java index 527534c..42fbc25 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/kvv/sync/BBLogin.java +++ b/app/src/main/java/de/sebse/fuplanner/services/kvv/sync/BBLogin.java @@ -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 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!")); diff --git a/app/src/main/java/de/sebse/fuplanner/services/kvv/sync/KVVLogin.java b/app/src/main/java/de/sebse/fuplanner/services/kvv/sync/KVVLogin.java index 0c22888..b91676e 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/kvv/sync/KVVLogin.java +++ b/app/src/main/java/de/sebse/fuplanner/services/kvv/sync/KVVLogin.java @@ -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 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!")); diff --git a/app/src/main/java/de/sebse/fuplanner/services/kvv/types/LoginTokenBB.java b/app/src/main/java/de/sebse/fuplanner/services/kvv/types/LoginTokenBB.java index 5192d2d..a3d8ebf 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/kvv/types/LoginTokenBB.java +++ b/app/src/main/java/de/sebse/fuplanner/services/kvv/types/LoginTokenBB.java @@ -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); } diff --git a/app/src/main/java/de/sebse/fuplanner/services/kvv/types/LoginTokenKVV.java b/app/src/main/java/de/sebse/fuplanner/services/kvv/types/LoginTokenKVV.java index e46e35c..e0acf83 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/kvv/types/LoginTokenKVV.java +++ b/app/src/main/java/de/sebse/fuplanner/services/kvv/types/LoginTokenKVV.java @@ -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); }