Files
philips-tv-speicher-voll/patches/gel-workmanager/PATCH.diff

42 lines
1.7 KiB
Diff

--- a/src/org/droidtv/gel/gathering/GatheringService.java
+++ b/src/org/droidtv/gel/gathering/GatheringService.java
@@
- OneTimeWorkRequest request = GELWorker.buildWorkRequest(intent);
- workManager.enqueueUniqueWork("GEL_WORK",
- ExistingWorkPolicy.APPEND_OR_REPLACE, request);
+ eventOutbox.enqueue(EventRecord.from(intent), EventClassifier.forIntent(intent));
+ OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(GELDrainWorker.class)
+ .keepResultsForAtLeast(10, TimeUnit.MINUTES).build();
+ workManager.enqueueUniqueWork("GEL_DRAIN", ExistingWorkPolicy.KEEP, request);
--- a/src/org/droidtv/gel/gathering/GELWorker.java
+++ b/src/org/droidtv/gel/gathering/GELDrainWorker.java
@@
- Intent intent = intentFromWorkData(getInputData());
- gatheringService.dispatch(intent);
- return Result.success();
+ long deadline = SystemClock.elapsedRealtime() + TimeUnit.MINUTES.toMillis(8);
+ while (SystemClock.elapsedRealtime() < deadline) {
+ EventRecord event = eventOutbox.peekOldest();
+ if (event == null) return Result.success();
+ gatheringService.dispatch(event.toIntent());
+ eventOutbox.ack(event.sequence); // acknowledge only after dispatch
+ }
+ return Result.retry();
--- /dev/null
+++ b/src/org/droidtv/gel/gathering/EventOutbox.sql
@@
+CREATE TABLE gel_event_outbox(
+ sequence INTEGER PRIMARY KEY AUTOINCREMENT,
+ action TEXT NOT NULL,
+ payload BLOB NOT NULL,
+ coalesce_key TEXT UNIQUE,
+ created_ms INTEGER NOT NULL,
+ attempts INTEGER NOT NULL DEFAULT 0
+);
# Add a unique periodic GEL_DRAIN_WATCHDOG with KEEP. Bound the outbox to 4,096
# rows / 8 MiB, retain a dropped-event metric, and coalesce only action classes
# proven to be replaceable state/alarm snapshots.