Lecturer feching delayed #2
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 -> {
|
||||
|
||||
Reference in New Issue
Block a user