{-# LANGUAGE OverloadedStrings, TemplateHaskell #-} module Ham.Internal.Qso where import Data.Char (isDigit, digitToInt) import Data.List (all) import Data.Text import Data.Time.Clock import Data.Time.Calendar import Data.Time.LocalTime import Data.Aeson import Data.Aeson.TH import Lens.Micro.TH import Ham.Internal.Data -- | Contains information about a ham radio contact. data Qso = Qso { _qsoTimeStart :: UTCTime , _qsoTimeEnd :: UTCTime , _qsoFrequency :: Frequency , _qsoMode :: QsoMode , _qsoCallsign :: Text , _qsoLocation :: Text , _qsoRST :: RST , _qsoExchange :: Text , _qsoSentCallsign :: Text , _qsoSentLocation :: Text , _qsoSentRST :: RST , _qsoSentExchange :: Text , _qsoNotes :: Text } deriving (Show, Eq) -- | Sanitizing a Qso. -- Strips leading and trailing whitespace and converts to upper case. sanitizeQso :: Qso -> Qso sanitizeQso q = q { _qsoCallsign = toUpper $ strip $ _qsoCallsign q } data DefaultValue a = FixedValue a | DefaultValue a deriving (Show, Read) defaultValueGet :: DefaultValue a -> a defaultValueGet (FixedValue a) = a defaultValueGet (DefaultValue a) = a --instance Show a => Show (DefaultValue a) --instance Read a => Read (DefaultValue a) -- | Default values to fill in to a 'Qso'. -- These are kept in the configuration. -- For each entry in 'Qso', there is one default that either marks one -- as fixed value, or changeable value. data QsoDefaults = QsoDefaults { _qsoDefaultTimeStart :: DefaultValue UTCTime , _qsoDefaultTimeEnd :: DefaultValue UTCTime , _qsoDefaultFrequency :: DefaultValue Frequency , _qsoDefaultMode :: DefaultValue QsoMode , _qsoDefaultCallsign :: DefaultValue Text , _qsoDefaultLocation :: DefaultValue Text , _qsoDefaultRST :: DefaultValue RST , _qsoDefaultExchange :: DefaultValue Text , _qsoDefaultSentCallsign :: DefaultValue Text , _qsoDefaultSentLocation :: DefaultValue Text , _qsoDefaultSentRST :: DefaultValue RST , _qsoDefaultSentExchange :: DefaultValue Text , _qsoDefaultNotes :: DefaultValue Text } deriving (Show, Read) makeLenses ''Qso $(deriveJSON defaultOptions ''Qso) $(deriveJSON defaultOptions ''DefaultValue) $(deriveJSON defaultOptions ''QsoDefaults)