diff --git a/lib/home/calendar/parse_events.dart b/lib/home/calendar/parse_events.dart index 5ea6be8..ba2966d 100644 --- a/lib/home/calendar/parse_events.dart +++ b/lib/home/calendar/parse_events.dart @@ -4,6 +4,7 @@ import 'package:better_hm/home/calendar/calendar_service.dart'; import 'package:better_hm/home/calendar/models/calendar.dart'; import 'package:better_hm/home/calendar/service/ical_sync_service.dart'; import 'package:better_hm/shared/models/event_data.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:icalendar/icalendar.dart'; import 'package:kalender/kalender.dart'; @@ -41,6 +42,13 @@ Future> parseEvents( Future> parseICal( File file, Calendar calendar, +) async { + return await compute((_) => _parseICal(file, calendar), null); +} + +Future> _parseICal( + File file, + Calendar calendar, ) async { final lines = await file.readAsLines(); @@ -143,12 +151,17 @@ List splitRRule(CustomCalendarEvent event) { for (final rule in data.recurrenceRules!) { final recur = rrule.RecurrenceRule.fromString(rule.toString()); final instances = recur.getInstances( - start: DateTime.now().add(const Duration(days: 365)), + start: DateTime.now() + .subtract(const Duration(days: 60)) + .copyWith(isUtc: true), ); // year before and after today final ranged = instances.takeWhile( - (value) => value.year.compareTo(DateTime.now().year).abs() < 2, + (value) { + final diff = value.difference(DateTime.now()).inDays; + return diff >= -61 && diff <= 6 * 30; + }, ); for (final instance in ranged) {