Lecturer feching delayed #2
This commit is contained in:
@@ -27,6 +27,7 @@ import java.util.Locale;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.StringRes;
|
import androidx.annotation.StringRes;
|
||||||
|
import androidx.arch.core.util.Function;
|
||||||
import androidx.appcompat.app.ActionBarDrawerToggle;
|
import androidx.appcompat.app.ActionBarDrawerToggle;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
@@ -129,6 +130,7 @@ public class MainActivity extends AppCompatActivity
|
|||||||
private boolean isPaused = false;
|
private boolean isPaused = false;
|
||||||
private boolean isLoggedInBeforePause = false;
|
private boolean isLoggedInBeforePause = false;
|
||||||
private boolean isDrawerFixed = false;
|
private boolean isDrawerFixed = false;
|
||||||
|
private Function<Modules, Void> mMolduleListUpdateFunction;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -711,6 +713,11 @@ public class MainActivity extends AppCompatActivity
|
|||||||
setNavigationSelection();
|
setNavigationSelection();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onModulesFragmentListUpdate(Function<Modules, Void> update) {
|
||||||
|
this.mMolduleListUpdateFunction = update;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCanteensFragmentInteraction(final int itemID) {
|
public void onCanteensFragmentInteraction(final int itemID) {
|
||||||
changeFragment(FRAGMENT_CANTEENS_DETAILS, String.valueOf(itemID));
|
changeFragment(FRAGMENT_CANTEENS_DETAILS, String.valueOf(itemID));
|
||||||
@@ -790,4 +797,11 @@ public class MainActivity extends AppCompatActivity
|
|||||||
public interface KVVCallback {
|
public interface KVVCallback {
|
||||||
void get(KVV kvv);
|
void get(KVV kvv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onModuleListPartiallyUpdated(Modules modules) {
|
||||||
|
if (mMolduleListUpdateFunction != null) {
|
||||||
|
mMolduleListUpdateFunction.apply(modules);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,11 +8,13 @@ import android.view.ViewGroup;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.arch.core.util.Function;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||||
import de.sebse.fuplanner.R;
|
import de.sebse.fuplanner.R;
|
||||||
|
import de.sebse.fuplanner.services.kvv.types.Modules;
|
||||||
import de.sebse.fuplanner.tools.MainActivityListener;
|
import de.sebse.fuplanner.tools.MainActivityListener;
|
||||||
import de.sebse.fuplanner.tools.logging.Logger;
|
import de.sebse.fuplanner.tools.logging.Logger;
|
||||||
|
|
||||||
@@ -84,6 +86,10 @@ public class ModulesFragment extends Fragment {
|
|||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
if (context instanceof OnModulesFragmentInteractionListener) {
|
if (context instanceof OnModulesFragmentInteractionListener) {
|
||||||
mListener = (OnModulesFragmentInteractionListener) context;
|
mListener = (OnModulesFragmentInteractionListener) context;
|
||||||
|
mListener.onModulesFragmentListUpdate(modules -> {
|
||||||
|
if (adapter != null) adapter.setModules(modules);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
throw new RuntimeException(context.toString()
|
throw new RuntimeException(context.toString()
|
||||||
+ " must implement OnModulesFragmentInteractionListener");
|
+ " must implement OnModulesFragmentInteractionListener");
|
||||||
@@ -105,5 +111,6 @@ public class ModulesFragment extends Fragment {
|
|||||||
|
|
||||||
public interface OnModulesFragmentInteractionListener {
|
public interface OnModulesFragmentInteractionListener {
|
||||||
void onModulesFragmentInteraction(String id);
|
void onModulesFragmentInteraction(String id);
|
||||||
|
void onModulesFragmentListUpdate(Function<Modules, Void> update);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,12 @@ public class KVV extends Service {
|
|||||||
for (KVVListener listener : mListeners.values())
|
for (KVVListener listener : mListeners.values())
|
||||||
listener.onModuleListChange();
|
listener.onModuleListChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onModuleListPartiallyUpdated(de.sebse.fuplanner.services.kvv.types.Modules modules) {
|
||||||
|
for (KVVListener listener : mListeners.values())
|
||||||
|
listener.onModuleListPartiallyUpdated(modules);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public KVV() {
|
public KVV() {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package de.sebse.fuplanner.services.kvv;
|
|||||||
import com.android.volley.NetworkResponse;
|
import com.android.volley.NetworkResponse;
|
||||||
|
|
||||||
import de.sebse.fuplanner.services.kvv.types.LoginTokenKVV;
|
import de.sebse.fuplanner.services.kvv.types.LoginTokenKVV;
|
||||||
|
import de.sebse.fuplanner.services.kvv.types.Modules;
|
||||||
import de.sebse.fuplanner.tools.CustomAccountManager;
|
import de.sebse.fuplanner.tools.CustomAccountManager;
|
||||||
|
|
||||||
public interface KVVListener {
|
public interface KVVListener {
|
||||||
@@ -12,6 +13,8 @@ public interface KVVListener {
|
|||||||
|
|
||||||
default void onModuleListChange() {}
|
default void onModuleListChange() {}
|
||||||
|
|
||||||
|
default void onModuleListPartiallyUpdated(Modules modules) {}
|
||||||
|
|
||||||
default void onKVVNetworkResponse(NetworkResponse error) {}
|
default void onKVVNetworkResponse(NetworkResponse error) {}
|
||||||
|
|
||||||
CustomAccountManager getAccountManager();
|
CustomAccountManager getAccountManager();
|
||||||
|
|||||||
@@ -287,6 +287,15 @@ public class ModulesList extends HTTPService {
|
|||||||
}
|
}
|
||||||
callback.onResponse(modules);
|
callback.onResponse(modules);
|
||||||
});
|
});
|
||||||
|
NetworkCallback<Modules> fastCallback = (modules -> {
|
||||||
|
mListener.onModuleListPartiallyUpdated(modules);
|
||||||
|
try {
|
||||||
|
cacheBBCourse().save(getContext());
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
mListener.onModuleListPartiallyUpdated(modules);
|
||||||
|
});
|
||||||
|
|
||||||
if (!mLogin.isInOnlineMode() || mLogin.getLoginTokenBB() == null) {
|
if (!mLogin.isInOnlineMode() || mLogin.getLoginTokenBB() == null) {
|
||||||
errorCallback.onError(new NetworkError(101120, 500, "Currently running in offline mode!"));
|
errorCallback.onError(new NetworkError(101120, 500, "Currently running in offline mode!"));
|
||||||
@@ -323,16 +332,16 @@ public class ModulesList extends HTTPService {
|
|||||||
JSONObject site = sites[0].getJSONObject(i);
|
JSONObject site = sites[0].getJSONObject(i);
|
||||||
String courseId = site.getString("courseId");
|
String courseId = site.getString("courseId");
|
||||||
if (cacheBBCourse().hasKVVCourseID(courseId)) {
|
if (cacheBBCourse().hasKVVCourseID(courseId)) {
|
||||||
|
if (--latchNoLecturers[0] == 0) fastCallback.onResponse(modulesKVV);
|
||||||
if (--latch[0] == 0) successCallback.onResponse(modulesKVV);
|
if (--latch[0] == 0) successCallback.onResponse(modulesKVV);
|
||||||
if (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Modules.Module bbCourse = cacheBBCourse().getBBCourse(courseId);
|
Modules.Module bbCourse = cacheBBCourse().getBBCourse(courseId);
|
||||||
if (bbCourse != null) {
|
if (bbCourse != null) {
|
||||||
bbCourse = bbCourse.clone();
|
bbCourse = bbCourse.clone();
|
||||||
modulesKVV.addModule(bbCourse);
|
modulesKVV.addModule(bbCourse);
|
||||||
|
if (--latchNoLecturers[0] == 0) fastCallback.onResponse(modulesKVV);
|
||||||
if (--latch[0] == 0) successCallback.onResponse(modulesKVV);
|
if (--latch[0] == 0) successCallback.onResponse(modulesKVV);
|
||||||
if (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
get(String.format("https://lms.fu-berlin.de/learn/api/v1/courses/%s?fields=name,courseId,description", courseId), mLogin.getLoginTokenBB().getCookies(), response1 -> {
|
get(String.format("https://lms.fu-berlin.de/learn/api/v1/courses/%s?fields=name,courseId,description", courseId), mLogin.getLoginTokenBB().getCookies(), response1 -> {
|
||||||
@@ -377,17 +386,17 @@ public class ModulesList extends HTTPService {
|
|||||||
log.e(error);
|
log.e(error);
|
||||||
if (--latch[0] == 0) successCallback.onResponse(modulesKVV);
|
if (--latch[0] == 0) successCallback.onResponse(modulesKVV);
|
||||||
});
|
});
|
||||||
if (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV);
|
if (--latchNoLecturers[0] == 0) fastCallback.onResponse(modulesKVV);
|
||||||
} else {
|
} else {
|
||||||
cacheBBCourse().addKVVCourseID(courseId);
|
cacheBBCourse().addKVVCourseID(courseId);
|
||||||
|
if (--latchNoLecturers[0] == 0) fastCallback.onResponse(modulesKVV);
|
||||||
if (--latch[0] == 0) successCallback.onResponse(modulesKVV);
|
if (--latch[0] == 0) successCallback.onResponse(modulesKVV);
|
||||||
if (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV);
|
|
||||||
}
|
}
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
log.e(new NetworkError(101125, 403, "Cannot parse course entry!"));
|
log.e(new NetworkError(101125, 403, "Cannot parse course entry!"));
|
||||||
|
if (--latchNoLecturers[0] == 0) fastCallback.onResponse(modulesKVV);
|
||||||
if (--latch[0] == 0) successCallback.onResponse(modulesKVV);
|
if (--latch[0] == 0) successCallback.onResponse(modulesKVV);
|
||||||
if (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV);
|
|
||||||
}
|
}
|
||||||
}, error -> errorCallback.onError(new NetworkError(101126, error.networkResponse.statusCode, "Cannot get module list!")));
|
}, error -> errorCallback.onError(new NetworkError(101126, error.networkResponse.statusCode, "Cannot get module list!")));
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
|
|||||||
@@ -47,13 +47,11 @@ public class KVVSyncAdapter extends AbstractThreadedSyncAdapter {
|
|||||||
@Override
|
@Override
|
||||||
public void onServiceConnected(ComponentName className, IBinder service) {
|
public void onServiceConnected(ComponentName className, IBinder service) {
|
||||||
// We've bound to LocalService, cast the IBinder and get LocalService instance
|
// We've bound to LocalService, cast the IBinder and get LocalService instance
|
||||||
log.d("connected 1", mWaitForBound, mBound);
|
|
||||||
KVV.LocalBinder binder = (KVV.LocalBinder) service;
|
KVV.LocalBinder binder = (KVV.LocalBinder) service;
|
||||||
mKVV = binder.getService();
|
mKVV = binder.getService();
|
||||||
mBound = true;
|
mBound = true;
|
||||||
if (mWaitForBound) {
|
if (mWaitForBound) {
|
||||||
mWaitForBound = false;
|
mWaitForBound = false;
|
||||||
log.d("connected", mKVV);
|
|
||||||
mQueue.next();
|
mQueue.next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -104,13 +102,10 @@ public class KVVSyncAdapter extends AbstractThreadedSyncAdapter {
|
|||||||
SyncResult syncResult) {
|
SyncResult syncResult) {
|
||||||
if (!mBound) {
|
if (!mBound) {
|
||||||
Intent intent = new Intent(getContext(), KVV.class);
|
Intent intent = new Intent(getContext(), KVV.class);
|
||||||
log.d("connect22222", getContext().bindService(intent, mConnection, Context.BIND_AUTO_CREATE));
|
|
||||||
mWaitForBound = true;
|
mWaitForBound = true;
|
||||||
log.d("connect", mKVV);
|
|
||||||
mQueue.add(() -> {});
|
mQueue.add(() -> {});
|
||||||
}
|
}
|
||||||
mQueue.add(() -> {
|
mQueue.add(() -> {
|
||||||
log.d("kvv", mKVV);
|
|
||||||
mKVV.account().restoreOnlineLogin(bool -> {
|
mKVV.account().restoreOnlineLogin(bool -> {
|
||||||
mQueue.next();
|
mQueue.next();
|
||||||
});
|
});
|
||||||
@@ -122,7 +117,13 @@ public class KVVSyncAdapter extends AbstractThreadedSyncAdapter {
|
|||||||
}
|
}
|
||||||
mKVV.modules().list().reloadIfOutdated();
|
mKVV.modules().list().reloadIfOutdated();
|
||||||
mKVV.modules().list().recv(success -> {
|
mKVV.modules().list().recv(success -> {
|
||||||
|
final int[] latch = {0};
|
||||||
Iterator<Modules.Module> iterator = success.latestSemesterIterator();
|
Iterator<Modules.Module> iterator = success.latestSemesterIterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
latch[0] += 1;
|
||||||
|
iterator.next();
|
||||||
|
}
|
||||||
|
iterator = success.latestSemesterIterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
Modules.Module module = iterator.next();
|
Modules.Module module = iterator.next();
|
||||||
final ArrayList<Announcement> announcements = module.announcements;
|
final ArrayList<Announcement> announcements = module.announcements;
|
||||||
@@ -147,11 +148,11 @@ public class KVVSyncAdapter extends AbstractThreadedSyncAdapter {
|
|||||||
sendNotifications(resources, module.resources, module.title, Resource::getTitle, Resource::getUrl,
|
sendNotifications(resources, module.resources, module.title, Resource::getTitle, Resource::getUrl,
|
||||||
module.getID(), ModulePart.RESOURCES,
|
module.getID(), ModulePart.RESOURCES,
|
||||||
R.string.resource_updated, R.string.resource_added, R.string.resource_removed);
|
R.string.resource_updated, R.string.resource_added, R.string.resource_removed);
|
||||||
mQueue.next();
|
if (--latch[0] == 0) mQueue.next();
|
||||||
}
|
}
|
||||||
}, msg -> {
|
}, error -> {
|
||||||
log.e(msg);
|
log.e(error);
|
||||||
mQueue.next();
|
if (--latch[0] == 0) mQueue.next();
|
||||||
}, true);
|
}, true);
|
||||||
}
|
}
|
||||||
}, msg -> {
|
}, msg -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user