module Model.TimerEdition ( TimerEdition , Numbers , newTimerEdition , keyCodeToChar , toTime , toMinutesAndSeconds ) where import Time (Time) import List import Array import String import Keyboard (KeyCode) import Model.Id (..) import Utils.List (..) type alias TimerEdition = { id : Id , numbers : Numbers } type alias Numbers = List Char newTimerEdition id = { id = id , numbers = [] } keyCodeToChar : KeyCode -> Maybe Char keyCodeToChar code = let zero = 96 nine = zero + 9 in if code >= zero && code <= nine then ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] |> Array.fromList |> Array.get (code - zero) else Nothing toTime : Numbers -> Time toTime numbers = numbers |> toMinutesAndSeconds |> \(a, b) -> (stringToInt a, stringToInt b) |> \(minutes, seconds) -> (toFloat minutes) * 60 * 1000 + (toFloat seconds) * 1000 toMinutesAndSeconds : Numbers -> (String, String) toMinutesAndSeconds numbers = numbers |> List.take 4 |> List.reverse |> completeBegin '0' 4 |> splitAt 2 |> \(a, b) -> (String.fromList a, String.fromList b) completeBegin : a -> Int -> List a -> List a completeBegin x count xs = let length = List.length xs in List.append (repeat (count - length) x) xs stringToInt : String -> Int stringToInt str = str |> String.toInt |> \res -> case res of Ok n -> n Err _ -> 0