{-# 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 -- Qso defaultQsoTime defaultQsoTime (MHz 0) PH mempty mempty (RST 0 0 0) mempty mempty mempty (RST 0 0 0) mempty mempty 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