Refactor data sources and feed model

This commit is contained in:
2026-01-10 00:25:36 +00:00
parent 1e65a3f57d
commit 324b35a464
15 changed files with 631 additions and 609 deletions

View File

@@ -24,7 +24,7 @@ final class LocalServer: ObservableObject {
private var listener: NWListener?
private var browser: NWBrowser?
private var startDate = Date()
private var currentEnvelope: WinnerEnvelope
private var currentEnvelope: FeedEnvelope
private var heartbeatTimer: DispatchSourceTimer?
private var addressTimer: DispatchSourceTimer?
private var requestBuffers: [ObjectIdentifier: Data] = [:]
@@ -32,20 +32,7 @@ final class LocalServer: ObservableObject {
init(port: Int = 8765) {
self.port = port
let winner = Winner(
id: "quiet-000",
type: .allQuiet,
title: "All Quiet",
subtitle: "No urgent updates",
priority: 0.05,
ttlSec: 300
)
self.currentEnvelope = WinnerEnvelope(
schema: 1,
generatedAt: Int(Date().timeIntervalSince1970),
winner: winner,
debug: nil
)
self.currentEnvelope = FeedEnvelope.allQuiet(now: Int(Date().timeIntervalSince1970), reason: "no_feed", source: "server")
}
var testURL: String {
@@ -97,15 +84,15 @@ final class LocalServer: ObservableObject {
}
}
func broadcastWinner(_ envelope: WinnerEnvelope) {
let validated = (try? validateEnvelope(envelope)) ?? envelope
currentEnvelope = validated
func broadcastFeed(_ envelope: FeedEnvelope) {
currentEnvelope = envelope
let winner = envelope.winnerItem()
DispatchQueue.main.async {
self.lastWinnerTitle = validated.winner.title
self.lastWinnerSubtitle = validated.winner.subtitle
self.lastWinnerTitle = winner?.title ?? "All Quiet"
self.lastWinnerSubtitle = winner?.subtitle ?? "No urgent updates"
self.lastBroadcastAt = Date()
}
let data = sseEvent(name: "winner", payload: jsonLine(from: validated))
let data = sseEvent(name: "feed", payload: jsonLine(from: envelope))
broadcast(data: data)
}
@@ -312,7 +299,7 @@ final class LocalServer: ObservableObject {
}
}
private func jsonLine(from envelope: WinnerEnvelope) -> String {
private func jsonLine(from envelope: FeedEnvelope) -> String {
let encoder = JSONEncoder()
if let data = try? encoder.encode(envelope),
let string = String(data: data, encoding: .utf8) {