-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
60 lines (49 loc) · 1.44 KB
/
main.go
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
package main
import (
"flag"
"fmt"
"time"
"os"
"github.com/cheggaaa/pb/v3"
"github.com/faiface/beep/speaker"
"github.com/faiface/beep/wav"
)
const defaultPomodoroMinutes = 22
const bellSoundPath = "assets/bell.wav"
// main é a entrada principal do programa.
func main() {
minutes := parseCommandLineArguments()
playSound(bellSoundPath)
startPomodoro(minutes)
playSound(bellSoundPath)
}
// parseCommandLineArguments analisa os argumentos da linha de comando e retorna os minutos definidos pelo usuário.
func parseCommandLineArguments() int {
minutes := flag.Int("minutes", defaultPomodoroMinutes, "Duration of the pomodoro in minutes")
flag.Parse()
return *minutes
}
// startPomodoro executa um ciclo de pomodoro pela duração especificada em minutos.
func startPomodoro(minutes int) {
displayProgressBar(minutes * 60)
fmt.Println("Done!")
}
// playSound reproduz um arquivo de som WAV do caminho fornecido.
func playSound(file string) {
f, _ := os.Open(file)
defer f.Close()
streamer, format, _ := wav.Decode(f)
defer streamer.Close()
speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10))
speaker.Play(streamer)
}
// displayProgressBar exibe uma barra de progresso e conta regressivamente a quantidade especificada de segundos.
func displayProgressBar(seconds int) {
bar := pb.StartNew(seconds)
fmt.Println("- Time to focus!!")
for i := 0; i < seconds; i++ {
time.Sleep(time.Second)
bar.Add(1)
}
bar.Finish()
}