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.StringRes;
import androidx.arch.core.util.Function;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
@@ -129,6 +130,7 @@ public class MainActivity extends AppCompatActivity
private boolean isPaused = false;
private boolean isLoggedInBeforePause = false;
private boolean isDrawerFixed = false;
private Function<Modules, Void> mMolduleListUpdateFunction;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -711,6 +713,11 @@ public class MainActivity extends AppCompatActivity
setNavigationSelection();
}
@Override
public void onModulesFragmentListUpdate(Function<Modules, Void> update) {
this.mMolduleListUpdateFunction = update;
}
@Override
public void onCanteensFragmentInteraction(final int itemID) {
changeFragment(FRAGMENT_CANTEENS_DETAILS, String.valueOf(itemID));
@@ -790,4 +797,11 @@ public class MainActivity extends AppCompatActivity
public interface KVVCallback {
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.Nullable;
import androidx.arch.core.util.Function;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import de.sebse.fuplanner.R;
import de.sebse.fuplanner.services.kvv.types.Modules;
import de.sebse.fuplanner.tools.MainActivityListener;
import de.sebse.fuplanner.tools.logging.Logger;
@@ -84,6 +86,10 @@ public class ModulesFragment extends Fragment {
super.onAttach(context);
if (context instanceof OnModulesFragmentInteractionListener) {
mListener = (OnModulesFragmentInteractionListener) context;
mListener.onModulesFragmentListUpdate(modules -> {
if (adapter != null) adapter.setModules(modules);
return null;
});
} else {
throw new RuntimeException(context.toString()
+ " must implement OnModulesFragmentInteractionListener");
@@ -105,5 +111,6 @@ public class ModulesFragment extends Fragment {
public interface OnModulesFragmentInteractionListener {
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())
listener.onModuleListChange();
}
@Override
public void onModuleListPartiallyUpdated(de.sebse.fuplanner.services.kvv.types.Modules modules) {
for (KVVListener listener : mListeners.values())
listener.onModuleListPartiallyUpdated(modules);
}
};
public KVV() {

View File

@@ -3,6 +3,7 @@ package de.sebse.fuplanner.services.kvv;
import com.android.volley.NetworkResponse;
import de.sebse.fuplanner.services.kvv.types.LoginTokenKVV;
import de.sebse.fuplanner.services.kvv.types.Modules;
import de.sebse.fuplanner.tools.CustomAccountManager;
public interface KVVListener {
@@ -12,6 +13,8 @@ public interface KVVListener {
default void onModuleListChange() {}
default void onModuleListPartiallyUpdated(Modules modules) {}
default void onKVVNetworkResponse(NetworkResponse error) {}
CustomAccountManager getAccountManager();

View File

@@ -287,6 +287,15 @@ public class ModulesList extends HTTPService {
}
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) {
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);
String courseId = site.getString("courseId");
if (cacheBBCourse().hasKVVCourseID(courseId)) {
if (--latchNoLecturers[0] == 0) fastCallback.onResponse(modulesKVV);
if (--latch[0] == 0) successCallback.onResponse(modulesKVV);
if (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV);
continue;
}
Modules.Module bbCourse = cacheBBCourse().getBBCourse(courseId);
if (bbCourse != null) {
bbCourse = bbCourse.clone();
modulesKVV.addModule(bbCourse);
if (--latchNoLecturers[0] == 0) fastCallback.onResponse(modulesKVV);
if (--latch[0] == 0) successCallback.onResponse(modulesKVV);
if (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV);
continue;
}
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);
if (--latch[0] == 0) successCallback.onResponse(modulesKVV);
});
if (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV);
if (--latchNoLecturers[0] == 0) fastCallback.onResponse(modulesKVV);
} else {
cacheBBCourse().addKVVCourseID(courseId);
if (--latchNoLecturers[0] == 0) fastCallback.onResponse(modulesKVV);
if (--latch[0] == 0) successCallback.onResponse(modulesKVV);
if (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV);
}
} catch (JSONException e) {
e.printStackTrace();
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 (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV);
}
}, error -> errorCallback.onError(new NetworkError(101126, error.networkResponse.statusCode, "Cannot get module list!")));
} catch (JSONException e) {

View File

@@ -47,13 +47,11 @@ public class KVVSyncAdapter extends AbstractThreadedSyncAdapter {
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
// We've bound to LocalService, cast the IBinder and get LocalService instance
log.d("connected 1", mWaitForBound, mBound);
KVV.LocalBinder binder = (KVV.LocalBinder) service;
mKVV = binder.getService();
mBound = true;
if (mWaitForBound) {
mWaitForBound = false;
log.d("connected", mKVV);
mQueue.next();
}
}
@@ -104,13 +102,10 @@ public class KVVSyncAdapter extends AbstractThreadedSyncAdapter {
SyncResult syncResult) {
if (!mBound) {
Intent intent = new Intent(getContext(), KVV.class);
log.d("connect22222", getContext().bindService(intent, mConnection, Context.BIND_AUTO_CREATE));
mWaitForBound = true;
log.d("connect", mKVV);
mQueue.add(() -> {});
}
mQueue.add(() -> {
log.d("kvv", mKVV);
mKVV.account().restoreOnlineLogin(bool -> {
mQueue.next();
});
@@ -122,7 +117,13 @@ public class KVVSyncAdapter extends AbstractThreadedSyncAdapter {
}
mKVV.modules().list().reloadIfOutdated();
mKVV.modules().list().recv(success -> {
final int[] latch = {0};
Iterator<Modules.Module> iterator = success.latestSemesterIterator();
while (iterator.hasNext()) {
latch[0] += 1;
iterator.next();
}
iterator = success.latestSemesterIterator();
while (iterator.hasNext()) {
Modules.Module module = iterator.next();
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,
module.getID(), ModulePart.RESOURCES,
R.string.resource_updated, R.string.resource_added, R.string.resource_removed);
mQueue.next();
if (--latch[0] == 0) mQueue.next();
}
}, msg -> {
log.e(msg);
mQueue.next();
}, error -> {
log.e(error);
if (--latch[0] == 0) mQueue.next();
}, true);
}
}, msg -> {