⎇ 84d4ac3a07474bf1bcd21ee43b913b75d8b32180
consola/src/main/java/com/rizoma/consola/push/Push.kt
History
raw
consola: push en background vía UnifiedPush (ntfy)
1package com.rizoma.consola.push
2
3import android.content.Context
4import com.rizoma.consola.data.GatewayClient
5import com.rizoma.consola.data.Settings
6import kotlinx.coroutines.flow.first
7import org.unifiedpush.android.connector.UnifiedPush
8
9/**
10 * Pegamento UnifiedPush: registra la app con el distribuidor (la app ntfy) y
11 * sincroniza el endpoint resultante con el gateway, que es quien empuja los
12 * eventos por ese endpoint cuando consola está cerrada.
13 */
14object Push {
15 /**
16 * Registra con un distribuidor UnifiedPush si hay alguno instalado. Si no
17 * (no hay app ntfy), no hace nada y consola cae al WS de eventos como
18 * respaldo. Idempotente: re-registrar re-dispara `onNewEndpoint`.
19 */
20 fun ensureRegistered(ctx: Context) {
21 val dists = runCatching { UnifiedPush.getDistributors(ctx) }.getOrDefault(emptyList())
22 if (dists.isEmpty()) return
23 UnifiedPush.saveDistributor(ctx, dists.first())
24 UnifiedPush.registerApp(ctx)
25 }
26
27 suspend fun sendEndpoint(ctx: Context, endpoint: String) {
28 val cfg = Settings(ctx).config.first()
29 GatewayClient(cfg).registerUp(endpoint)
30 }
31}