/
url_getters.go
103 lines (85 loc) · 1.99 KB
/
url_getters.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
package vangogh_local_data
import (
"net/url"
"strconv"
"strings"
"time"
)
func ValueFromUrl(u *url.URL, arg string) string {
if u == nil {
return ""
}
q := u.Query()
return q.Get(arg)
}
func ValuesFromUrl(u *url.URL, arg string) []string {
if FlagFromUrl(u, arg) {
val := ValueFromUrl(u, arg)
values := strings.Split(val, ",")
//account for empty strings
if len(values) == 1 && values[0] == "" {
values = []string{}
}
return values
}
return nil
}
func FlagFromUrl(u *url.URL, arg string) bool {
if u == nil {
return false
}
q := u.Query()
return q.Has(arg)
}
func PropertyFromUrl(u *url.URL) string {
return ValueFromUrl(u, "property")
}
func PropertiesFromUrl(u *url.URL) []string {
return ValuesFromUrl(u, "property")
}
func ImageTypesFromUrl(u *url.URL) []ImageType {
imageTypes := ValuesFromUrl(u, "image-type")
its := make([]ImageType, 0, len(imageTypes))
for _, imageType := range imageTypes {
its = append(its, ParseImageType(imageType))
}
return its
}
func ProductTypeFromUrl(u *url.URL) ProductType {
return ParseProductType(ValueFromUrl(u, "product-type"))
}
func OperatingSystemsFromUrl(u *url.URL) []OperatingSystem {
osStrings := ValuesFromUrl(u, "operating-system")
return ParseManyOperatingSystems(osStrings)
}
func DownloadTypesFromUrl(u *url.URL) []DownloadType {
dtStrings := ValuesFromUrl(u, "download-type")
return ParseManyDownloadTypes(dtStrings)
}
func IdSetFromUrl(u *url.URL) (map[string]bool, error) {
idSet := make(map[string]bool)
for _, id := range ValuesFromUrl(u, "id") {
idSet[id] = true
}
slugs := ValuesFromUrl(u, "slug")
slugIds, err := idSetFromSlugs(slugs, nil)
if err != nil {
return idSet, err
}
for id := range slugIds {
idSet[id] = true
}
return idSet, err
}
func SinceFromUrl(u *url.URL) (int64, error) {
str := ValueFromUrl(u, "since-hours-ago")
var sha int
var err error
if str != "" {
sha, err = strconv.Atoi(str)
if err != nil {
return 0, err
}
}
return time.Now().Unix() - int64(sha*60*60), err
}