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/>. */
|
||||
package nodomain.freeyourgadget.gadgetbridge.devices.generic_hr
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper
|
||||
import nodomain.freeyourgadget.gadgetbridge.devices.GenericHeartRateSampleProvider
|
||||
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider
|
||||
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession
|
||||
import nodomain.freeyourgadget.gadgetbridge.entities.GenericActivitySample
|
||||
import nodomain.freeyourgadget.gadgetbridge.entities.GenericHeartRateSample
|
||||
import nodomain.freeyourgadget.gadgetbridge.entities.GenericHeartRateSampleDao
|
||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind
|
||||
|
||||
@@ -89,7 +91,18 @@ open class GenericHeartRateActivitySampleProvider(device: GBDevice, session: Dao
|
||||
}
|
||||
|
||||
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 {
|
||||
|
||||
Reference in New Issue
Block a user