-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreleases.go
130 lines (108 loc) · 3.78 KB
/
releases.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
package distrogo
import (
"encoding/json"
"fmt"
"time"
)
type Release struct {
Stores []string `json:"stores,omitempty"`
Artist string `json:"artist,omitempty"`
IsDeleted bool `json:"isdeleted,omitempty"`
NumTracks string `json:"numtracks,omitempty"` // Consider changing to int if applicable
ReleaseDate time.Time `json:"releasedate,omitempty"`
CanDeleteFromStores bool `json:"candeletefromstores,omitempty"`
Tracks []Track `json:"tracks,omitempty"`
StoreIcons map[string]Icon `json:"store_icons,omitempty"`
UploadDate time.Time `json:"uploaddate,omitempty"`
IsPriority bool `json:"ispriority,omitempty"`
UUID string `json:"uuid,omitempty"`
ReleaseDateString string `json:"releasedate_string,omitempty"`
Links ReleaseLinks `json:"links,omitempty"`
TrackCount int `json:"trackcount,omitempty"`
CanEdit bool `json:"canedit,omitempty"`
UploadDateString string `json:"uploaddate_string,omitempty"`
ID int `json:"id,omitempty"`
Artwork ReleaseArtwork `json:"artwork,omitempty"`
ReleaseStatus string `json:"release_status,omitempty"`
Single bool `json:"single,omitempty"`
UPC string `json:"upc,omitempty"`
IsVerified bool `json:"isverified,omitempty"`
RecordLabel string `json:"recordlabel,omitempty"`
Title string `json:"title,omitempty"`
Alerts []interface{} `json:"alerts,omitempty"` // can't find right type for this
}
type ReleaseStats struct {
Artist string `json:"artist"`
Tracks []Track `json:"tracks"`
Stats map[string]ServiceStats `json:"stats"`
ID int `json:"id"`
Artwork ReleaseArtwork `json:"artwork"`
Title string `json:"title"`
}
type Icon struct {
Icon string `json:"icon,omitempty"`
Alt string `json:"alt,omitempty"`
}
type ReleaseLinks struct {
ReleaseEdit Link `json:"Releaseedit"`
Detail Link `json:"detail"`
Tracks Link `json:"tracks"`
HyperFollow Link `json:"hyperfollow"`
}
type Link struct {
Href string `json:"href"`
Type string `json:"type"`
Rel string `json:"rel"`
}
type ReleaseArtwork struct {
Size300 string `json:"300"`
Full string `json:"full"`
Size100 string `json:"100"`
}
func (d *DistroKid) GetReleases() ([]Release, error) {
url := fmt.Sprintf("%s%s", BaseURL, ReleasesEndpoint)
data, err := d.DoRequest("GET", url, nil)
if err != nil {
return nil, err
}
var releasesIdk struct {
Data struct {
Items []Release `json:"items"`
} `json:"data"`
}
err = json.Unmarshal(data, &releasesIdk)
if err != nil {
return nil, err
}
return releasesIdk.Data.Items, nil
}
func (d *DistroKid) GetRelease(id int) (Release, error) {
url := fmt.Sprintf("%s%s", BaseURL, fmt.Sprintf(ReleaseEndpoint, id))
data, err := d.DoRequest("GET", url, nil)
if err != nil {
return Release{}, err
}
var releaseResp struct {
Data Release `json:"data"`
}
err = json.Unmarshal(data, &releaseResp)
if err != nil {
return Release{}, err
}
return releaseResp.Data, nil
}
func (d *DistroKid) GetReleaseStats(id int) (ReleaseStats, error) {
url := fmt.Sprintf("%s%s", BaseURL, fmt.Sprintf(ReleaseStatsEndpoint, id))
data, err := d.DoRequest("GET", url, nil)
if err != nil {
return ReleaseStats{}, err
}
var releaseStatsResp struct {
Data ReleaseStats `json:"data"`
}
err = json.Unmarshal(data, &releaseStatsResp)
if err != nil {
return ReleaseStats{}, err
}
return releaseStatsResp.Data, nil
}