{-# LANGUAGE OverloadedStrings #-}
module Ham.Qso
(
QsoMode(..),
Qso(..),
QsoDefaults(..), DefaultValue(..),
emptyQso, qsoWithDefaults, emptyQsoDefaults, Frequency(..),
sanitizeQso,
qsoTimeStart,
qsoTimeEnd,
qsoFrequency,
qsoMode,
qsoCallsign,
qsoLocation,
qsoRST,
qsoExchange,
qsoSentCallsign,
qsoSentLocation,
qsoSentRST,
qsoSentExchange,
qsoNotes,
module Data.Time.Clock,
module Data.Time.Calendar,
module Data.Time.LocalTime
) where
import Ham.Internal.Qso
import qualified Ham.Cabrillo as C
import Ham.Cabrillo (ToCabrillo)
import Ham.Data as D
import Data.Time.Clock
import Data.Time.Calendar
import Data.Time.LocalTime
import Data.Text (unpack)
defaultQsoTime = UTCTime (fromGregorian 2018 01 22) (timeOfDayToTime $ TimeOfDay 00 00 00)
emptyQso = qsoWithDefaults emptyQsoDefaults
emptyQsoDefaults = QsoDefaults (DefaultValue defaultQsoTime) (DefaultValue defaultQsoTime) (DefaultValue (MHz 0)) (DefaultValue PH) (DefaultValue mempty) (DefaultValue mempty) (DefaultValue (RST 0 0 0)) (DefaultValue mempty) (DefaultValue mempty) (DefaultValue mempty) (DefaultValue (RST 0 0 0)) (DefaultValue mempty) (DefaultValue mempty)
qsoWithDefaults :: QsoDefaults -> Qso
qsoWithDefaults d = q
where q = Qso {
_qsoTimeStart = f _qsoDefaultTimeStart
, _qsoTimeEnd = f _qsoDefaultTimeEnd
, _qsoFrequency = f _qsoDefaultFrequency
, _qsoMode = f _qsoDefaultMode
, _qsoCallsign = f _qsoDefaultCallsign
, _qsoLocation = f _qsoDefaultLocation
, _qsoRST = f _qsoDefaultRST
, _qsoExchange = f _qsoDefaultExchange
, _qsoSentCallsign = f _qsoDefaultSentCallsign
, _qsoSentLocation = f _qsoDefaultSentLocation
, _qsoSentRST = f _qsoDefaultSentRST
, _qsoSentExchange = f _qsoDefaultSentExchange
, _qsoNotes = f _qsoDefaultNotes
}
f a = defaultValueGet $ a d
instance ToCabrillo Qso where
toCabrillo q = [C.CLQso $ C.CabrilloQso (_qsoFrequency q)
(modeConvert (_qsoMode q))
(_qsoTimeStart q)
s
r
Nothing]
where s = C.CabrilloInfo (unpack $ _qsoSentCallsign q) (unpack $ _qsoSentExchange q)
r = C.CabrilloInfo (unpack $ _qsoCallsign q) (unpack $ _qsoExchange q)
modeConvert :: QsoMode -> C.Mode
modeConvert D.CW = C.CW
modeConvert D.PH = C.PH
modeConvert D.FM = C.FM
modeConvert D.RY = C.RY
modeConvert D.DATA = C.DG