module Model.Edition.TimeEdition ( keyCodeToChar , toTime , toMinutesAndSeconds ) where import Time (Time) import List import Array import String import Keyboard (KeyCode) import Utils.List (..) import Utils.Maybe (..) keyCodeToChar : KeyCode -> Maybe Char keyCodeToChar code = List.map (flip keyCodeToCharFromZero code) zeroKeyCodes |> List.foldl orElse Nothing zeroKeyCodes = [48, 96] keyCodeToCharFromZero : KeyCode -> KeyCode -> Maybe Char keyCodeToCharFromZero zero code = let 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 : List Char -> Time toTime numbers = numbers |> toMinutesAndSeconds |> \(a, b) -> (stringToInt a, stringToInt b) |> \(minutes, seconds) -> (toFloat minutes) * 60 * 1000 + (toFloat seconds) * 1000 toMinutesAndSeconds : List Char -> (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