Lecturer feching delayed #2

This commit is contained in:
Caesar2011
2019-02-11 12:26:43 +01:00
parent e366e55143
commit 8f2052180d
6 changed files with 54 additions and 14 deletions

View File

@@ -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);
}
}
} }

View File

@@ -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);
} }
} }

View File

@@ -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() {

View File

@@ -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();

View File

@@ -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) {

View File

@@ -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 -> {