Skip to content

Instantly share code, notes, and snippets.

@cliffgr
Created February 6, 2019 10:37
Show Gist options
  • Save cliffgr/cf36c994a11c917bbb5bf186641b837c to your computer and use it in GitHub Desktop.
Save cliffgr/cf36c994a11c917bbb5bf186641b837c to your computer and use it in GitHub Desktop.
dasdasd
package com.wappier.wappierSDK.flush;
import android.text.TextUtils;
import com.wappier.wappierSDK.Env;
import com.wappier.wappierSDK.SessionHandler;
import com.wappier.wappierSDK.Wappier;
import com.wappier.wappierSDK.database.IDatabaseLayer;
import com.wappier.wappierSDK.json.JsonParser;
import com.wappier.wappierSDK.logs.Logger;
import com.wappier.wappierSDK.loyalty.Loyalty;
import com.wappier.wappierSDK.loyalty.model.quest.QuestGroups;
import com.wappier.wappierSDK.network.NetworkResponse;
import com.wappier.wappierSDK.network.networkrequest.ContentType;
import com.wappier.wappierSDK.network.networkrequest.OnNetworkRequestResponseListener;
import com.wappier.wappierSDK.network.networkrequest.RequestType;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class FlushLayer implements IFlushLayer {
private IDatabaseLayer mdatabaseLayer;
private String mBaseUrl;
private HashMap<String,Set<EventListener>> mEventListenerHashMap;
public void init(IDatabaseLayer databaseLayer) {
this.mdatabaseLayer = databaseLayer;
mBaseUrl = Env.WAPPIER_BASE_URL;
}
public void registerListener(String key, EventListenerSuccess<JSONObject> eventListenerSuccess , EventListenerError eventListenerError) {
Set<EventListener> eventListenerSet = new HashSet<>();
eventListenerSet.add(eventListenerSuccess);
eventListenerSet.add(eventListenerError);
mEventListenerHashMap.put(key, eventListenerSet);
}
public void unregisterListener(String key) {
mEventListenerHashMap.remove(key);
}
@Override
synchronized public void flushAll() {
if (TextUtils.isEmpty(Wappier.sSessionHandler.getStringPreference(SessionHandler.WAPPIER_ID))) {
Logger.d("** Wappier Id has not been set yet, will not flush events. **");
return;
}
JSONArray jsonArray = mdatabaseLayer.getEvents();
if (jsonArray.length() == 0) {
Logger.d("No more events to send");
return;
}
Logger.i("Sending database events...");
Logger.d("DB Data : " + jsonArray.toString());
Wappier.getNetworkRequest()
.baseUrl(mBaseUrl)
.endpoint("events")
.requestType(RequestType.POST)
.contentType(ContentType.JSON)
.bodyJsonObject(jsonArray)
.onNetworkRequestResponseListener(new OnNetworkRequestResponseListener() {
@Override
public void onSuccessResponse(NetworkResponse response) {
List<String> resultIds = new ArrayList<>();
Logger.d("/events" + ": ** OK **");
Logger.d("Network response " + response.getResponse());
try {
JSONObject jsonObject = new JSONObject(response.getResponse());
JSONArray eventsJsonArray = jsonObject.getJSONArray("events");
for (int i = 0; i < eventsJsonArray.length(); i++) {
JSONObject responseJSONObject = eventsJsonArray.getJSONObject(i);
if (responseJSONObject.has("success") || responseJSONObject.has("error")) {
JSONObject successJSONObject = responseJSONObject.getJSONObject("success");
if (successJSONObject.has("clientId")) {
resultIds.add(successJSONObject.getString("clientId"));
}
}
if (jsonObject.has("notifications")) {
Loyalty loyalty = Loyalty.getInstance();
if (loyalty != null && loyalty.isLoyaltyEnabled())
loyalty.setNotificationJson(jsonObject.getJSONObject("notifications"));
}
}
mdatabaseLayer.deleteSentEvents(resultIds);
if (jsonObject.has("messages")) {
JSONArray jsonArrayMessages = jsonObject.getJSONArray("messages");
for (int i = 0; i < jsonArrayMessages.length(); i++) {
JSONObject jsonCurrentObject = jsonArrayMessages.getJSONObject(i);
String payloadType = jsonCurrentObject.getString("type");
JSONObject payload = jsonCurrentObject.getJSONObject("payload");
if (mEventListenerHashMap.size() > 0) {
// Set<EventListener> eventListener = mEventListenerHashMap.get(payloadType);
if (eventListener != null)
eventListener.onSuccess(payload);
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onErrorResponse(NetworkResponse errorResponse) {
Logger.d("/events" + ": Error :" + errorResponse.toString());
if (mEventListener != null)
mEventListener.onError();
}
}).fireRequest();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment