♻️ Moves analytics subscription handling to store

This commit is contained in:
Rune Harlyk
2026-01-03 17:41:42 +01:00
committed by nikguin04
parent 39f9e47e59
commit a31e001eb5
6 changed files with 128 additions and 81 deletions
+22 -7
View File
@@ -1,19 +1,34 @@
import { AnalyticsData } from '$lib/platform_shared/message'
import { writable } from 'svelte/store'
const analytics_data: AnalyticsData[] = []
import { socket } from './socket'
const maxAnalyticsData = 100
function createAnalytics() {
const { subscribe, update } = writable(analytics_data)
const { subscribe, update } = writable<AnalyticsData[]>([])
let unsubscribe: (() => void) | null = null
let listenerCount = 0
const addData = (content: AnalyticsData) => {
update(data => [...data, content].slice(-maxAnalyticsData))
}
return {
subscribe,
addData: (content: AnalyticsData) => {
update(analytics_data => {
return [...analytics_data, content].slice(-maxAnalyticsData)
})
addData,
listen: () => {
listenerCount++
if (!unsubscribe) {
unsubscribe = socket.on(AnalyticsData, addData)
}
},
stop: () => {
listenerCount = Math.max(0, listenerCount - 1)
if (listenerCount === 0 && unsubscribe) {
unsubscribe()
unsubscribe = null
}
}
}
}
+50
View File
@@ -1,3 +1,53 @@
export enum MessageTopic {
imu = 'imu',
imuCalibrate = 'imuCalibrate',
mode = 'mode',
input = 'input',
analytics = 'analytics',
position = 'position',
angles = 'angles',
i2cScan = 'i2cScan',
peripheralSettings = 'peripheralSettings',
otastatus = 'otastatus',
gait = 'walk_gait',
servoState = 'servoState',
servoPWM = 'servoPWM',
WiFiSettings = 'WiFiSettings',
sonar = 'sonar',
rssi = 'rssi'
}
export type WifiStatus = {
status: number
local_ip: string
mac_address: string
rssi: number
ssid: string
bssid: string
channel: number
subnet_mask: string
gateway_ip: string
dns_ip_1: string
dns_ip_2?: string
}
export type KnownNetworkItem = {
ssid: string
password: string
static_ip_config: boolean
local_ip?: string
subnet_mask?: string
gateway_ip?: string
dns_ip_1?: string
dns_ip_2?: string
}
export type WifiSettings = {
hostname: string
priority_RSSI: boolean
wifi_networks: KnownNetworkItem[]
}
export type vector = { x: number; y: number }
export type GithubRelease = {