2021-07-16 19:36:30 +03:00
|
|
|
module Timestamps exposing (Timestamps, data, format)
|
|
|
|
|
|
|
|
import DataSource exposing (DataSource)
|
|
|
|
import DataSource.Port
|
|
|
|
import DateFormat
|
|
|
|
import Json.Encode
|
|
|
|
import List.Extra
|
|
|
|
import OptimizedDecoder as Decode exposing (Decoder)
|
|
|
|
import Result.Extra
|
|
|
|
import Time
|
|
|
|
|
|
|
|
|
|
|
|
type alias Timestamps =
|
|
|
|
{ updated : Time.Posix
|
|
|
|
, created : Time.Posix
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
data : String -> DataSource Timestamps
|
|
|
|
data filePath =
|
2021-07-31 00:33:28 +03:00
|
|
|
DataSource.Port.get "gitTimestamps"
|
2021-07-16 19:36:30 +03:00
|
|
|
(Json.Encode.string filePath)
|
|
|
|
(Decode.string
|
|
|
|
|> Decode.map (String.trim >> String.split "\n")
|
|
|
|
|> Decode.map (List.map secondsStringToPosix)
|
|
|
|
|> Decode.map Result.Extra.combine
|
2021-08-13 18:29:05 +03:00
|
|
|
|> Decode.map
|
|
|
|
(Result.withDefault
|
|
|
|
[ Time.millisToPosix 0
|
|
|
|
, Time.millisToPosix 0
|
|
|
|
]
|
|
|
|
)
|
2021-07-16 19:36:30 +03:00
|
|
|
|> Decode.map (firstAndLast Timestamps >> Result.fromMaybe "Error")
|
|
|
|
|> Decode.andThen Decode.fromResult
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
firstAndLast : (a -> a -> b) -> List a -> Maybe b
|
|
|
|
firstAndLast constructor list =
|
|
|
|
Maybe.map2 constructor
|
|
|
|
(List.head list)
|
|
|
|
(List.Extra.last list)
|
|
|
|
|
|
|
|
|
|
|
|
secondsStringToPosix : String -> Result String Time.Posix
|
|
|
|
secondsStringToPosix posixTime =
|
|
|
|
posixTime
|
|
|
|
|> String.trim
|
|
|
|
|> String.toInt
|
|
|
|
|> Maybe.map (\unixTimeInSeconds -> (unixTimeInSeconds * 1000) |> Time.millisToPosix)
|
|
|
|
|> Result.fromMaybe "Expected int"
|
|
|
|
|
|
|
|
|
|
|
|
format : Time.Posix -> String
|
|
|
|
format posix =
|
|
|
|
DateFormat.format
|
|
|
|
[ DateFormat.monthNameFull
|
|
|
|
, DateFormat.text " "
|
|
|
|
, DateFormat.dayOfMonthNumber
|
|
|
|
, DateFormat.text ", "
|
|
|
|
, DateFormat.yearNumber
|
|
|
|
]
|
|
|
|
pacificZone
|
|
|
|
posix
|
|
|
|
|
|
|
|
|
|
|
|
pacificZone : Time.Zone
|
|
|
|
pacificZone =
|
|
|
|
Time.customZone (-60 * 7) []
|