First commit
This commit is contained in:
commit
8585f5741f
13 changed files with 505 additions and 0 deletions
147
src/main.cpp
Normal file
147
src/main.cpp
Normal file
|
@ -0,0 +1,147 @@
|
|||
#include "app-window.h"
|
||||
#include "slint_timer.h"
|
||||
#include "slint.h"
|
||||
#include <cstdlib>
|
||||
|
||||
|
||||
|
||||
class CountdownState {
|
||||
public:
|
||||
CountdownState(slint::ComponentHandle<ui::AppWindow> ui) : ui_(ui) {
|
||||
ui_->global<ui::State>().set_break_countdown_duration(60 * 5);
|
||||
ui_->global<ui::State>().set_focus_countdown_duration(60 * 25);
|
||||
ui_->global<ui::State>().set_max_session_count(4);
|
||||
reset();
|
||||
}
|
||||
|
||||
ui::SessionStep sessionStep() const {
|
||||
return ui_->global<ui::State>().get_sessions_step();
|
||||
}
|
||||
|
||||
int currentSession() const {
|
||||
return ui_->global<ui::State>().get_current_session();
|
||||
}
|
||||
|
||||
void setCurrentSession(int newCurrentSession) const {
|
||||
ui_->global<ui::State>().set_current_session(newCurrentSession);
|
||||
}
|
||||
|
||||
int maxSessions() const {
|
||||
return ui_->global<ui::State>().get_max_session_count();
|
||||
}
|
||||
|
||||
void setSessionStep(ui::SessionStep newSessionStep) {
|
||||
ui_->global<ui::State>().set_sessions_step(newSessionStep);
|
||||
}
|
||||
|
||||
ui::CountdownStatus countdownStatus() const {
|
||||
return ui_->global<ui::State>().get_countdown_status();
|
||||
}
|
||||
|
||||
void setCountdownStatus(ui::CountdownStatus newCountdownStatus) {
|
||||
ui_->global<ui::State>().set_countdown_status(newCountdownStatus);
|
||||
}
|
||||
|
||||
void setCountdown(int newCountdownValue) {
|
||||
ui_->global<ui::State>().set_countdown(newCountdownValue);
|
||||
}
|
||||
|
||||
int countdown() const {
|
||||
return ui_->global<ui::State>().get_countdown();
|
||||
}
|
||||
|
||||
void toggleCountdown() {
|
||||
if (countdownStatus() == ui::CountdownStatus::Running) {
|
||||
pause();
|
||||
} else if (countdownStatus() == ui::CountdownStatus::Paused || countdownStatus() == ui::CountdownStatus::NotStarted) {
|
||||
start();
|
||||
}
|
||||
}
|
||||
|
||||
void goNextStep() {
|
||||
if (sessionStep() == ui::SessionStep::Setup) {
|
||||
setSessionStep(ui::SessionStep::Focus);
|
||||
setCountdownStatus(ui::CountdownStatus::NotStarted);
|
||||
setCountdown(ui_->global<ui::State>().get_focus_countdown_duration());
|
||||
setCurrentSession(currentSession() + 1);
|
||||
} else if (sessionStep() == ui::SessionStep::Focus) {
|
||||
setSessionStep(ui::SessionStep::Break);
|
||||
setCountdownStatus(ui::CountdownStatus::NotStarted);
|
||||
setCountdown(ui_->global<ui::State>().get_break_countdown_duration());
|
||||
} else if (sessionStep() == ui::SessionStep::Break) {
|
||||
setCurrentSession(currentSession() + 1);
|
||||
if (currentSession() < maxSessions()) {
|
||||
setSessionStep(ui::SessionStep::Focus);
|
||||
setCountdownStatus(ui::CountdownStatus::NotStarted);
|
||||
setCountdown(ui_->global<ui::State>().get_focus_countdown_duration());
|
||||
} else {
|
||||
setSessionStep(ui::SessionStep::Finished);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void start() {
|
||||
setCountdownStatus(ui::CountdownStatus::Running);
|
||||
timer_.start(slint::TimerMode::Repeated, std::chrono::milliseconds(1000), [&]{
|
||||
onTimerTick(&timer_, ui_);
|
||||
});
|
||||
}
|
||||
|
||||
void pause() {
|
||||
setCountdownStatus(ui::CountdownStatus::Paused);
|
||||
timer_.stop();
|
||||
}
|
||||
|
||||
void reset() {
|
||||
timer_.stop();
|
||||
setSessionStep(ui::SessionStep::Setup);
|
||||
setCountdownStatus(ui::CountdownStatus::NotStarted);
|
||||
setCountdown(ui_->global<ui::State>().get_focus_countdown_duration());
|
||||
setCurrentSession(0);
|
||||
}
|
||||
|
||||
void onTimerTick(slint::Timer* timer, slint::ComponentHandle<ui::AppWindow> ui) {
|
||||
int countdown = ui->global<ui::State>().get_countdown();
|
||||
countdown--;
|
||||
ui->global<ui::State>().set_countdown(countdown);
|
||||
|
||||
if (countdown == 0) {
|
||||
timer->stop();
|
||||
ui->global<ui::State>().set_countdown_status(ui::CountdownStatus::NotStarted);
|
||||
// TODO make it customizable
|
||||
system("notify-send -t 0 \"Pomodoro\" \"task\" &");
|
||||
system("paplay /usr/share/sounds/freedesktop/stereo/complete.oga &");
|
||||
|
||||
goNextStep();
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
slint::ComponentHandle<ui::AppWindow> ui_;
|
||||
slint::Timer timer_;
|
||||
};
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
slint::ComponentHandle<ui::AppWindow> ui = ui::AppWindow::create();
|
||||
|
||||
CountdownState countdown(ui);
|
||||
|
||||
ui->on_start_stop([&]{
|
||||
if (countdown.sessionStep() == ui::SessionStep::Setup || countdown.sessionStep() == ui::SessionStep::Finished) {
|
||||
countdown.reset();
|
||||
countdown.goNextStep();
|
||||
countdown.start();
|
||||
} else if (countdown.sessionStep() == ui::SessionStep::Focus || countdown.sessionStep() == ui::SessionStep::Break) {
|
||||
countdown.toggleCountdown();
|
||||
}
|
||||
});
|
||||
|
||||
ui->global<ui::State>().on_config_changed([&] {
|
||||
countdown.reset();
|
||||
});
|
||||
|
||||
ui->run();
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue