Add cross-device timer sync via WebDAV
When a sleep or breastfeeding timer is started, an "ongoing" event is immediately saved to the logbook and synced via WebDAV. Other devices detect this event on sync and can display/stop the timer. This allows partners to stop timers started on another device. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -31,6 +31,20 @@ class LunaEvent: Comparable<LunaEvent> {
|
||||
const val TYPE_PUKE = "PUKE"
|
||||
const val TYPE_BATH = "BATH"
|
||||
const val TYPE_SLEEP = "SLEEP"
|
||||
|
||||
val BREASTFEEDING_TYPES = listOf(
|
||||
TYPE_BREASTFEEDING_LEFT_NIPPLE,
|
||||
TYPE_BREASTFEEDING_BOTH_NIPPLE,
|
||||
TYPE_BREASTFEEDING_RIGHT_NIPPLE
|
||||
)
|
||||
|
||||
fun findOngoing(events: List<LunaEvent>, type: String): LunaEvent? {
|
||||
return events.firstOrNull { it.ongoing && it.type == type }
|
||||
}
|
||||
|
||||
fun findOngoingBreastfeeding(events: List<LunaEvent>): LunaEvent? {
|
||||
return events.firstOrNull { it.ongoing && it.type in BREASTFEEDING_TYPES }
|
||||
}
|
||||
}
|
||||
|
||||
private val jo: JSONObject
|
||||
@@ -62,6 +76,14 @@ class LunaEvent: Comparable<LunaEvent> {
|
||||
if (value.isNotEmpty())
|
||||
jo.put("signature", value)
|
||||
}
|
||||
var ongoing: Boolean
|
||||
get() = jo.optInt("ongoing", 0) == 1
|
||||
set(value) {
|
||||
if (value)
|
||||
jo.put("ongoing", 1)
|
||||
else
|
||||
jo.remove("ongoing")
|
||||
}
|
||||
|
||||
constructor(jo: JSONObject) {
|
||||
this.jo = jo
|
||||
@@ -138,6 +160,16 @@ class LunaEvent: Comparable<LunaEvent> {
|
||||
}
|
||||
}
|
||||
|
||||
fun finalizeOngoing(endTimeMillis: Long) {
|
||||
if (!ongoing) return
|
||||
val startTimeSeconds = this.time
|
||||
val endTimeSeconds = endTimeMillis / 1000
|
||||
val durationMinutes = Math.max(1, ((endTimeSeconds - startTimeSeconds) / 60).toInt())
|
||||
this.time = endTimeSeconds
|
||||
this.quantity = durationMinutes
|
||||
this.ongoing = false
|
||||
}
|
||||
|
||||
fun toJson(): JSONObject {
|
||||
return jo
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user