/
google_sheets.go
60 lines (48 loc) · 1.02 KB
/
google_sheets.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 sources
import (
"github.com/asahnoln/go-schedule-saver/pkg"
"google.golang.org/api/googleapi"
"google.golang.org/api/sheets/v4"
)
const (
headerRow = 0
timeColumn = 0
valsColumnStart = 1
valsRowStart = 1
)
type Doer interface {
Do(opts ...googleapi.CallOption) (*sheets.ValueRange, error)
}
type GoogleSheets struct {
d Doer
}
func NewGoogleSheets(d Doer) *GoogleSheets {
return &GoogleSheets{d}
}
func (s *GoogleSheets) Parse() ([]pkg.Event, error) {
resp, err := s.d.Do()
if err != nil {
return nil, err
}
events := []pkg.Event{}
dates := resp.Values[headerRow][valsColumnStart:]
for _, r := range resp.Values[valsRowStart:] {
t := r[timeColumn]
for c, v := range r[valsColumnStart:] {
// If extra columns present without header information
if c > len(dates)-1 {
continue
}
desc := v.(string)
if desc == "" {
continue
}
events = append(events, pkg.Event{
Day: dates[c].(string),
Time: t.(string),
Desc: desc,
})
}
}
return events, nil
}