Search in sources :

Example 1 with ApiUpdateContainer

use of im.actor.core.api.ApiUpdateContainer in project actor-platform by actorapp.

the class SequenceActor method invalidate.

private void invalidate() {
    if (!isValidated) {
        return;
    }
    isValidated = false;
    startWakeLock();
    if (seq < 0) {
        Log.d(TAG, "Loading fresh state...");
        api(new RequestGetState(ApiSupportConfiguration.OPTIMIZATIONS)).then(response -> {
            if (isValidated) {
                return;
            }
            Log.d(TAG, "State loaded {seq=" + seq + "}");
            seq = response.getSeq();
            state = response.getState();
            persistState(seq, state);
            stopWakeLock();
            onBecomeValid(response.getSeq(), response.getState());
        });
    } else {
        Log.d(TAG, "Loading difference...");
        onUpdateStarted();
        final long loadStart = im.actor.runtime.Runtime.getCurrentTime();
        api(new RequestGetDifference(seq, state, ApiSupportConfiguration.OPTIMIZATIONS)).then(response -> {
            if (isValidated) {
                return;
            }
            long parsingStart = Runtime.getCurrentTime();
            ArrayList<Update> updates = new ArrayList<>();
            for (ApiUpdateContainer container : response.getUpdates()) {
                try {
                    updates.add(updatesParser.read(container.getUpdateHeader(), container.getUpdate()));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            Log.d(TAG, "Difference loaded {seq=" + response.getSeq() + "} in " + (Runtime.getCurrentTime() - loadStart) + " ms, " + "parsed in " + (Runtime.getCurrentTime() - parsingStart) + " ms, " + "userRefs: " + response.getUsersRefs().size() + ", " + "groupRefs: " + response.getGroupsRefs().size());
            handler.onDifferenceUpdate(response.getUsers(), response.getGroups(), response.getUsersRefs(), response.getGroupsRefs(), updates).then(updateProcessed -> onUpdatesApplied(response.getSeq(), response.getState()));
            onBecomeValid(response.getSeq(), response.getState());
            if (response.needMore()) {
                invalidate();
            } else {
                onUpdateEnded();
            }
        });
    }
}
Also used : ApiUpdateContainer(im.actor.core.api.ApiUpdateContainer) RequestGetDifference(im.actor.core.api.rpc.RequestGetDifference) RequestGetState(im.actor.core.api.rpc.RequestGetState) ArrayList(java.util.ArrayList) IOException(java.io.IOException) FatSeqUpdate(im.actor.core.api.base.FatSeqUpdate) WeakUpdate(im.actor.core.api.base.WeakUpdate) Update(im.actor.core.network.parser.Update) SeqUpdate(im.actor.core.api.base.SeqUpdate)

Aggregations

ApiUpdateContainer (im.actor.core.api.ApiUpdateContainer)1 FatSeqUpdate (im.actor.core.api.base.FatSeqUpdate)1 SeqUpdate (im.actor.core.api.base.SeqUpdate)1 WeakUpdate (im.actor.core.api.base.WeakUpdate)1 RequestGetDifference (im.actor.core.api.rpc.RequestGetDifference)1 RequestGetState (im.actor.core.api.rpc.RequestGetState)1 Update (im.actor.core.network.parser.Update)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1