mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-09 13:50:57 +00:00
Improved persistence manager. For restored events managed races are not relevant anymore since the url to which the event shall be sent is now serialized too.
This commit is contained in:
1 parent
b24c940b19
commit
06edf66d9a
4 files changed
+33
-41
No files matched your search
+1
-1
@@ -17,7 +17,7 @@ public class AppConstants {
|
||||
public final static String RACE_ID_KEY = "raceUuid";
|
||||
public final static String SERVICE_UNIQUE_ID = "serviceUID";
|
||||
public final static String RACING_EVENT_TIME = "racingEventTime";
|
||||
public final static String EXTRAS_JSON_KEY = "json";
|
||||
public final static String EXTRAS_SERIALIZED_EVENT = "json";
|
||||
public final static String EXTRAS_URL = "url";
|
||||
public final static String FLAG_KEY = "raceFlag";
|
||||
|
||||
|
||||
+22
-24
@@ -38,15 +38,16 @@ public class EventPersistenceManager {
|
||||
public void persistIntent(Intent intent) {
|
||||
Bundle extras = intent.getExtras();
|
||||
|
||||
Serializable serializedEvent = extras.getSerializable(AppConstants.EXTRAS_JSON_KEY);
|
||||
String raceUuid = extras.getSerializable(AppConstants.RACE_ID_KEY).toString();
|
||||
|
||||
persistEvent(raceUuid, serializedEvent);
|
||||
String raceId = extras.getString(AppConstants.RACE_ID_KEY);
|
||||
String url = extras.getString(AppConstants.EXTRAS_URL);
|
||||
Serializable serializedEvent = extras.getSerializable(AppConstants.EXTRAS_SERIALIZED_EVENT);
|
||||
|
||||
persistEvent(url, raceId, serializedEvent);
|
||||
}
|
||||
|
||||
private void persistEvent(String raceUuid, Serializable serializedEvent) {
|
||||
String eventLine = getSerializedIntentForPersistence(raceUuid, serializedEvent);
|
||||
ExLog.i(TAG, String.format("Persisting event \"%s\" for race %s.", eventLine, raceUuid));
|
||||
private void persistEvent(String url, String raceId, Serializable serializedEvent) {
|
||||
String eventLine = getSerializedIntentForPersistence(url, raceId, serializedEvent);
|
||||
ExLog.i(TAG, String.format("Persisting event \"%s\" for race %s.", eventLine, raceId));
|
||||
|
||||
if (persistedEvents.contains(eventLine)) {
|
||||
ExLog.i(TAG, "The event already exists. Ignoring.");
|
||||
@@ -55,26 +56,28 @@ public class EventPersistenceManager {
|
||||
saveEvent(eventLine);
|
||||
}
|
||||
|
||||
private String getSerializedIntentForPersistence(String raceUuid, Serializable serializedEvent) {
|
||||
String eventLine = String.format("%s;%s", raceUuid, serializedEvent);
|
||||
private String getSerializedIntentForPersistence(String url, String raceId, Serializable serializedEvent) {
|
||||
String eventLine = String.format("%s;%s;%s", raceId, serializedEvent, url);
|
||||
return eventLine;
|
||||
}
|
||||
|
||||
public void removeIntent(Intent intent) {
|
||||
Bundle extras = intent.getExtras();
|
||||
|
||||
String serializedEvent = extras.getString(AppConstants.EXTRAS_JSON_KEY);
|
||||
String raceUuid = extras.getString(AppConstants.RACE_ID_KEY);
|
||||
String url = extras.getString(AppConstants.EXTRAS_URL);
|
||||
String raceId = extras.getString(AppConstants.RACE_ID_KEY);
|
||||
String serializedEvent = extras.getString(AppConstants.EXTRAS_SERIALIZED_EVENT);
|
||||
|
||||
|
||||
removeEvent(raceUuid, serializedEvent);
|
||||
removeEvent(url, raceId, serializedEvent);
|
||||
}
|
||||
|
||||
private void removeEvent(String raceUuid, String serializedEvent) {
|
||||
private void removeEvent(String url, String raceId, String serializedEvent) {
|
||||
if (persistedEvents.isEmpty())
|
||||
return;
|
||||
|
||||
ExLog.i(TAG, String.format("Removing event \"%s\" for race %s.", serializedEvent, raceUuid));
|
||||
String eventLine = getSerializedIntentForPersistence(raceUuid, serializedEvent);
|
||||
ExLog.i(TAG, String.format("Removing event \"%s\" for race %s.", serializedEvent, raceId));
|
||||
String eventLine = getSerializedIntentForPersistence(url, raceId, serializedEvent);
|
||||
|
||||
removePersistedEvent(eventLine);
|
||||
}
|
||||
@@ -96,25 +99,20 @@ public class EventPersistenceManager {
|
||||
|
||||
public List<Intent> restoreEvents() {
|
||||
List<Intent> delayedIntents = new ArrayList<Intent>();
|
||||
//These file entries may be too old. No appropriate race id has been found for this event.
|
||||
List<String> entriesToBeRemoved = new ArrayList<String>();
|
||||
|
||||
for (String persistedEvent : persistedEvents) {
|
||||
|
||||
String[] lineParts = persistedEvent.split(";");
|
||||
String url = lineParts[2];
|
||||
String raceId = lineParts[0];
|
||||
String serializedEvent = lineParts[1];
|
||||
|
||||
Intent eventIntent = EventSendingService.createEventIntent(context, lineParts[0], lineParts[1]);
|
||||
Intent eventIntent = EventSendingService.createEventIntent(context, url, raceId, serializedEvent);
|
||||
if (eventIntent != null) {
|
||||
delayedIntents.add(eventIntent);
|
||||
} else {
|
||||
entriesToBeRemoved.add(persistedEvent);
|
||||
}
|
||||
}
|
||||
|
||||
for (String entryToBeRemoved : entriesToBeRemoved) {
|
||||
removePersistedEvent(entryToBeRemoved);
|
||||
}
|
||||
|
||||
ExLog.i(TAG, "Restored " + delayedIntents.size() + " events");
|
||||
return delayedIntents;
|
||||
}
|
||||
|
||||
+1
-1
@@ -34,7 +34,7 @@ public class EventSenderTask extends AsyncTask<Intent, Void, Pair<Intent, Intege
|
||||
}
|
||||
|
||||
Bundle extras = intent.getExtras();
|
||||
Serializable serializedEvent = extras.getSerializable(AppConstants.EXTRAS_JSON_KEY);
|
||||
Serializable serializedEvent = extras.getSerializable(AppConstants.EXTRAS_SERIALIZED_EVENT);
|
||||
String url = extras.getString(AppConstants.EXTRAS_URL);
|
||||
if (serializedEvent == null || url == null) {
|
||||
return Pair.create(intent, -1);
|
||||
|
||||
+9
-15
@@ -17,8 +17,6 @@ import android.os.IBinder;
|
||||
|
||||
import com.sap.sailing.racecommittee.app.AppConstants;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.data.DataManager;
|
||||
import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.racecommittee.app.logging.ExLog;
|
||||
import com.sap.sailing.racecommittee.app.receiver.ConnectivityChangedReceiver;
|
||||
@@ -95,23 +93,17 @@ public class EventSendingService extends Service implements EventSendingListener
|
||||
URLEncoder.encode(race.getName()),
|
||||
URLEncoder.encode(race.getFleet().getName()));
|
||||
|
||||
return createEventIntent(context, url, race.getId(), serializedEvent);
|
||||
}
|
||||
|
||||
public static Intent createEventIntent(Context context, String url, Serializable raceId, Serializable serializedEvent) {
|
||||
Intent eventIntent = new Intent(context.getString(R.string.intentActionSendEvent));
|
||||
eventIntent.putExtra(AppConstants.RACE_ID_KEY, race.getId());
|
||||
eventIntent.putExtra(AppConstants.EXTRAS_JSON_KEY, serializedEvent);
|
||||
eventIntent.putExtra(AppConstants.RACE_ID_KEY, raceId);
|
||||
eventIntent.putExtra(AppConstants.EXTRAS_SERIALIZED_EVENT, serializedEvent);
|
||||
eventIntent.putExtra(AppConstants.EXTRAS_URL, url);
|
||||
ExLog.i(TAG, "Created event " + eventIntent + " for sending to backend");
|
||||
return eventIntent;
|
||||
}
|
||||
|
||||
public static Intent createEventIntent(Context context, Serializable raceId, Serializable serializedEvent) {
|
||||
ReadonlyDataManager data = DataManager.create(context);
|
||||
ManagedRace race = data.getDataStore().getRace(raceId);
|
||||
if (race == null) {
|
||||
ExLog.e(TAG, "There is no race with id " + raceId);
|
||||
return null;
|
||||
}
|
||||
return createEventIntent(context, race, serializedEvent);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
@@ -200,7 +192,9 @@ public class EventSendingService extends Service implements EventSendingListener
|
||||
serviceLogger.onEventSentFailed();
|
||||
} else {
|
||||
ExLog.i(TAG, "Event successfully send.");
|
||||
persistenceManager.removeIntent(intent);
|
||||
if (persistenceManager.areIntentsDelayed()) {
|
||||
persistenceManager.removeIntent(intent);
|
||||
}
|
||||
lastSuccessfulSend = Calendar.getInstance().getTime();
|
||||
|
||||
serviceLogger.onEventSentSuccessful();
|
||||
|
||||
Reference in new issue
Block a user