1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#include "fastforge_logic.h"
#if defined(__has_include)
#if __has_include(<pebble.h>)
#include <pebble.h>
#endif
#endif
#include <stdio.h>
#include <time.h>
time_t entry_duration_seconds(const FastEntry *entry) {
if (!entry || entry->start_time == 0 || entry->end_time <= entry->start_time) {
return 0;
}
return entry->end_time - entry->start_time;
}
uint8_t stage_level_for_elapsed(time_t elapsed_seconds) {
if (elapsed_seconds >= 24 * 3600) {
return 3;
}
if (elapsed_seconds >= 18 * 3600) {
return 2;
}
if (elapsed_seconds >= 12 * 3600) {
return 1;
}
return 0;
}
const char *stage_text_for_elapsed(time_t elapsed_seconds) {
if (elapsed_seconds >= 24 * 3600) {
return "DEEP KETOSIS";
}
if (elapsed_seconds >= 18 * 3600) {
return "EARLY KETOSIS";
}
if (elapsed_seconds >= 12 * 3600) {
return "FAT BURN";
}
return "GLYCOGEN";
}
void format_hhmmss(time_t seconds, char *buffer, size_t size) {
if (seconds < 0) {
seconds = 0;
}
snprintf(buffer, size, "%02d:%02d:%02d",
(int)(seconds / 3600),
(int)((seconds % 3600) / 60),
(int)(seconds % 60));
}
void format_duration_hours_minutes(time_t seconds, char *buffer, size_t size) {
if (seconds < 0) {
seconds = 0;
}
int hours = (int)(seconds / 3600);
int minutes = (int)((seconds % 3600) / 60);
snprintf(buffer, size, "%dh %02dm", hours, minutes);
}
time_t local_day_start(time_t timestamp) {
if (timestamp <= 0) {
return 0;
}
struct tm tm_copy;
struct tm *tm_info = localtime(×tamp);
if (!tm_info) {
return 0;
}
tm_copy = *tm_info;
tm_copy.tm_hour = 0;
tm_copy.tm_min = 0;
tm_copy.tm_sec = 0;
tm_copy.tm_isdst = -1;
return mktime(&tm_copy);
}
bool running_fast_is_at_target(const FastEntry *entry, time_t now) {
if (!entry || entry->start_time == 0 || entry->end_time != 0 || entry->target_minutes == 0) {
return false;
}
return now >= entry->start_time + (time_t)entry->target_minutes * 60;
}
|