ics_analyzer/src/parse_ics.c

64 lines
1.6 KiB
C

#include "list_handling.h"
#include "parse_ics.h"
#include "string_handling.h"
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>
void parse_event(char event_string[], struct event **head) {
char *start_date = strstr(event_string, "\r\nDTSTART");
char *end_date = strstr(event_string, "\r\nDTEND");
char *summary = strstr(event_string, "\r\nSUMMARY");
char *start_date_str = malloc(256);
char *end_date_str = malloc(256);
char *summary_str = malloc(512);
memset(start_date_str, '\0', 256);
memset(end_date_str, '\0', 256);
memset(summary_str, '\0', 512);
assert(start_date != NULL);
assert(end_date != NULL);
assert(summary != NULL);
strncpy(start_date_str, start_date, strchr(start_date, '\r') - start_date);
strncpy(end_date_str, end_date, strchr(end_date, '\r') - end_date);
strncpy(summary_str, summary, strchr(summary, '\r') - summary);
// parse dates
remove_whitespace(start_date_str);
cut_string(start_date_str, ':', 1);
remove_whitespace(end_date_str);
cut_string(end_date_str, ':', 1);
sorted_insert(head, start_date_str, end_date_str, summary_str);
free(start_date_str);
free(end_date_str);
free(summary_str);
}
// the unfolded string has a semicolon
// as a separator between what where previously separate lines
void unfolding_string(char* folded_string, char* unfolded_string) {
int j = 0;
for (int i = 0; i < strlen(folded_string); i++) {
if (folded_string[i] == '\r' && folded_string[i+1] == '\n') {
while (isblank(folded_string[i+2])) {
i++;
if (! isblank(folded_string[i+2]))
folded_string[i+1] = ';';
}
} else {
unfolded_string[j] = folded_string[i];
j++;
}
}
}