From 974becd6b895f9eed6a71269104a10d4cffb3423 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 23 Jun 2024 19:26:17 +0200 Subject: [PATCH] add new command with set date --- src/feierabendxml.c | 27 +++++++++++++++++---- src/time_format.c | 51 +++++++++++++++++++++++++++++++++++++++ src/time_format.h | 3 +++ tests/time_format_tests.c | 26 +++++++++++++++++++- 4 files changed, 101 insertions(+), 6 deletions(-) diff --git a/src/feierabendxml.c b/src/feierabendxml.c index 77121e6..d8cfd9f 100644 --- a/src/feierabendxml.c +++ b/src/feierabendxml.c @@ -78,6 +78,7 @@ void initTimeAcount() } void writeEntryNode(xmlTextWriterPtr xmlWriter, + const char* date, int begin_hour, int begin_min, int end_hour, @@ -97,6 +98,11 @@ void writeEntryNode(xmlTextWriterPtr xmlWriter, time(fabend->now); fabend->now_tm = gmtime(fabend->now); + if (date != NULL) { + fabend->now_tm->tm_yday = get_year_from_str(date) - 1900; + fabend->now_tm->tm_mon = get_month_from_str(date) - 1; + fabend->now_tm->tm_mday = get_day_from_str(date); + } fabend->now_tm->tm_hour = end_hour; fabend->now_tm->tm_min = end_min; *fabend->now = mktime(fabend->now_tm); @@ -254,7 +260,7 @@ void createEntry(int begin_hour, free(xmlElemContent); xmlElemContent = NULL; - writeEntryNode(xmlWriter, begin_hour, begin_min, end_hour, end_min, 0); + writeEntryNode(xmlWriter, NULL, begin_hour, begin_min, end_hour, end_min, 0); xmlTextWriterEndElement(xmlWriter); xmlTextWriterEndDocument(xmlWriter); @@ -339,7 +345,8 @@ void copyNodeAttributes(xmlTextReaderPtr xmlreader, xmlTextWriterPtr xmlwriter) } -void addEntry(int begin_hour, +void addEntry(const char* date, + int begin_hour, int begin_min, int end_hour, int end_min, @@ -379,7 +386,7 @@ void addEntry(int begin_hour, time_t* saldo = malloc(sizeof(time_t)); get_seconds_from_string(saldostr, saldo); - writeEntryNode(xmlwriter, begin_hour, begin_min, end_hour, end_min, *saldo); + writeEntryNode(xmlwriter, date, begin_hour, begin_min, end_hour, end_min, *saldo); xmlTextWriterEndElement(xmlwriter); xmlTextWriterEndDocument(xmlwriter); @@ -401,7 +408,7 @@ void addEntry(int begin_hour, int main(int argc, char* argv[]) { if (argc < 2) { - printf("ERROR: %s \n", argv[0]); + printf("ERROR: %s \n", argv[0]); return 1; } @@ -424,7 +431,17 @@ int main(int argc, char* argv[]) printf("ERROR: %s add \n", argv[0]); return 1; } - addEntry(atoi(argv[2]), atoi(argv[3]), atoi(argv[4]), atoi(argv[5]), argv[6]); + addEntry(NULL, atoi(argv[2]), atoi(argv[3]), atoi(argv[4]), atoi(argv[5]), argv[6]); + + return 0; + } + + if (strcmp(argv[1], "dateadd") == 0) { + if (argc < 7) { + printf("ERROR: %s dateadd \n", argv[0]); + return 1; + } + addEntry(argv[2], atoi(argv[3]), atoi(argv[4]), atoi(argv[5]), atoi(argv[6]), argv[7]); return 0; } diff --git a/src/time_format.c b/src/time_format.c index 66f74d3..6fd3c96 100644 --- a/src/time_format.c +++ b/src/time_format.c @@ -122,4 +122,55 @@ void get_short_weekday(int wday, char* weekday) sprintf(weekday, "%s", "--"); break; } +} + +int get_year_from_str(const char* date) +{ + int value = 0; + char* str = malloc(sizeof(char) * 11); + char* str_first_pos = NULL; + strncpy(str, date, 11); + str_first_pos = str; + + str = strtok(str, "-"); + value = atoi(str); + + free(str_first_pos); + str_first_pos = NULL; + return value; +} + +int get_month_from_str(const char* date) +{ + int value = 0; + char* str = malloc(sizeof(char) * 11); + char* str_first_pos = NULL; + strncpy(str, date, 11); + str_first_pos = str; + + str = strtok(str, "-"); + str = strtok(NULL, "-"); + value = atoi(str); + + free(str_first_pos); + str_first_pos = NULL; + return value; +} + +int get_day_from_str(const char* date) +{ + int value = 0; + char* str = malloc(sizeof(char) * 11); + char* str_first_pos = NULL; + strncpy(str, date, 11); + str_first_pos = str; + + str = strtok(str, "-"); + str = strtok(NULL, "-"); + str = strtok(NULL, "-"); + value = atoi(str); + + free(str_first_pos); + str_first_pos = NULL; + return value; } \ No newline at end of file diff --git a/src/time_format.h b/src/time_format.h index 024ce70..1086c62 100644 --- a/src/time_format.h +++ b/src/time_format.h @@ -7,5 +7,8 @@ void get_time_str_overtime(time_t timediff, char* timestr); void get_seconds_from_string(const char* timestr, time_t* seconds); void get_weekday(int wday, char* weekday); void get_short_weekday(int wday, char* weekday); +int get_year_from_str(const char* date); +int get_month_from_str(const char* date); +int get_day_from_str(const char* date); #endif \ No newline at end of file diff --git a/tests/time_format_tests.c b/tests/time_format_tests.c index ee159e8..12d8cdd 100644 --- a/tests/time_format_tests.c +++ b/tests/time_format_tests.c @@ -300,6 +300,27 @@ void get_seconds_from_str_minus() assert_int_equal(seconds, -15300); } +void get_year_from_date() +{ + int result = get_year_from_str("2024-06-24"); + + assert_int_equal(result, 2024); +} + +void get_month_from_date() +{ + int result = get_month_from_str("2024-06-24"); + + assert_int_equal(result, 6); +} + +void get_dat_from_date() +{ + int result = get_day_from_str("2024-06-24"); + + assert_int_equal(result, 24); +} + int main() { const struct CMUnitTest tests[] = { @@ -325,7 +346,10 @@ int main() cmocka_unit_test(get_short_friday), cmocka_unit_test(get_short_saturday), cmocka_unit_test(get_seconds_from_str), - cmocka_unit_test(get_seconds_from_str_minus) + cmocka_unit_test(get_seconds_from_str_minus), + cmocka_unit_test(get_year_from_date), + cmocka_unit_test(get_month_from_date), + cmocka_unit_test(get_dat_from_date) }; return cmocka_run_group_tests(tests, NULL, NULL); -- 2.39.5