diff --git a/README.md b/README.md index 07604bd..b1ecac7 100644 --- a/README.md +++ b/README.md @@ -39,5 +39,4 @@ sudo make uninstall #### TODO -- add option to print upcoming events only until a certain date - tests diff --git a/src/cli_arg_parsing.c b/src/cli_arg_parsing.c index c85ab56..4c3404d 100644 --- a/src/cli_arg_parsing.c +++ b/src/cli_arg_parsing.c @@ -6,13 +6,14 @@ #include void usage() { + printf ("-a\t\t\tshow all upcoming events (default is 5 events)\n"); printf ("-f [FILE PATH]\t\tspecify ics file path\n"); printf ("-h\t\t\tprint this help\n"); printf ("-i\t\t\tinsert an event\n"); exit(0); } -void get_cli_args(int argc, char **argv, char **file_name) { +void get_cli_args(int argc, char **argv, char **file_name, int *show_all_events) { int opt = 0; memset(file_name, '\0', strlen(*file_name)); @@ -27,17 +28,20 @@ void get_cli_args(int argc, char **argv, char **file_name) { exit(1); } - while ((opt = getopt(argc, argv, "f:hi")) != -1) { + while ((opt = getopt(argc, argv, "f:ahi")) != -1) { switch(opt) { - case 'f': - *file_name = optarg; - break; - case 'h': - usage(); - break; - case 'i': - insert_event(*file_name); - break; + case 'a': + *show_all_events = 1; + break; + case 'f': + *file_name = optarg; + break; + case 'h': + usage(); + break; + case 'i': + insert_event(*file_name); + break; } } } diff --git a/src/cli_arg_parsing.h b/src/cli_arg_parsing.h index eb496de..f5524cf 100644 --- a/src/cli_arg_parsing.h +++ b/src/cli_arg_parsing.h @@ -2,4 +2,4 @@ void usage(); -void get_cli_args(int argc, char **argv, char **file_name); +void get_cli_args(int argc, char **argv, char **file_name, int *show_all_events); diff --git a/src/list_handling.c b/src/list_handling.c index 353d704..3e4a824 100644 --- a/src/list_handling.c +++ b/src/list_handling.c @@ -46,12 +46,20 @@ void free_list(struct event *head) } } -void print_upcoming(struct event *head, char current_start_date[]) { +void print_upcoming(struct event *head, char current_start_date[], int show_all_events) { + int i = 0; while (head != NULL) { if (strcmp(head->start_date, current_start_date) >= 0) { pretty_print_date_time(head->start_date); print_end_date(head->end_date, head->start_date); printf("\n%s\n", head->summary); + + if (!show_all_events) { + i++; + if (i > 4) + break; + } + if (head->next != NULL) printf("\n"); } diff --git a/src/list_handling.h b/src/list_handling.h index fde08bd..c130cec 100644 --- a/src/list_handling.h +++ b/src/list_handling.h @@ -10,4 +10,4 @@ struct event { void print_list(struct event *head); void sorted_insert(struct event **head, char start_date[], char end_date[], char summary[]); void free_list(struct event *head); -void print_upcoming(struct event *head, char current_date[]); +void print_upcoming(struct event *head, char current_date[], int show_all_events); diff --git a/src/main.c b/src/main.c index 14ab12a..a03bda4 100644 --- a/src/main.c +++ b/src/main.c @@ -14,7 +14,9 @@ int main(int argc, char **argv) { char *ics_path = ""; - get_cli_args(argc, argv, &ics_path); + int show_all_events = 0; + + get_cli_args(argc, argv, &ics_path, &show_all_events); char my_event[8192] = ""; @@ -42,7 +44,7 @@ int main(int argc, char **argv) { memset(my_event, '\0', sizeof(my_event)); } - print_upcoming(head, current_date); + print_upcoming(head, current_date, show_all_events); free_list(head); diff --git a/tests/calendar.ics b/tests/calendar.ics index 35eeb61..0e1ef40 100644 --- a/tests/calendar.ics +++ b/tests/calendar.ics @@ -325,4 +325,16 @@ CLASS:PUBLIC CREATED:20230819T153023Z LAST-MODIFIED:20230819T153034Z END:VEVENT +BEGIN:VEVENT +UID:ba584c4a-5369-4d9e-9b6f-157a3abda095 +DTSTAMP:20230917T103047Z +DTSTART;VALUE=DATE:20240301 +DTEND;VALUE=DATE:20240308 +SEQUENCE:2 +SUMMARY:vacation +TRANSP:OPAQUE +CLASS:PUBLIC +CREATED:20230917T103047Z +LAST-MODIFIED:20230917T103047Z +END:VEVENT END:VCALENDAR