@@ -51,6 +51,7 @@ import com.health.openscale.sync.R
5151import com.health.openscale.sync.core.datatypes.OpenScaleMeasurement
5252import com.health.openscale.sync.core.model.MQTTViewModel
5353import com.health.openscale.sync.core.model.ViewModelInterface
54+ import com.health.openscale.sync.core.service.SyncResult
5455import com.health.openscale.sync.core.sync.MQTTSync
5556import com.hivemq.client.mqtt.MqttClient
5657import com.hivemq.client.mqtt.mqtt5.Mqtt5BlockingClient
@@ -123,31 +124,67 @@ class MQTTService(
123124
124125 override suspend fun sync (measurements : List <OpenScaleMeasurement >): SyncResult <Unit > {
125126 return ensureConnectedAndExecute(" fullSync" ) {syncHandler ->
126- syncHandler.fullSync(measurements)
127+ val result = syncHandler.fullSync(measurements)
128+ if (result is SyncResult .Success ) {
129+ measurements.maxByOrNull { it.date }?.let { publishLastMeasurement(it) }
130+ }
131+ result
127132 }
128133 }
129134
130135 override suspend fun insert (measurement : OpenScaleMeasurement ): SyncResult <Unit > {
131136 return ensureConnectedAndExecute(" insert" ) { syncHandler ->
132- syncHandler.insert(measurement)
137+ val result = syncHandler.insert(measurement)
138+ if (result is SyncResult .Success ) {
139+ publishLastMeasurement(measurement)
140+ }
141+ result
133142 }
134143 }
135144
136145 override suspend fun delete (date : Date ): SyncResult <Unit > {
137146 return ensureConnectedAndExecute(" delete" ) { syncHandler ->
138- syncHandler.delete(date)
147+ val result = syncHandler.delete(date)
148+ if (result is SyncResult .Success ) {
149+ val lastDate = viewModel.lastPublishedDate.value
150+ if (lastDate != null && date.time >= lastDate) {
151+ publishLastMeasurement(null )
152+ }
153+ }
154+ result
139155 }
140156 }
141157
142158 override suspend fun clear (): SyncResult <Unit > {
143159 return ensureConnectedAndExecute(" clear" ) { syncHandler ->
144- syncHandler.clear()
160+ val result = syncHandler.clear()
161+ if (result is SyncResult .Success ) {
162+ publishLastMeasurement(null )
163+ }
164+ result
145165 }
146166 }
147167
148168 override suspend fun update (measurement : OpenScaleMeasurement ): SyncResult <Unit > {
149169 return ensureConnectedAndExecute(" update" ) { syncHandler ->
150- syncHandler.update(measurement)
170+ val result = syncHandler.update(measurement)
171+ if (result is SyncResult .Success ) {
172+ publishLastMeasurement(measurement)
173+ }
174+ result
175+ }
176+ }
177+
178+ private fun publishLastMeasurement (measurement : OpenScaleMeasurement ? ) {
179+ if (measurement != null ) {
180+ val lastDate = viewModel.lastPublishedDate.value
181+ if (lastDate == null || measurement.date.time >= lastDate) {
182+ mqttSync.publishLastMeasurement(measurement)
183+ viewModel.setLastPublishedDate(measurement.date.time)
184+ }
185+ } else {
186+ mqttSync.publishLastMeasurement(null )
187+ viewModel.setLastPublishedDate(0L )
151188 }
152189 }
153190
0 commit comments