-
Notifications
You must be signed in to change notification settings - Fork 3
/
functions.go
137 lines (131 loc) · 3.3 KB
/
functions.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"os/exec"
"strconv"
"strings"
"time"
"github.com/adrg/xdg"
"github.com/hrntknr/ntf/backends"
"github.com/spf13/cobra"
)
func doneFunc(cmd *cobra.Command, args []string) {
cfg, err := getConfig()
if err != nil {
log.Fatal(err)
}
backends.OverrideConfigs(&cfg, cmd)
var title string
if cmd.Flags().Lookup("title").Changed {
title = cmd.Flags().Lookup("title").Value.String()
} else {
title, err = getContext()
if err != nil {
log.Fatal(err)
}
}
if len(args) < 1 {
log.Fatal("no argument")
}
execCmd := exec.Command(args[0], args[1:]...)
execCmd.Stdout = os.Stdout
execCmd.Stderr = os.Stderr
execCmd.Stdin = os.Stdin
start := time.Now()
execCmd.Run()
elapsed := time.Since(start)
var msg string
status := execCmd.ProcessState.ExitCode() == 0
if status {
msg = fmt.Sprintf("`%s` success in %s", strings.Join(args, " "), formatDuration(elapsed))
} else {
msg = fmt.Sprintf("`%s` failed (code %d) in %s", strings.Join(args, " "), execCmd.ProcessState.ExitCode(), formatDuration(elapsed))
}
if err := backends.Send(cfg, title, msg, &status); err != nil {
log.Fatal(err)
}
}
func sendFunc(cmd *cobra.Command, args []string) {
cfg, err := getConfig()
if err != nil {
log.Fatal(err)
}
backends.OverrideConfigs(&cfg, cmd)
var title string
if cmd.Flags().Lookup("title").Changed {
title = cmd.Flags().Lookup("title").Value.String()
} else {
title, err = getContext()
if err != nil {
log.Fatal(err)
}
}
if len(args) < 1 {
log.Fatal("no argument")
}
if err := backends.Send(cfg, title, strings.Join(args, " "), nil); err != nil {
log.Fatal(err)
}
}
func shellIntegrationFunc(cmd *cobra.Command, args []string) {
shellPath := xdg.DataHome + "/ntf/ntf-shell-hook.sh"
if _, err := os.Stat(shellPath); os.IsNotExist(err) {
if err := os.MkdirAll(xdg.DataHome+"/ntf", 0755); err != nil {
log.Fatal(err)
}
if err := ioutil.WriteFile(shellPath, ntf_shell_hook, 0755); err != nil {
log.Fatal(err)
}
}
fmt.Println(
strings.Join([]string{
"export AUTO_NTF_DONE_LONGER_THAN=${AUTO_NTF_DONE_LONGER_THAN:=10}",
fmt.Sprintf("source %s", shellPath),
"# To use ntf's shell integration, run this and add it to your shell's rc file:",
"# eval \"$(ntf shell-integration)\"",
}, "\n"),
)
}
func shellDoneFunc(cmd *cobra.Command, args []string) {
cfg, err := getConfig()
if err != nil {
log.Fatal(err)
}
backends.OverrideConfigs(&cfg, cmd)
var title string
if cmd.Flags().Lookup("title").Changed {
title = cmd.Flags().Lookup("title").Value.String()
} else {
title, err = getContext()
if err != nil {
log.Fatal(err)
}
}
if len(args) < 3 {
log.Fatal("invalid arguments")
}
code, err := strconv.Atoi(args[0])
if err != nil {
log.Fatal(err)
}
duration, err := strconv.Atoi(args[1])
if err != nil {
log.Fatal(err)
}
command := strings.Join(args[2:], " ")
status := code == 0
if status {
msg := fmt.Sprintf("`%s` success in %s", command, formatDuration(time.Second*time.Duration(duration)))
if err := backends.Send(cfg, title, msg, &status); err != nil {
log.Fatal(err)
}
} else {
msg := fmt.Sprintf("`%s` failed (code %d) in %s", command, code, formatDuration(time.Second*time.Duration(duration)))
if err := backends.Send(cfg, title, msg, &status); err != nil {
log.Fatal(err)
}
}
}