This commit is contained in:
Ludwig Behm 2023-10-18 13:11:53 +02:00
commit f1a7e0dd42
Signed by: l.behm
GPG key ID: D344835D63B89384
3 changed files with 25 additions and 0 deletions

14
README.md Normal file
View file

@ -0,0 +1,14 @@
# jcal unfucker
This oneliner converts streaming optimised jCal format from [rfc7265](https://datatracker.ietf.org/doc/rfc7265/) into a developer frendly json structure.
## The actual code
`jq '[(.[2][]|select(.[0] == "vevent")|.[1]|[.[]|{"key": .[0], "value": .[3]}]|from_entries)]'`
## Example Usage
```bash
curl -sH "Accept: application/calendar+json" https://cloud.kraut.space/remote.php/dav/public-calendars/2EkPGt3PF6WwYsA3\?export\&expand\=1\&start\=$(date -d '' +%s)\&end\=$(date -d 'next month' +%s) \
| jq '[(.[2][]|select(.[0] == "vevent")|.[1]|[.[]|{"key": .[0], "value": .[3]}]|from_entries)]'
```

1
example.jcal Normal file

File diff suppressed because one or more lines are too long

10
jcal-unfuck.jq Executable file
View file

@ -0,0 +1,10 @@
#!/usr/bin/jq -rfc
[
(
.[2][] # skipping calender header and accessing events
| [["_type", {}, "text", .[0]], .[1][]] # adding ical type like 'vevent' as ._type property
| [.[] | {"key": .[0], "value": .[3]}] | from_entries # transforming event array structure into object structure
| pick(._type, .dtstart, .dtend, .summary, .location, .description, .sequence, .["related-to"]) # allow list of properties
)
]
| sort_by(.dtstart|fromdate) # sorting by event start time