initial
This commit is contained in:
143
lib/todo/parser.dart
Normal file
143
lib/todo/parser.dart
Normal file
@@ -0,0 +1,143 @@
|
||||
import 'package:hiddingsel_app/appflow/model/event_organisations.dart';
|
||||
import 'package:hiddingsel_app/appflow/model/location.dart';
|
||||
|
||||
import '../constants/enums.dart';
|
||||
import '../appflow/model/contacts.dart';
|
||||
import '../appflow/model/event.dart';
|
||||
import '../appflow/model/schedules.dart';
|
||||
|
||||
class IcalParser {
|
||||
static List<EventModel> parse(String data) {
|
||||
final regex = RegExp('BEGIN:VEVENT(.*?)END:VEVENT', dotAll: true);
|
||||
return regex
|
||||
.allMatches(data)
|
||||
.map((e) => e.group(0))
|
||||
.map((e) => _parseToEvent(e!))
|
||||
.where((e) => e != null)
|
||||
.cast<EventModel>()
|
||||
.toList();
|
||||
}
|
||||
|
||||
static EventModel? _parseToEvent(String data) {
|
||||
try {
|
||||
final cleandData = data.replaceAll('\n', '\r');
|
||||
final String id = RegExp('UID:(.*?)\\r').firstMatch(cleandData)!.group(1)!;
|
||||
final String summary =
|
||||
RegExp('SUMMARY.*?:(.*?)\\r').firstMatch(cleandData)!.group(1)!;
|
||||
final String dtStart =
|
||||
RegExp('DTSTART.*:(.*?)\\r').firstMatch(cleandData)!.group(1)!;
|
||||
final String dtEnd = RegExp('DTEND.*:(.*?)\\r').firstMatch(cleandData)!.group(1)!;
|
||||
final description =
|
||||
RegExp('DESCRIPTION:(.*?)\\r').firstMatch(cleandData)?.group(1);
|
||||
var location =
|
||||
RegExp('LOCATION:(.*?)\\r').firstMatch(cleandData)?.group(1)?.replaceAll('\\,', ',');
|
||||
final attendees =
|
||||
RegExp('ATTENDEE.*?CN=(.*?);', dotAll: true).allMatches(cleandData).map((e) => e.group(1)?.replaceAll('\r', '')
|
||||
.replaceAll('\n', '')
|
||||
.replaceAll(' ', '')).where((e) => e != null).cast<String>().toList();
|
||||
final freq = RegExp('RRULE.*?FREQ=(.*?);', dotAll: true)
|
||||
.firstMatch(cleandData)
|
||||
?.group(1);
|
||||
final interval = RegExp('RRULE.*?INTERVAL=(.*?);', dotAll: true)
|
||||
.firstMatch(cleandData)
|
||||
?.group(1);
|
||||
final until = RegExp('RRULE.*?UNTIL=(.*?);', dotAll: true)
|
||||
.firstMatch(cleandData)
|
||||
?.group(1);
|
||||
final List<EventOrganisationModel> eventOrganizer;
|
||||
if(location!.contains('Brinkstraße')) {
|
||||
location = 'Hiddingsel';
|
||||
eventOrganizer = [EventOrganisationModel.fromId('garbage')!];
|
||||
} else {
|
||||
eventOrganizer = attendees.map((e) => fromAttendee(e)).where((e) => e != null).cast<EventOrganisationModel>().toList();
|
||||
}
|
||||
|
||||
var freqKey = Frequency.once;
|
||||
if (freq == 'DAILY') {
|
||||
freqKey = Frequency.days;
|
||||
} else if (freq == 'WEEKLY') {
|
||||
freqKey = Frequency.weeks;
|
||||
} else if (freq == 'MONTHLY') {
|
||||
freqKey = Frequency.months;
|
||||
}
|
||||
|
||||
return EventModel(id,
|
||||
ScheduleModel(
|
||||
_parse(dtStart),
|
||||
_parse(dtEnd),
|
||||
freqKey,
|
||||
interval != null ? _parseInt(interval) : 1,
|
||||
until != null ? _parse(until) : null
|
||||
),
|
||||
summary,
|
||||
ContactModel(location: LocationModel(address: location)),
|
||||
description: description,
|
||||
eventOrganizer: eventOrganizer,
|
||||
);
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
static DateTime _parse(String data) => DateTime.parse(data).toLocal();
|
||||
static int _parseInt(String data) => int.parse(data);
|
||||
|
||||
|
||||
static EventOrganisationModel? fromAttendee(String? attendee) {
|
||||
if(attendee == null) return null;
|
||||
switch (attendee) {
|
||||
case 'sportverein@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('svVorwaertsHiddingsel');
|
||||
case 'dorfgemeinschaft@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('dorfgemeinschaft');
|
||||
case 'dorfnews@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('dorfgemeinschaft');
|
||||
case 'schuetzenverein-hiddingsel@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('allgemeinerSchuetzenverein');
|
||||
case 'kolping@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('kolpingfamilieHiddingsel');
|
||||
case 'landjugend@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('landjugendHiddingsel');
|
||||
case 'feuerwehr@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('freiwilligeFeuerwehr');
|
||||
case 'kirche@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('stGeorgKirche');
|
||||
case 'kindergarten@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('kindergarten');
|
||||
case 'grundschule@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('grundschule');
|
||||
case 'landfrauen@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('landfrauen');
|
||||
case 'schuetzenverein-daldrup@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('daldruperSchuetzenverein');
|
||||
case 'landwirtschaftlicher-ortsverein@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('landwirtschaflicherOrtsverein');
|
||||
case 'drk@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('drk');
|
||||
case 'eltern-kind-gruppe@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('elternKindGruppe');
|
||||
case 'kfd@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('kfd');
|
||||
case 'kulturforum@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('kulturforum');
|
||||
case 'psg@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('pfadfinderinnenschaftStGeorg');
|
||||
case 'seniorengemeinschaft@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('seniorengemeinschaft');
|
||||
case 'voices@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('voices');
|
||||
case 'aida@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('aktivInDasAlter');
|
||||
case 'foerderverein-kiga-schule@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('foerdervereinKigaSchu');
|
||||
case 'buecherei@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('buecherei');
|
||||
case 'jaegerzug@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('jaegerzug');
|
||||
case 'cdu@hiddingsel.de':
|
||||
return EventOrganisationModel.fromId('cdu');
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user