mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Health Connect: Use dedicated query for GenericHeartRate first-sample lookup
Replace client-side takeIf filter with a proper DB query using Timestamp.gt(after) so that the first valid sample is found even when the absolute oldest row has a non-positive timestamp.
This commit is contained in:
+14
-1
@@ -16,11 +16,13 @@
|
|||||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||||
package nodomain.freeyourgadget.gadgetbridge.devices.generic_hr
|
package nodomain.freeyourgadget.gadgetbridge.devices.generic_hr
|
||||||
|
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.GenericHeartRateSampleProvider
|
import nodomain.freeyourgadget.gadgetbridge.devices.GenericHeartRateSampleProvider
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider
|
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider
|
||||||
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession
|
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession
|
||||||
import nodomain.freeyourgadget.gadgetbridge.entities.GenericActivitySample
|
import nodomain.freeyourgadget.gadgetbridge.entities.GenericActivitySample
|
||||||
import nodomain.freeyourgadget.gadgetbridge.entities.GenericHeartRateSample
|
import nodomain.freeyourgadget.gadgetbridge.entities.GenericHeartRateSample
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.entities.GenericHeartRateSampleDao
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind
|
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind
|
||||||
|
|
||||||
@@ -89,7 +91,18 @@ open class GenericHeartRateActivitySampleProvider(device: GBDevice, session: Dao
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getFirstActivitySample(after: Int): GenericActivitySample? {
|
override fun getFirstActivitySample(after: Int): GenericActivitySample? {
|
||||||
return getFirstActivitySample()?.takeIf { it.timestamp > after }
|
val afterMillis = after.toLong() * 1000
|
||||||
|
val device = DBHelper.findDevice(heartRateProvider.device, heartRateProvider.session) ?: return null
|
||||||
|
val samples = heartRateProvider.sampleDao.queryBuilder()
|
||||||
|
.where(
|
||||||
|
GenericHeartRateSampleDao.Properties.Timestamp.gt(afterMillis),
|
||||||
|
GenericHeartRateSampleDao.Properties.DeviceId.eq(device.id)
|
||||||
|
)
|
||||||
|
.orderAsc(GenericHeartRateSampleDao.Properties.Timestamp)
|
||||||
|
.limit(1)
|
||||||
|
.build()
|
||||||
|
.list()
|
||||||
|
return samples.firstOrNull()?.let { toGenericActivitySample(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun toGenericActivitySample(hrSample: GenericHeartRateSample): GenericActivitySample {
|
private fun toGenericActivitySample(hrSample: GenericHeartRateSample): GenericActivitySample {
|
||||||
|
|||||||
Reference in New Issue
Block a user