feat(users/Profpatsch/sync-abfall): caldav vdirsyncer config gen
Gonna have to generate some vdirsyncer config, reusing the toIni stuff, nice. Change-Id: I036ce9990f70d3b035e47151f336d0d3971f2c91 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5888 Reviewed-by: Profpatsch <mail@profpatsch.de> Tested-by: BuildkiteCI
This commit is contained in:
parent
3c3713c69f
commit
7c0874c228
2 changed files with 157 additions and 1 deletions
|
@ -10,5 +10,22 @@ let
|
|||
]);
|
||||
} ./sync-ics-to-dir.py;
|
||||
|
||||
config =
|
||||
depot.users.Profpatsch.importDhall.importDhall
|
||||
{
|
||||
root = ./..;
|
||||
files = [
|
||||
"sync-abfall-ics-aichach-friedberg/ics-to-caldav.dhall"
|
||||
"dhall/lib.dhall"
|
||||
"ini/ini.dhall"
|
||||
];
|
||||
main = "sync-abfall-ics-aichach-friedberg/ics-to-caldav.dhall";
|
||||
deps = [
|
||||
];
|
||||
}
|
||||
depot.users.Profpatsch.ini.externs;
|
||||
|
||||
|
||||
|
||||
in
|
||||
sync-to-dir
|
||||
{ inherit config; }
|
||||
|
|
|
@ -0,0 +1,139 @@
|
|||
let Ini = ../ini/ini.dhall
|
||||
|
||||
let Lib = ../dhall/lib.dhall
|
||||
|
||||
in \(Ini/externs : Ini.Externs) ->
|
||||
let Vdirsyncer =
|
||||
let StorageType =
|
||||
< FileSystem : { path : Text, fileext : < ICS > }
|
||||
| Http : { url : Text }
|
||||
>
|
||||
|
||||
let Collection = < FromA | FromB | Collection : Text >
|
||||
|
||||
let Collections =
|
||||
< Unspecified | TheseCollections : List Collection >
|
||||
|
||||
let Storage = { storageName : Text, storage : StorageType }
|
||||
|
||||
in { Storage
|
||||
, StorageType
|
||||
, Collection
|
||||
, Collections
|
||||
, Pair =
|
||||
{ pairName : Text
|
||||
, a : Storage
|
||||
, b : Storage
|
||||
, collections : Collections
|
||||
}
|
||||
}
|
||||
|
||||
let toIniSections
|
||||
: Vdirsyncer.Pair -> Ini.Sections
|
||||
= \(pair : Vdirsyncer.Pair) ->
|
||||
let
|
||||
-- we assume the names are [a-zA-Z_]
|
||||
renderList =
|
||||
\(l : List Text) ->
|
||||
"["
|
||||
++ Lib.Text/concatMapSep
|
||||
", "
|
||||
Text
|
||||
(\(t : Text) -> "\"${t}\"")
|
||||
l
|
||||
++ "]"
|
||||
|
||||
in let nv = \(name : Text) -> \(value : Text) -> { name, value }
|
||||
|
||||
let mkStorage =
|
||||
\(storage : Vdirsyncer.Storage) ->
|
||||
{ name = "storage ${storage.storageName}"
|
||||
, value =
|
||||
merge
|
||||
{ FileSystem =
|
||||
\ ( fs
|
||||
: { path : Text, fileext : < ICS > }
|
||||
) ->
|
||||
[ nv "type" "filesystem"
|
||||
, nv
|
||||
"fileext"
|
||||
(merge { ICS = ".ics" } fs.fileext)
|
||||
, nv "path" fs.path
|
||||
]
|
||||
, Http =
|
||||
\(http : { url : Text }) ->
|
||||
[ nv "type" "http", nv "url" http.url ]
|
||||
}
|
||||
storage.storage
|
||||
}
|
||||
|
||||
in [ { name = "pair ${pair.pairName}"
|
||||
, value =
|
||||
[ nv "a" pair.a.storageName
|
||||
, nv "b" pair.b.storageName
|
||||
, nv
|
||||
"collections"
|
||||
( merge
|
||||
{ Unspecified = "none"
|
||||
, TheseCollections =
|
||||
\(colls : List Vdirsyncer.Collection) ->
|
||||
renderList
|
||||
( Lib.List/map
|
||||
Vdirsyncer.Collection
|
||||
Text
|
||||
( \ ( coll
|
||||
: Vdirsyncer.Collection
|
||||
) ->
|
||||
merge
|
||||
{ FromA = "from a"
|
||||
, FromB = "from b"
|
||||
, Collection =
|
||||
\(t : Text) -> t
|
||||
}
|
||||
coll
|
||||
)
|
||||
colls
|
||||
)
|
||||
}
|
||||
pair.collections
|
||||
)
|
||||
]
|
||||
}
|
||||
, mkStorage pair.a
|
||||
, mkStorage pair.b
|
||||
]
|
||||
|
||||
in { example =
|
||||
Ini/externs.renderIni
|
||||
( Ini.appendInis
|
||||
( Lib.List/map
|
||||
Vdirsyncer.Pair
|
||||
Ini.Ini
|
||||
( \(pair : Vdirsyncer.Pair) ->
|
||||
{ globalSection = [] : Ini.Section
|
||||
, sections = toIniSections pair
|
||||
}
|
||||
)
|
||||
( [ { pairName = "testPair"
|
||||
, a =
|
||||
{ storageName = "mystor"
|
||||
, storage =
|
||||
Vdirsyncer.StorageType.FileSystem
|
||||
{ path = "./test-ics"
|
||||
, fileext = < ICS >.ICS
|
||||
}
|
||||
}
|
||||
, b =
|
||||
{ storageName = "mystor"
|
||||
, storage =
|
||||
Vdirsyncer.StorageType.Http
|
||||
{ url = "https://profpatsch.de" }
|
||||
}
|
||||
, collections = Vdirsyncer.Collections.Unspecified
|
||||
}
|
||||
]
|
||||
: List Vdirsyncer.Pair
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
Loading…
Reference in a new issue