Fix displaying in progress task only on current day report

This commit is contained in:
Simon Lieb 2022-05-19 18:52:28 +02:00
parent 7c8702bb63
commit d96fe7c813

32
stt.c
View file

@ -56,7 +56,7 @@ int timesnode_heigh(struct timesnode *);
int timesnode_getbalance(struct timesnode *); int timesnode_getbalance(struct timesnode *);
struct timesnode *timesnode_rightrotate(struct timesnode *); struct timesnode *timesnode_rightrotate(struct timesnode *);
struct timesnode *timesnode_leftrotate(struct timesnode *); struct timesnode *timesnode_leftrotate(struct timesnode *);
int timesnode_print(struct timesnode *, time_t aftertime, time_t beforetime); int timesnode_print(struct timesnode *, time_t aftertime, time_t beforetime, int showinprogress);
void timesnode_free(struct timesnode *); void timesnode_free(struct timesnode *);
void void
@ -275,7 +275,7 @@ timesnode_stop(struct timesnode * p, time_t endtime)
} }
int int
timesnode_print(struct timesnode * p, time_t aftertime, time_t beforetime) timesnode_print(struct timesnode * p, time_t aftertime, time_t beforetime, int showinprogress)
{ {
time_t *nowtime; time_t *nowtime;
int duration = 0; int duration = 0;
@ -285,9 +285,13 @@ timesnode_print(struct timesnode * p, time_t aftertime, time_t beforetime)
return 0; return 0;
} }
if (p->left != NULL) { if (p->left != NULL) {
totalDuration += timesnode_print(p->left, aftertime, beforetime); totalDuration += timesnode_print(p->left, aftertime, beforetime, showinprogress);
} }
if ((p->starttime > aftertime && p->starttime < beforetime) && (p->endtime < beforetime || p->endtime == 0)) { if ((p->starttime > aftertime && p->starttime < beforetime) ||
(p->endtime > aftertime && p->endtime < beforetime) ||
(p->starttime < aftertime && p->endtime > beforetime) ||
(showinprogress && p->endtime == 0)) {
printf("task: %s\n", p->task); printf("task: %s\n", p->task);
printf("started at: %s", ctime(&p->starttime)); printf("started at: %s", ctime(&p->starttime));
@ -311,7 +315,7 @@ timesnode_print(struct timesnode * p, time_t aftertime, time_t beforetime)
totalDuration += duration; totalDuration += duration;
} }
if (p->right != NULL) { if (p->right != NULL) {
totalDuration += timesnode_print(p->right, aftertime, beforetime); totalDuration += timesnode_print(p->right, aftertime, beforetime, showinprogress);
} }
return totalDuration; return totalDuration;
} }
@ -341,7 +345,7 @@ main(int argc, char *argv[])
struct timesnode *timestree; struct timesnode *timestree;
time_t *nowtime; time_t *nowtime;
int changed; int changed;
struct tm startfilter, endfilter; struct tm startfilter, endfilter, today;
timestree = NULL; timestree = NULL;
task = NULL; task = NULL;
@ -400,6 +404,10 @@ default:
writetimes(fp, timestree); writetimes(fp, timestree);
} }
if (list) { if (list) {
memset(&startfilter, 0, sizeof(struct tm));
memset(&endfilter, 0, sizeof(struct tm));
memset(&today, 0, sizeof(struct tm));
if (datefilter != NULL) { if (datefilter != NULL) {
strptime(datefilter, "%Y-%m-%d", &startfilter); strptime(datefilter, "%Y-%m-%d", &startfilter);
strptime(datefilter, "%Y-%m-%d", &endfilter); strptime(datefilter, "%Y-%m-%d", &endfilter);
@ -408,17 +416,25 @@ default:
localtime_r(nowtime, &endfilter); localtime_r(nowtime, &endfilter);
} }
localtime_r(nowtime, &today);
today.tm_sec = 0;
today.tm_min = 0;
today.tm_hour = 0;
today.tm_isdst = 0;
startfilter.tm_sec = 0; startfilter.tm_sec = 0;
startfilter.tm_min = 0; startfilter.tm_min = 0;
startfilter.tm_hour = 0; startfilter.tm_hour = 0;
//startfilter.tm_mday-=4; startfilter.tm_isdst = 0;
endfilter.tm_sec = 0; endfilter.tm_sec = 0;
endfilter.tm_min = 0; endfilter.tm_min = 0;
endfilter.tm_hour = 0; endfilter.tm_hour = 0;
endfilter.tm_mday++; endfilter.tm_mday++;
printf("total: %.2f\n", timesnode_print(timestree, mktime(&startfilter), mktime(&endfilter)) / 3600.0); printf("total: %.2f\n", timesnode_print(timestree, mktime(&startfilter), mktime(&endfilter), mktime(&startfilter) == mktime(&today)) / 3600.0);
} }
fclose(fp); fclose(fp);