first commit

This commit is contained in:
2026-03-17 20:20:23 +01:00
commit 354c7a9d99
32 changed files with 3253 additions and 0 deletions

97
internal/spot/spot.go Normal file
View File

@@ -0,0 +1,97 @@
package spot
import (
"fmt"
"time"
)
// SpotSource identifie l'origine d'un spot
type SpotSource int
const (
SourceCluster SpotSource = iota // Spot reçu depuis un cluster DX telnet
SourceManual // Spot ajouté manuellement depuis l'UI
)
// Spot est la struct universelle — remplace TelnetSpot + FlexSpot
// Plus de conversion entre les deux, tout passe par cette struct unique
type Spot struct {
// --- Persistance ---
ID int64
// --- Identité ---
DX string
Spotter string
// --- Fréquence ---
// FrequencyKHz est la source de vérité interne
// FrequencyMHz est le format string attendu par FlexRadio (ex: "14.195000")
FrequencyKHz float64
FrequencyMHz string
Band string
// --- Mode ---
Mode string
// --- Métadonnées cluster ---
Comment string
Time string // Format "1234Z"
Timestamp int64 // Unix timestamp
ReceivedAt time.Time
ClusterName string
Source SpotSource
// --- DXCC ---
DXCC string
CountryName string
// --- Flags Log4OM (calculés depuis la DB Log4OM) ---
NewDXCC bool
NewBand bool
NewMode bool
NewSlot bool
CallsignWorked bool
// --- Watchlist ---
InWatchlist bool
WatchlistNotify bool
// --- POTA / SOTA ---
POTARef string
SOTARef string
ParkName string
SummitName string
// --- FlexRadio panadapter ---
FlexSpotNumber int
CommandNumber int
Color string
BackgroundColor string
Priority string
LifeTime string
OriginalComment string
}
// FreqMHzString retourne la fréquence formatée pour FlexRadio
// ex: 14195.0 kHz → "14.195000"
func (s *Spot) FreqMHzString() string {
if s.FrequencyMHz != "" {
return s.FrequencyMHz
}
if s.FrequencyKHz > 1000 {
return formatMHz(s.FrequencyKHz / 1000.0)
}
return formatMHz(s.FrequencyKHz)
}
// FreqKHz retourne la fréquence en kHz depuis le champ disponible
func (s *Spot) FreqKHz() float64 {
if s.FrequencyKHz > 0 {
return s.FrequencyKHz
}
return 0
}
func formatMHz(mhz float64) string {
return fmt.Sprintf("%.6f", mhz)
}