From 8c5ae93068d8b1d462d70c711ef1e6b9470e094e Mon Sep 17 00:00:00 2001 From: Philip Khaisman Date: Thu, 9 Apr 2026 13:28:01 -0400 Subject: [PATCH 01/10] Add clearLayers prop to time-changed event that defaults to true --- source/core/datasource/TimeSeries.datasource.js | 5 +++-- source/core/datasource/TimeSeries.replay.datasource.js | 6 ++++-- source/core/timesync/DataSynchronizer.js | 5 +++-- source/core/timesync/replay/DataSynchronizer.replay.js | 6 ++++-- source/core/ui/view/View.js | 2 +- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/source/core/datasource/TimeSeries.datasource.js b/source/core/datasource/TimeSeries.datasource.js index 46376a71f0..070468ceb9 100644 --- a/source/core/datasource/TimeSeries.datasource.js +++ b/source/core/datasource/TimeSeries.datasource.js @@ -257,10 +257,11 @@ class TimeSeriesDatasource { replaySpeed= this.getReplaySpeed(), reconnect= false, mode= this.getMode(), - version = this.version() + version = this.version(), + clearLayers = true ) { - return this.timeSeriesDataSource.setTimeRange(startTime,endTime,replaySpeed,reconnect,mode,version); + return this.timeSeriesDataSource.setTimeRange(startTime,endTime,replaySpeed,reconnect,mode,version,clearLayers); } /***********************************/ diff --git a/source/core/datasource/TimeSeries.replay.datasource.js b/source/core/datasource/TimeSeries.replay.datasource.js index 0d94ec77d4..e656e2d051 100644 --- a/source/core/datasource/TimeSeries.replay.datasource.js +++ b/source/core/datasource/TimeSeries.replay.datasource.js @@ -308,7 +308,8 @@ class TimeSeriesReplayDatasource extends DataSource { replaySpeed = this.getReplaySpeed(), reconnect = false, mode = this.getMode(), - version = this.version() + version = this.version(), + clearLayers = true ) { await this.checkInit(); @@ -330,7 +331,8 @@ class TimeSeriesReplayDatasource extends DataSource { replaySpeed: replaySpeed, reconnect: reconnect, mode: mode, - version: version + version: version, + clearLayers: clearLayers }); } async reset() { diff --git a/source/core/timesync/DataSynchronizer.js b/source/core/timesync/DataSynchronizer.js index c3bf559b8c..f74e04ed6d 100644 --- a/source/core/timesync/DataSynchronizer.js +++ b/source/core/timesync/DataSynchronizer.js @@ -287,8 +287,9 @@ class DataSynchronizer { async setTimeRange(startTime = this.getStartTimeAsIsoDate(), endTime = this.getEndTimeAsIsoDate(), replaySpeed = this.getReplaySpeed(), - reconnect = false) { - return this.dataSynchronizer.setTimeRange(startTime,endTime, replaySpeed,reconnect); + reconnect = false, + clearLayers = true) { + return this.dataSynchronizer.setTimeRange(startTime,endTime, replaySpeed,reconnect, clearLayers); } async updateProperties(properties) { diff --git a/source/core/timesync/replay/DataSynchronizer.replay.js b/source/core/timesync/replay/DataSynchronizer.replay.js index f752dd351c..2a06ca492e 100644 --- a/source/core/timesync/replay/DataSynchronizer.replay.js +++ b/source/core/timesync/replay/DataSynchronizer.replay.js @@ -463,7 +463,8 @@ class DataSynchronizerReplay { async setTimeRange(startTime = this.getStartTimeAsIsoDate(), endTime = this.getEndTimeAsIsoDate(), replaySpeed = this.getReplaySpeed(), - reconnect = false) { + reconnect = false, + clearLayers = true) { await this.disconnect(); this.incVersion(); // update properties of DataSynchronizer @@ -481,7 +482,8 @@ class DataSynchronizerReplay { this.getReplaySpeed(), false, this.getMode(), - this.version() + this.version(), + clearLayers )); } return Promise.all(promises); diff --git a/source/core/ui/view/View.js b/source/core/ui/view/View.js index 30bb24016e..6e870ccba6 100755 --- a/source/core/ui/view/View.js +++ b/source/core/ui/view/View.js @@ -257,7 +257,7 @@ class View { const timeBroadcastChannel = new BroadcastChannel(DATASOURCE_TIME_TOPIC+dataSourceId); timeBroadcastChannel.onmessage = (event) => { // skip data reset events for now - if (event.data.type === EventType.TIME_CHANGED) { + if (event.data.type === EventType.TIME_CHANGED && event.data.clearLayers) { self.reset(); // on time changed } }; From f877b592d2d4e3c708d7e8fb5ff73526db0ad626 Mon Sep 17 00:00:00 2001 From: Philip Khaisman Date: Thu, 9 Apr 2026 16:31:31 -0400 Subject: [PATCH 02/10] Add clearLayers property to time-changed event --- source/core/datasource/common/handler/TimeSeries.handler.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/core/datasource/common/handler/TimeSeries.handler.js b/source/core/datasource/common/handler/TimeSeries.handler.js index a082cd8bd6..8c6b0e973a 100644 --- a/source/core/datasource/common/handler/TimeSeries.handler.js +++ b/source/core/datasource/common/handler/TimeSeries.handler.js @@ -295,7 +295,8 @@ class TimeSeriesHandler extends DataSourceHandler { try { this.timeBroadcastChannel.postMessage({ dataSourceId: this.dataSourceId, - type: EventType.TIME_CHANGED + type: EventType.TIME_CHANGED, + clearLayers: properties.clearLayers || true }); await this.disconnect(); From 0fa319315ace33f66087952f05a6e97947092f25 Mon Sep 17 00:00:00 2001 From: Philip Khaisman Date: Fri, 10 Apr 2026 11:57:27 -0400 Subject: [PATCH 03/10] Add clearLayers param to doConnect method body of replay data sync --- source/core/datasource/TimeSeries.replay.datasource.js | 10 +++++----- source/core/timesync/replay/DataSynchronizer.replay.js | 10 ++++++++-- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/source/core/datasource/TimeSeries.replay.datasource.js b/source/core/datasource/TimeSeries.replay.datasource.js index e656e2d051..fd4685ffcd 100644 --- a/source/core/datasource/TimeSeries.replay.datasource.js +++ b/source/core/datasource/TimeSeries.replay.datasource.js @@ -328,11 +328,11 @@ class TimeSeriesReplayDatasource extends DataSource { return this.updateProperties({ startTime: this.getStartTimeAsIsoDate(), endTime: this.getEndTimeAsIsoDate(), - replaySpeed: replaySpeed, - reconnect: reconnect, - mode: mode, - version: version, - clearLayers: clearLayers + replaySpeed, + reconnect, + clearLayers, + mode, + version, }); } async reset() { diff --git a/source/core/timesync/replay/DataSynchronizer.replay.js b/source/core/timesync/replay/DataSynchronizer.replay.js index 2a06ca492e..ed4bee06d1 100644 --- a/source/core/timesync/replay/DataSynchronizer.replay.js +++ b/source/core/timesync/replay/DataSynchronizer.replay.js @@ -51,6 +51,7 @@ class DataSynchronizerReplay { this.properties.endTimestamp = undefined; this.properties.minTimestamp = undefined; this.properties.maxTimestamp = undefined; + this.properties.clearLayers = true; this.properties.version = 0; if (isDefined(properties)) { @@ -222,6 +223,10 @@ class DataSynchronizerReplay { return this.replaySpeed; } + getClearLayers() { + return this.properties.clearLayers; + } + /** * Terminate the corresponding running WebWorker by calling terminate() on it. */ @@ -418,7 +423,7 @@ class DataSynchronizerReplay { this.checkStartEndTime(); await this.updateAlgo(); for (let dataSource of this.dataSources) { - await dataSource.setTimeRange(this.getStartTimeAsIsoDate(), this.getEndTimeAsIsoDate(), this.getReplaySpeed(), true); + await dataSource.setTimeRange(this.getStartTimeAsIsoDate(), this.getEndTimeAsIsoDate(), this.getReplaySpeed(), true, this.getClearLayers()); } @@ -469,6 +474,7 @@ class DataSynchronizerReplay { this.incVersion(); // update properties of DataSynchronizer this.replaySpeed = replaySpeed; + this.properties.clearLayers = clearLayers; await this.setStartTime(startTime, false); await this.setEndTime(endTime, false); @@ -481,9 +487,9 @@ class DataSynchronizerReplay { this.getEndTimeAsIsoDate(), this.getReplaySpeed(), false, + this.getClearLayers(), this.getMode(), this.version(), - clearLayers )); } return Promise.all(promises); From 5e405a6ddef404a5dbb95fe5d9198fc1ccdbcc3b Mon Sep 17 00:00:00 2001 From: Philip Khaisman Date: Fri, 10 Apr 2026 12:19:08 -0400 Subject: [PATCH 04/10] Update param order --- source/core/datasource/TimeSeries.datasource.js | 6 +++--- source/core/datasource/TimeSeries.replay.datasource.js | 4 ++-- source/core/timesync/DataSynchronizer.js | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/core/datasource/TimeSeries.datasource.js b/source/core/datasource/TimeSeries.datasource.js index 070468ceb9..a22c358156 100644 --- a/source/core/datasource/TimeSeries.datasource.js +++ b/source/core/datasource/TimeSeries.datasource.js @@ -256,12 +256,12 @@ class TimeSeriesDatasource { endTime= this.getEndTimeAsIsoDate(), replaySpeed= this.getReplaySpeed(), reconnect= false, + clearLayers = true, mode= this.getMode(), - version = this.version(), - clearLayers = true + version = this.version() ) { - return this.timeSeriesDataSource.setTimeRange(startTime,endTime,replaySpeed,reconnect,mode,version,clearLayers); + return this.timeSeriesDataSource.setTimeRange(startTime,endTime,replaySpeed,reconnect,clearLayers,mode,version); } /***********************************/ diff --git a/source/core/datasource/TimeSeries.replay.datasource.js b/source/core/datasource/TimeSeries.replay.datasource.js index fd4685ffcd..acc6963b3f 100644 --- a/source/core/datasource/TimeSeries.replay.datasource.js +++ b/source/core/datasource/TimeSeries.replay.datasource.js @@ -307,9 +307,9 @@ class TimeSeriesReplayDatasource extends DataSource { endTime = this.getEndTimeAsIsoDate(), replaySpeed = this.getReplaySpeed(), reconnect = false, + clearLayers = true, mode = this.getMode(), - version = this.version(), - clearLayers = true + version = this.version() ) { await this.checkInit(); diff --git a/source/core/timesync/DataSynchronizer.js b/source/core/timesync/DataSynchronizer.js index f74e04ed6d..b19067ddab 100644 --- a/source/core/timesync/DataSynchronizer.js +++ b/source/core/timesync/DataSynchronizer.js @@ -289,7 +289,7 @@ class DataSynchronizer { replaySpeed = this.getReplaySpeed(), reconnect = false, clearLayers = true) { - return this.dataSynchronizer.setTimeRange(startTime,endTime, replaySpeed,reconnect, clearLayers); + return this.dataSynchronizer.setTimeRange(startTime, endTime, replaySpeed, reconnect, clearLayers); } async updateProperties(properties) { From 0afd687aded6b4ba5efcefb8e19a36324b0c2d6d Mon Sep 17 00:00:00 2001 From: Philip Khaisman Date: Fri, 10 Apr 2026 12:28:31 -0400 Subject: [PATCH 05/10] Set clearLayers to true in published message if null or undefined, not falsey --- source/core/datasource/common/handler/TimeSeries.handler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/core/datasource/common/handler/TimeSeries.handler.js b/source/core/datasource/common/handler/TimeSeries.handler.js index 8c6b0e973a..9c34c53f31 100644 --- a/source/core/datasource/common/handler/TimeSeries.handler.js +++ b/source/core/datasource/common/handler/TimeSeries.handler.js @@ -296,7 +296,7 @@ class TimeSeriesHandler extends DataSourceHandler { this.timeBroadcastChannel.postMessage({ dataSourceId: this.dataSourceId, type: EventType.TIME_CHANGED, - clearLayers: properties.clearLayers || true + clearLayers: properties.clearLayers ?? true }); await this.disconnect(); From 9c42715efd8f1b7256f9cb5913df6ab4dbdaa1e9 Mon Sep 17 00:00:00 2001 From: Philip Khaisman Date: Fri, 10 Apr 2026 12:35:37 -0400 Subject: [PATCH 06/10] Tweak condition that checks if clearLayers is defined --- source/core/datasource/common/handler/TimeSeries.handler.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/core/datasource/common/handler/TimeSeries.handler.js b/source/core/datasource/common/handler/TimeSeries.handler.js index 9c34c53f31..f81617dacc 100644 --- a/source/core/datasource/common/handler/TimeSeries.handler.js +++ b/source/core/datasource/common/handler/TimeSeries.handler.js @@ -292,11 +292,12 @@ class TimeSeriesHandler extends DataSourceHandler { } async updateProperties(properties) { + const clearLayers = properties.clearLayers == null ? true : properties.clearLayers; try { this.timeBroadcastChannel.postMessage({ dataSourceId: this.dataSourceId, type: EventType.TIME_CHANGED, - clearLayers: properties.clearLayers ?? true + clearLayers }); await this.disconnect(); From 4b5a720278a2f7b240c9fed98820a45cebab89d3 Mon Sep 17 00:00:00 2001 From: Philip Khaisman Date: Tue, 14 Apr 2026 13:43:08 -0400 Subject: [PATCH 07/10] Clear layers only if the start time of the data synchronizer changed --- source/core/datasource/TimeSeries.datasource.js | 4 ++-- source/core/datasource/TimeSeries.replay.datasource.js | 4 ++-- source/core/datasource/common/handler/TimeSeries.handler.js | 4 ++-- source/core/timesync/DataSynchronizer.js | 6 +++--- source/core/ui/view/View.js | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/source/core/datasource/TimeSeries.datasource.js b/source/core/datasource/TimeSeries.datasource.js index a22c358156..58eb0b39aa 100644 --- a/source/core/datasource/TimeSeries.datasource.js +++ b/source/core/datasource/TimeSeries.datasource.js @@ -256,12 +256,12 @@ class TimeSeriesDatasource { endTime= this.getEndTimeAsIsoDate(), replaySpeed= this.getReplaySpeed(), reconnect= false, - clearLayers = true, + didStartTimeChange= false, mode= this.getMode(), version = this.version() ) { - return this.timeSeriesDataSource.setTimeRange(startTime,endTime,replaySpeed,reconnect,clearLayers,mode,version); + return this.timeSeriesDataSource.setTimeRange(startTime,endTime,replaySpeed,reconnect,didStartTimeChange,mode,version); } /***********************************/ diff --git a/source/core/datasource/TimeSeries.replay.datasource.js b/source/core/datasource/TimeSeries.replay.datasource.js index acc6963b3f..d1bfe806d0 100644 --- a/source/core/datasource/TimeSeries.replay.datasource.js +++ b/source/core/datasource/TimeSeries.replay.datasource.js @@ -307,7 +307,7 @@ class TimeSeriesReplayDatasource extends DataSource { endTime = this.getEndTimeAsIsoDate(), replaySpeed = this.getReplaySpeed(), reconnect = false, - clearLayers = true, + didStartTimeChange = false, mode = this.getMode(), version = this.version() ) { @@ -330,7 +330,7 @@ class TimeSeriesReplayDatasource extends DataSource { endTime: this.getEndTimeAsIsoDate(), replaySpeed, reconnect, - clearLayers, + didStartTimeChange, mode, version, }); diff --git a/source/core/datasource/common/handler/TimeSeries.handler.js b/source/core/datasource/common/handler/TimeSeries.handler.js index f81617dacc..76f1229dc2 100644 --- a/source/core/datasource/common/handler/TimeSeries.handler.js +++ b/source/core/datasource/common/handler/TimeSeries.handler.js @@ -292,12 +292,12 @@ class TimeSeriesHandler extends DataSourceHandler { } async updateProperties(properties) { - const clearLayers = properties.clearLayers == null ? true : properties.clearLayers; + const didStartTimeChange = properties.didStartTimeChange == null ? false : properties.didStartTimeChange; try { this.timeBroadcastChannel.postMessage({ dataSourceId: this.dataSourceId, type: EventType.TIME_CHANGED, - clearLayers + didStartTimeChange }); await this.disconnect(); diff --git a/source/core/timesync/DataSynchronizer.js b/source/core/timesync/DataSynchronizer.js index b19067ddab..d36e908a7a 100644 --- a/source/core/timesync/DataSynchronizer.js +++ b/source/core/timesync/DataSynchronizer.js @@ -287,9 +287,9 @@ class DataSynchronizer { async setTimeRange(startTime = this.getStartTimeAsIsoDate(), endTime = this.getEndTimeAsIsoDate(), replaySpeed = this.getReplaySpeed(), - reconnect = false, - clearLayers = true) { - return this.dataSynchronizer.setTimeRange(startTime, endTime, replaySpeed, reconnect, clearLayers); + reconnect = false) { + const didStartTimeChange = startTime !== this.getStartTimeAsIsoDate(); + return this.dataSynchronizer.setTimeRange(startTime, endTime, replaySpeed, reconnect, didStartTimeChange); } async updateProperties(properties) { diff --git a/source/core/ui/view/View.js b/source/core/ui/view/View.js index 6e870ccba6..9b311de5f0 100755 --- a/source/core/ui/view/View.js +++ b/source/core/ui/view/View.js @@ -257,7 +257,7 @@ class View { const timeBroadcastChannel = new BroadcastChannel(DATASOURCE_TIME_TOPIC+dataSourceId); timeBroadcastChannel.onmessage = (event) => { // skip data reset events for now - if (event.data.type === EventType.TIME_CHANGED && event.data.clearLayers) { + if (event.data.type === EventType.TIME_CHANGED && !event.data.didStartTimeChange) { // hm but are there scenarios where start time didnt change but we still want to clear? self.reset(); // on time changed } }; From 3ed4c660c136daf9a787b143d5e105b6b2f89dad Mon Sep 17 00:00:00 2001 From: Philip Khaisman Date: Wed, 15 Apr 2026 11:33:39 -0400 Subject: [PATCH 08/10] Change prop to describe start vs resume action --- .../core/datasource/TimeSeries.datasource.js | 4 ++-- .../TimeSeries.replay.datasource.js | 4 ++-- .../common/handler/TimeSeries.handler.js | 3 +-- source/core/timesync/DataSynchronizer.js | 3 +-- .../replay/DataSynchronizer.replay.js | 23 +++++++++++-------- source/core/ui/view/View.js | 2 +- 6 files changed, 20 insertions(+), 19 deletions(-) diff --git a/source/core/datasource/TimeSeries.datasource.js b/source/core/datasource/TimeSeries.datasource.js index 58eb0b39aa..19556350fd 100644 --- a/source/core/datasource/TimeSeries.datasource.js +++ b/source/core/datasource/TimeSeries.datasource.js @@ -256,12 +256,12 @@ class TimeSeriesDatasource { endTime= this.getEndTimeAsIsoDate(), replaySpeed= this.getReplaySpeed(), reconnect= false, - didStartTimeChange= false, + startReplayAction = "start", mode= this.getMode(), version = this.version() ) { - return this.timeSeriesDataSource.setTimeRange(startTime,endTime,replaySpeed,reconnect,didStartTimeChange,mode,version); + return this.timeSeriesDataSource.setTimeRange(startTime,endTime,replaySpeed,reconnect,startReplayAction,mode,version); } /***********************************/ diff --git a/source/core/datasource/TimeSeries.replay.datasource.js b/source/core/datasource/TimeSeries.replay.datasource.js index d1bfe806d0..7bffc1bf22 100644 --- a/source/core/datasource/TimeSeries.replay.datasource.js +++ b/source/core/datasource/TimeSeries.replay.datasource.js @@ -307,7 +307,7 @@ class TimeSeriesReplayDatasource extends DataSource { endTime = this.getEndTimeAsIsoDate(), replaySpeed = this.getReplaySpeed(), reconnect = false, - didStartTimeChange = false, + startReplayAction = "start", mode = this.getMode(), version = this.version() ) { @@ -330,7 +330,7 @@ class TimeSeriesReplayDatasource extends DataSource { endTime: this.getEndTimeAsIsoDate(), replaySpeed, reconnect, - didStartTimeChange, + startReplayAction, mode, version, }); diff --git a/source/core/datasource/common/handler/TimeSeries.handler.js b/source/core/datasource/common/handler/TimeSeries.handler.js index 76f1229dc2..6ca5dbc132 100644 --- a/source/core/datasource/common/handler/TimeSeries.handler.js +++ b/source/core/datasource/common/handler/TimeSeries.handler.js @@ -292,12 +292,11 @@ class TimeSeriesHandler extends DataSourceHandler { } async updateProperties(properties) { - const didStartTimeChange = properties.didStartTimeChange == null ? false : properties.didStartTimeChange; try { this.timeBroadcastChannel.postMessage({ dataSourceId: this.dataSourceId, type: EventType.TIME_CHANGED, - didStartTimeChange + startReplayAction: properties.startReplayAction }); await this.disconnect(); diff --git a/source/core/timesync/DataSynchronizer.js b/source/core/timesync/DataSynchronizer.js index d36e908a7a..9f5a3e270f 100644 --- a/source/core/timesync/DataSynchronizer.js +++ b/source/core/timesync/DataSynchronizer.js @@ -288,8 +288,7 @@ class DataSynchronizer { endTime = this.getEndTimeAsIsoDate(), replaySpeed = this.getReplaySpeed(), reconnect = false) { - const didStartTimeChange = startTime !== this.getStartTimeAsIsoDate(); - return this.dataSynchronizer.setTimeRange(startTime, endTime, replaySpeed, reconnect, didStartTimeChange); + return this.dataSynchronizer.setTimeRange(startTime, endTime, replaySpeed, reconnect); } async updateProperties(properties) { diff --git a/source/core/timesync/replay/DataSynchronizer.replay.js b/source/core/timesync/replay/DataSynchronizer.replay.js index ed4bee06d1..d36505b37c 100644 --- a/source/core/timesync/replay/DataSynchronizer.replay.js +++ b/source/core/timesync/replay/DataSynchronizer.replay.js @@ -51,8 +51,9 @@ class DataSynchronizerReplay { this.properties.endTimestamp = undefined; this.properties.minTimestamp = undefined; this.properties.maxTimestamp = undefined; - this.properties.clearLayers = true; this.properties.version = 0; + // i want to improve this var name. also define an enum for valid values + this.properties.startReplayAction = undefined // start, resume, restart. what about init. or maybe just start and resume if (isDefined(properties)) { if (isDefined(properties.minTime)) { @@ -223,10 +224,6 @@ class DataSynchronizerReplay { return this.replaySpeed; } - getClearLayers() { - return this.properties.clearLayers; - } - /** * Terminate the corresponding running WebWorker by calling terminate() on it. */ @@ -244,6 +241,14 @@ class DataSynchronizerReplay { return Mode.REPLAY; } + getStartReplayAction() { + return this.properties.startReplayAction; + } + + setStartReplayAction(startReplayAction) { + this.properties.startReplayAction = startReplayAction; + } + //----------- ASYNCHRONOUS FUNCTIONS -----------------// async initDataSources() { @@ -423,7 +428,7 @@ class DataSynchronizerReplay { this.checkStartEndTime(); await this.updateAlgo(); for (let dataSource of this.dataSources) { - await dataSource.setTimeRange(this.getStartTimeAsIsoDate(), this.getEndTimeAsIsoDate(), this.getReplaySpeed(), true, this.getClearLayers()); + await dataSource.setTimeRange(this.getStartTimeAsIsoDate(), this.getEndTimeAsIsoDate(), this.getReplaySpeed(), true); } @@ -468,13 +473,11 @@ class DataSynchronizerReplay { async setTimeRange(startTime = this.getStartTimeAsIsoDate(), endTime = this.getEndTimeAsIsoDate(), replaySpeed = this.getReplaySpeed(), - reconnect = false, - clearLayers = true) { + reconnect = false) { await this.disconnect(); this.incVersion(); // update properties of DataSynchronizer this.replaySpeed = replaySpeed; - this.properties.clearLayers = clearLayers; await this.setStartTime(startTime, false); await this.setEndTime(endTime, false); @@ -487,7 +490,7 @@ class DataSynchronizerReplay { this.getEndTimeAsIsoDate(), this.getReplaySpeed(), false, - this.getClearLayers(), + this.getStartReplayAction(), this.getMode(), this.version(), )); diff --git a/source/core/ui/view/View.js b/source/core/ui/view/View.js index 9b311de5f0..b915bacf2e 100755 --- a/source/core/ui/view/View.js +++ b/source/core/ui/view/View.js @@ -257,7 +257,7 @@ class View { const timeBroadcastChannel = new BroadcastChannel(DATASOURCE_TIME_TOPIC+dataSourceId); timeBroadcastChannel.onmessage = (event) => { // skip data reset events for now - if (event.data.type === EventType.TIME_CHANGED && !event.data.didStartTimeChange) { // hm but are there scenarios where start time didnt change but we still want to clear? + if (event.data.type === EventType.TIME_CHANGED && event.data.startReplayAction !== 'resume') { self.reset(); // on time changed } }; From 4f10cfcd7e738c9c1e631b7eb9598749f5b415e0 Mon Sep 17 00:00:00 2001 From: Philip Khaisman Date: Wed, 15 Apr 2026 11:59:37 -0400 Subject: [PATCH 09/10] Pass arg to setTimeRange in doConnect method --- source/core/timesync/replay/DataSynchronizer.replay.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/core/timesync/replay/DataSynchronizer.replay.js b/source/core/timesync/replay/DataSynchronizer.replay.js index d36505b37c..1c36f464bc 100644 --- a/source/core/timesync/replay/DataSynchronizer.replay.js +++ b/source/core/timesync/replay/DataSynchronizer.replay.js @@ -428,7 +428,7 @@ class DataSynchronizerReplay { this.checkStartEndTime(); await this.updateAlgo(); for (let dataSource of this.dataSources) { - await dataSource.setTimeRange(this.getStartTimeAsIsoDate(), this.getEndTimeAsIsoDate(), this.getReplaySpeed(), true); + await dataSource.setTimeRange(this.getStartTimeAsIsoDate(), this.getEndTimeAsIsoDate(), this.getReplaySpeed(), true, this.getStartReplayAction()); } From 50d6a6cf91a3a7f226c2d7745981a43456b21020 Mon Sep 17 00:00:00 2001 From: Philip Khaisman Date: Wed, 15 Apr 2026 12:12:20 -0400 Subject: [PATCH 10/10] Change prop name to resumePlayback and default to false --- source/core/datasource/TimeSeries.datasource.js | 4 ++-- .../datasource/TimeSeries.replay.datasource.js | 4 ++-- .../common/handler/TimeSeries.handler.js | 2 +- .../timesync/replay/DataSynchronizer.replay.js | 15 +++++++-------- source/core/ui/view/View.js | 2 +- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/source/core/datasource/TimeSeries.datasource.js b/source/core/datasource/TimeSeries.datasource.js index 19556350fd..c24c4e321f 100644 --- a/source/core/datasource/TimeSeries.datasource.js +++ b/source/core/datasource/TimeSeries.datasource.js @@ -256,12 +256,12 @@ class TimeSeriesDatasource { endTime= this.getEndTimeAsIsoDate(), replaySpeed= this.getReplaySpeed(), reconnect= false, - startReplayAction = "start", + resumePlayback = false, mode= this.getMode(), version = this.version() ) { - return this.timeSeriesDataSource.setTimeRange(startTime,endTime,replaySpeed,reconnect,startReplayAction,mode,version); + return this.timeSeriesDataSource.setTimeRange(startTime,endTime,replaySpeed,reconnect,resumePlayback,mode,version); } /***********************************/ diff --git a/source/core/datasource/TimeSeries.replay.datasource.js b/source/core/datasource/TimeSeries.replay.datasource.js index 7bffc1bf22..5fa54dd419 100644 --- a/source/core/datasource/TimeSeries.replay.datasource.js +++ b/source/core/datasource/TimeSeries.replay.datasource.js @@ -307,7 +307,7 @@ class TimeSeriesReplayDatasource extends DataSource { endTime = this.getEndTimeAsIsoDate(), replaySpeed = this.getReplaySpeed(), reconnect = false, - startReplayAction = "start", + resumePlayback = false, mode = this.getMode(), version = this.version() ) { @@ -330,7 +330,7 @@ class TimeSeriesReplayDatasource extends DataSource { endTime: this.getEndTimeAsIsoDate(), replaySpeed, reconnect, - startReplayAction, + resumePlayback, mode, version, }); diff --git a/source/core/datasource/common/handler/TimeSeries.handler.js b/source/core/datasource/common/handler/TimeSeries.handler.js index 6ca5dbc132..bfed5db93f 100644 --- a/source/core/datasource/common/handler/TimeSeries.handler.js +++ b/source/core/datasource/common/handler/TimeSeries.handler.js @@ -296,7 +296,7 @@ class TimeSeriesHandler extends DataSourceHandler { this.timeBroadcastChannel.postMessage({ dataSourceId: this.dataSourceId, type: EventType.TIME_CHANGED, - startReplayAction: properties.startReplayAction + resumePlayback: properties.resumePlayback }); await this.disconnect(); diff --git a/source/core/timesync/replay/DataSynchronizer.replay.js b/source/core/timesync/replay/DataSynchronizer.replay.js index 1c36f464bc..ae84520fd4 100644 --- a/source/core/timesync/replay/DataSynchronizer.replay.js +++ b/source/core/timesync/replay/DataSynchronizer.replay.js @@ -52,8 +52,7 @@ class DataSynchronizerReplay { this.properties.minTimestamp = undefined; this.properties.maxTimestamp = undefined; this.properties.version = 0; - // i want to improve this var name. also define an enum for valid values - this.properties.startReplayAction = undefined // start, resume, restart. what about init. or maybe just start and resume + this.properties.resumePlayback = false; if (isDefined(properties)) { if (isDefined(properties.minTime)) { @@ -241,12 +240,12 @@ class DataSynchronizerReplay { return Mode.REPLAY; } - getStartReplayAction() { - return this.properties.startReplayAction; + getResumePlayback() { + return this.properties.resumePlayback; } - setStartReplayAction(startReplayAction) { - this.properties.startReplayAction = startReplayAction; + setResumePlayback(resumePlayback) { + this.properties.resumePlayback = resumePlayback; } //----------- ASYNCHRONOUS FUNCTIONS -----------------// @@ -428,7 +427,7 @@ class DataSynchronizerReplay { this.checkStartEndTime(); await this.updateAlgo(); for (let dataSource of this.dataSources) { - await dataSource.setTimeRange(this.getStartTimeAsIsoDate(), this.getEndTimeAsIsoDate(), this.getReplaySpeed(), true, this.getStartReplayAction()); + await dataSource.setTimeRange(this.getStartTimeAsIsoDate(), this.getEndTimeAsIsoDate(), this.getReplaySpeed(), true, this.getResumePlayback()); } @@ -490,7 +489,7 @@ class DataSynchronizerReplay { this.getEndTimeAsIsoDate(), this.getReplaySpeed(), false, - this.getStartReplayAction(), + this.getResumePlayback(), this.getMode(), this.version(), )); diff --git a/source/core/ui/view/View.js b/source/core/ui/view/View.js index b915bacf2e..a5b0b6b1ee 100755 --- a/source/core/ui/view/View.js +++ b/source/core/ui/view/View.js @@ -257,7 +257,7 @@ class View { const timeBroadcastChannel = new BroadcastChannel(DATASOURCE_TIME_TOPIC+dataSourceId); timeBroadcastChannel.onmessage = (event) => { // skip data reset events for now - if (event.data.type === EventType.TIME_CHANGED && event.data.startReplayAction !== 'resume') { + if (event.data.type === EventType.TIME_CHANGED && !event.data.resumePlayback) { self.reset(); // on time changed } };