]> gitweb.hhaalo.de Git - feierabend.git/commitdiff
add new command with set date
authorBastian Dehn <hhaalo@arcor.de>
Sun, 23 Jun 2024 17:26:17 +0000 (19:26 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 23 Jun 2024 17:26:17 +0000 (19:26 +0200)
src/feierabendxml.c
src/time_format.c
src/time_format.h
tests/time_format_tests.c

index 77121e65fc1111dac7de9d09b023496cca864f1d..d8cfd9f5bb1fe56c3e5aaa03b29ea4407b36f595 100644 (file)
@@ -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 <init|add|entry>\n", argv[0]);
+               printf("ERROR: %s <init|add|dateadd|entry>\n", argv[0]);
                return 1;
        }
 
@@ -424,7 +431,17 @@ int main(int argc, char* argv[])
                        printf("ERROR: %s add <begin_hours> <begin_minutes> <end_hours> <end_minutes> <inputfile>\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 <yyyy-MM-dd> <begin_hours> <begin_minutes> <end_hours> <end_minutes> <inputfile>\n", argv[0]);
+                       return 1;
+               }
+               addEntry(argv[2], atoi(argv[3]), atoi(argv[4]), atoi(argv[5]), atoi(argv[6]), argv[7]);
 
                return 0;
        }
index 66f74d33a07c3cbc2f82da6bff3cd054583ea1d4..6fd3c965d8b6cfab8d26532753c1d136fd05f2b0 100644 (file)
@@ -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
index 024ce70d87e061fca7c0aea5b10a9102628d062d..1086c62ae6e824fe2e408b18ae231800e56224f3 100644 (file)
@@ -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
index ee159e8bdbf92d8cabad33375c8f8a60de827931..12d8cdd1e5585b8f37d5a1fe2976739824bcc4ae 100644 (file)
@@ -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);