-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
83 lines (73 loc) · 1.8 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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package main
import (
"context"
"encoding/json"
"fmt"
"github.com/spf13/cobra"
"github.com/zeebo/errs/v2"
"google.golang.org/api/gmail/v1"
"google.golang.org/api/option"
"log"
"os"
)
func main() {
cmd := cobra.Command{}
configDir := cmd.PersistentFlags().String("config-dir", "${HOME}/.config/waybar-gmail-check", "Directory to store the tokens (and credentials)")
{
subCmd := cobra.Command{
Use: "run",
Short: "Check gmail inbox and return the unread information in waybar format.",
}
subCmd.RunE = func(cmd *cobra.Command, args []string) error {
return run(getConfigDir(*configDir))
}
cmd.AddCommand(&subCmd)
}
{
subCmd := cobra.Command{
Use: "setup",
Short: "Setup credentials",
}
subCmd.RunE = func(cmd *cobra.Command, args []string) error {
return setup(getConfigDir(*configDir))
}
cmd.AddCommand(&subCmd)
}
err := cmd.Execute()
if err != nil {
log.Fatalf("%++v", err)
}
}
func run(configDir string) (err error) {
ctx := context.Background()
config, err := readCredentials(configDir)
if err != nil {
return errs.Wrap(err)
}
token, err := readToken(configDir)
if err != nil {
return err
}
gmailService, err := gmail.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
if err != nil {
return errs.Wrap(err)
}
user := "me"
r, err := gmailService.Users.Messages.List(user).Q("label:inbox is:unread").Do()
if err != nil {
log.Fatalf("Couldn't retrieve labels: %v", err)
}
unreadCount := len(r.Messages)
if unreadCount == 0 {
return json.NewEncoder(os.Stdout).Encode(BarItem{
Text: "",
Alt: "mail",
Tooltip: "No new mail",
})
}
return json.NewEncoder(os.Stdout).Encode(BarItem{
Text: fmt.Sprintf("%d ✉️", unreadCount),
Alt: "mail",
Tooltip: fmt.Sprintf("%d unread mail", unreadCount),
})
}