Skip to content

TesteurManiak/icalendar_parser

Repository files navigation

icalendar_parser

Pub Version Stars Dart Coverage Status

Package to parse iCalendar (.ics) files written in pure Dart.

Implementation of AnyFetch's ics-parser in JavaScript.

Getting Started

Add icalendar_parser to your pubspec.yaml:

icalendar_parser: any

How to use

You can refer to the example/ folder for a complete example implemented in Flutter.

Constructor

ICalendar.fromString

import 'package:flutter/services.dart' show rootBundle;
import 'package:icalendar_parser/icalendar_parser.dart';

final icsString = await rootBundle.loadString('assets/your_file.ics');
final iCalendar = ICalendar.fromString(icsString);

ICalendar.fromLines

final icsLines = await File('your_file.ics').readAsLines();
final iCalendar = ICalendar.fromLines(lines);

Other methods

ICalendar.registerField

With this method you can add fields that are not already supported (check Supported Properties) to the parsing and you can specify a custom function to parse its content :

ICalendar.registerField(field: 'TEST');

ICalendar.registerField(
    field: 'TEST2',
    function: (value, params, event, lastEvent) {
        lastEvent['test2'] = 'test';
        return lastEvent;
    },
);

ICalendar.unregisterField

With this method you can remove parsed fields to ignore them in your file :

ICalendar.unregisterField('TEST');

ICalendar.toJson

Convert [ICalendar] object to a Map<String, dynamic> containing all its data, formatted into a valid JSON Map<String, dynamic> .

final icsObj = ICalendar.fromLines(File('assets/my_file.ics').readAsLinesSync());
print(jsonEncode(icsObj.toJson()));

Input

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
CREATED:19960329T133000Z
UID:uid1@example.com
DTSTAMP:19970714T170000Z
ORGANIZER;CN=John Doe:MAILTO:john.doe@example.com
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
GEO:48.85299;2.36885
END:VEVENT
END:VCALENDAR

Output

{
    "version": "2.0",
    "prodid": "-//hacksw/handcal//NONSGML v1.0//EN",
    "calscale": "GREGORIAN",
    "method": "PUBLISH",
    "data": [
        {
            "type": "VEVENT",
            "created": {
                "dt": "19960329T133000Z"
            },
            "uid": "uid1@example.com",
            "dtstamp": {
                "dt": "19970714T170000Z"
            },
            "organizer": {
                "name": "John Doe",
                "mail": "john.doe@example.com"
            },
            "dtstart": {
                "dt": "19970714T170000Z"
            },
            "dtend": {
                "dt": "19970715T035959Z"
            },
            "summary": "Bastille Day Party",
            "geo": {
                "latitude": 48.85299,
                "longitude": 2.36885
            }
        }
    ]
}

Supported Properties

  • VERSION
  • PRODID
  • CALSCALE
  • METHOD
  • COMPONENT: BEGIN
  • COMPONENT: END
  • DTSTART
  • DTEND
  • DTSTAMP
  • TRIGGER
  • LAST-MODIFIED
  • COMPLETED
  • DUE
  • UID
  • SUMMARY
  • DESCRIPTION
  • LOCATION
  • URL
  • ORGANIZER
  • GEO
  • CATEGORIES
  • ATTENDEE
  • ACTION
  • STATUS
  • SEQUENCE
  • REPEAT
  • RRULE
  • EXDATE
  • CREATED

Contributors

TesteurManiak
Guillaume Roux
LucaCoduriV
Luca
simonbengtsson
Simon Bengtsson
Levi-Lesches
Levi Lesches
jjchiw
Null
stevenboeckmans
Null