2021-07-04 08:24:49 +00:00
|
|
|
{-
|
2021-07-25 12:00:11 +00:00
|
|
|
Copyright 2020 Docspell Contributors
|
2021-07-04 08:24:49 +00:00
|
|
|
|
2021-07-25 12:00:11 +00:00
|
|
|
SPDX-License-Identifier: GPL-3.0-or-later
|
2021-07-04 08:24:49 +00:00
|
|
|
-}
|
|
|
|
|
2021-07-25 12:00:11 +00:00
|
|
|
|
2020-04-20 20:53:08 +00:00
|
|
|
module Data.CalEvent exposing
|
|
|
|
( CalEvent
|
|
|
|
, everyMonth
|
|
|
|
, fromEvent
|
|
|
|
, makeEvent
|
|
|
|
)
|
|
|
|
|
|
|
|
import Util.Maybe
|
|
|
|
|
|
|
|
|
|
|
|
type alias CalEvent =
|
|
|
|
{ weekday : Maybe String
|
|
|
|
, year : String
|
|
|
|
, month : String
|
|
|
|
, day : String
|
|
|
|
, hour : String
|
|
|
|
, minute : String
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
everyMonth : CalEvent
|
|
|
|
everyMonth =
|
|
|
|
CalEvent Nothing "*" "*" "01" "00" "00"
|
|
|
|
|
|
|
|
|
|
|
|
makeEvent : CalEvent -> String
|
|
|
|
makeEvent ev =
|
|
|
|
let
|
|
|
|
datetime =
|
|
|
|
ev.year
|
|
|
|
++ "-"
|
|
|
|
++ ev.month
|
|
|
|
++ "-"
|
|
|
|
++ ev.day
|
|
|
|
++ " "
|
|
|
|
++ ev.hour
|
|
|
|
++ ":"
|
|
|
|
++ ev.minute
|
|
|
|
in
|
|
|
|
case ev.weekday of
|
|
|
|
Just wd ->
|
|
|
|
wd ++ " " ++ datetime
|
|
|
|
|
|
|
|
Nothing ->
|
|
|
|
datetime
|
|
|
|
|
|
|
|
|
|
|
|
fromEvent : String -> Maybe CalEvent
|
|
|
|
fromEvent str =
|
|
|
|
let
|
|
|
|
init =
|
|
|
|
everyMonth
|
|
|
|
|
|
|
|
parts =
|
|
|
|
String.split " " str
|
|
|
|
in
|
|
|
|
case parts of
|
|
|
|
wd :: date :: time :: [] ->
|
|
|
|
Maybe.andThen
|
|
|
|
(fromDate date)
|
|
|
|
(fromTime time init)
|
|
|
|
|> Maybe.map (withWeekday wd)
|
|
|
|
|
|
|
|
date :: time :: [] ->
|
|
|
|
Maybe.andThen
|
|
|
|
(fromDate date)
|
|
|
|
(fromTime time init)
|
|
|
|
|
|
|
|
_ ->
|
|
|
|
Nothing
|
|
|
|
|
|
|
|
|
|
|
|
fromDate : String -> CalEvent -> Maybe CalEvent
|
|
|
|
fromDate date ev =
|
|
|
|
let
|
|
|
|
parts =
|
|
|
|
String.split "-" date
|
|
|
|
in
|
|
|
|
case parts of
|
|
|
|
y :: m :: d :: [] ->
|
|
|
|
Just
|
|
|
|
{ ev
|
|
|
|
| year = y
|
|
|
|
, month = m
|
|
|
|
, day = d
|
|
|
|
}
|
|
|
|
|
|
|
|
_ ->
|
|
|
|
Nothing
|
|
|
|
|
|
|
|
|
|
|
|
fromTime : String -> CalEvent -> Maybe CalEvent
|
|
|
|
fromTime time ev =
|
|
|
|
case String.split ":" time of
|
|
|
|
h :: m :: _ :: [] ->
|
|
|
|
Just { ev | hour = h, minute = m }
|
|
|
|
|
|
|
|
h :: m :: [] ->
|
|
|
|
Just { ev | hour = h, minute = m }
|
|
|
|
|
|
|
|
_ ->
|
|
|
|
Nothing
|
|
|
|
|
|
|
|
|
|
|
|
withWeekday : String -> CalEvent -> CalEvent
|
|
|
|
withWeekday wd ev =
|
|
|
|
{ ev | weekday = Util.Maybe.fromString wd }
|