|
@@ -3,35 +3,60 @@
|
|
|
#include "../helpers/time.h"
|
|
#include "../helpers/time.h"
|
|
|
#include "flipp_pomodoro.h"
|
|
#include "flipp_pomodoro.h"
|
|
|
|
|
|
|
|
-char *next_stage_label[] = {
|
|
|
|
|
- [Work] = "Get Rest",
|
|
|
|
|
- [Rest] = "Start Work",
|
|
|
|
|
|
|
+PomodoroStage stages_sequence[] = {
|
|
|
|
|
+ FlippPomodoroStageFocus,
|
|
|
|
|
+ FlippPomodoroStageRest,
|
|
|
|
|
+
|
|
|
|
|
+ FlippPomodoroStageFocus,
|
|
|
|
|
+ FlippPomodoroStageRest,
|
|
|
|
|
+
|
|
|
|
|
+ FlippPomodoroStageFocus,
|
|
|
|
|
+ FlippPomodoroStageRest,
|
|
|
|
|
+
|
|
|
|
|
+ FlippPomodoroStageFocus,
|
|
|
|
|
+ FlippPomodoroStageLongBreak,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const PomodoroStage stage_rotaion_map[] = {
|
|
|
|
|
- [Work] = Rest,
|
|
|
|
|
- [Rest] = Work,
|
|
|
|
|
|
|
+char *current_stage_label[] = {
|
|
|
|
|
+ [FlippPomodoroStageFocus] = "Continue focus for:",
|
|
|
|
|
+ [FlippPomodoroStageRest] = "Keep rest for:",
|
|
|
|
|
+ [FlippPomodoroStageLongBreak] = "Long Break for:",
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const PomodoroStage default_stage = Work;
|
|
|
|
|
|
|
+char *next_stage_label[] = {
|
|
|
|
|
+ [FlippPomodoroStageFocus] = "Focus",
|
|
|
|
|
+ [FlippPomodoroStageRest] = "Short Break",
|
|
|
|
|
+ [FlippPomodoroStageLongBreak] = "Long Break",
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+PomodoroStage flipp_pomodoro__stage_by_index(int index) {
|
|
|
|
|
+ const int one_loop_size = sizeof(stages_sequence);
|
|
|
|
|
+ return stages_sequence[index % one_loop_size];
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
void flipp_pomodoro__toggle_stage(FlippPomodoroState *state)
|
|
void flipp_pomodoro__toggle_stage(FlippPomodoroState *state)
|
|
|
{
|
|
{
|
|
|
furi_assert(state);
|
|
furi_assert(state);
|
|
|
- state->stage = stage_rotaion_map[flipp_pomodoro__get_stage(state)];
|
|
|
|
|
|
|
+ state->current_stage_index = state->current_stage_index + 1;
|
|
|
state->started_at_timestamp = time_now();
|
|
state->started_at_timestamp = time_now();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
PomodoroStage flipp_pomodoro__get_stage(FlippPomodoroState *state)
|
|
PomodoroStage flipp_pomodoro__get_stage(FlippPomodoroState *state)
|
|
|
{
|
|
{
|
|
|
furi_assert(state);
|
|
furi_assert(state);
|
|
|
- return state->stage;
|
|
|
|
|
|
|
+ return flipp_pomodoro__stage_by_index(state->current_stage_index);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+char *flipp_pomodoro__current_stage_label(FlippPomodoroState *state)
|
|
|
|
|
+{
|
|
|
|
|
+ furi_assert(state);
|
|
|
|
|
+ return current_stage_label[flipp_pomodoro__get_stage(state)];
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
char *flipp_pomodoro__next_stage_label(FlippPomodoroState *state)
|
|
char *flipp_pomodoro__next_stage_label(FlippPomodoroState *state)
|
|
|
{
|
|
{
|
|
|
furi_assert(state);
|
|
furi_assert(state);
|
|
|
- return next_stage_label[flipp_pomodoro__get_stage(state)];
|
|
|
|
|
|
|
+ return next_stage_label[flipp_pomodoro__stage_by_index(state->current_stage_index + 1)];
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
void flipp_pomodoro__destroy(FlippPomodoroState *state)
|
|
void flipp_pomodoro__destroy(FlippPomodoroState *state)
|
|
@@ -43,8 +68,9 @@ void flipp_pomodoro__destroy(FlippPomodoroState *state)
|
|
|
uint32_t flipp_pomodoro__current_stage_total_duration(FlippPomodoroState *state)
|
|
uint32_t flipp_pomodoro__current_stage_total_duration(FlippPomodoroState *state)
|
|
|
{
|
|
{
|
|
|
const int32_t stage_duration_seconds_map[] = {
|
|
const int32_t stage_duration_seconds_map[] = {
|
|
|
- [Work] = 25 * TIME_SECONDS_IN_MINUTE,
|
|
|
|
|
- [Rest] = 5 * TIME_SECONDS_IN_MINUTE,
|
|
|
|
|
|
|
+ [FlippPomodoroStageFocus] = 25 * TIME_SECONDS_IN_MINUTE,
|
|
|
|
|
+ [FlippPomodoroStageRest] = 5 * TIME_SECONDS_IN_MINUTE,
|
|
|
|
|
+ [FlippPomodoroStageLongBreak] = 30 * TIME_SECONDS_IN_MINUTE,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
return stage_duration_seconds_map[flipp_pomodoro__get_stage(state)];
|
|
return stage_duration_seconds_map[flipp_pomodoro__get_stage(state)];
|
|
@@ -73,6 +99,6 @@ FlippPomodoroState *flipp_pomodoro__new()
|
|
|
FlippPomodoroState *state = malloc(sizeof(FlippPomodoroState));
|
|
FlippPomodoroState *state = malloc(sizeof(FlippPomodoroState));
|
|
|
const uint32_t now = time_now();
|
|
const uint32_t now = time_now();
|
|
|
state->started_at_timestamp = now;
|
|
state->started_at_timestamp = now;
|
|
|
- state->stage = default_stage;
|
|
|
|
|
|
|
+ state->current_stage_index = 0;
|
|
|
return state;
|
|
return state;
|
|
|
};
|
|
};
|