From 595d14d4d3053d43bfdf81e072a3b36528d8a199 Mon Sep 17 00:00:00 2001 From: Julien Pivotto Date: Sun, 8 Oct 2017 06:45:01 +0200 Subject: [PATCH] Add playlist support Signed-off-by: Julien Pivotto --- playlist.go | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 playlist.go diff --git a/playlist.go b/playlist.go new file mode 100644 index 0000000..fe17fa3 --- /dev/null +++ b/playlist.go @@ -0,0 +1,120 @@ +package gapi + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io/ioutil" +) + +type Playlist struct { + Id int64 `json:"id,omitempty"` + Name string `json:"name"` + Interval string `json:"interval"` + URL string `json:"url"` + Items []PlaylistItem `json:"items"` +} + +type PlaylistItem struct { + Id int64 `json:"id,omitempty"` + Type string `json:"type"` + Order int `json:"order"` + Title string `json:"title"` + Value string `json:"value"` +} + +func (c *Client) NewPlaylist(s *Playlist) (int64, error) { + data, err := json.Marshal(s) + if err != nil { + return 0, err + } + req, err := c.newRequest("POST", "/api/playlists", bytes.NewBuffer(data)) + if err != nil { + return 0, err + } + + resp, err := c.Do(req) + if err != nil { + return 0, err + } + if resp.StatusCode != 200 { + return 0, errors.New(resp.Status) + } + + data, err = ioutil.ReadAll(resp.Body) + if err != nil { + return 0, err + } + + result := struct { + Id int64 `json:"id"` + }{} + err = json.Unmarshal(data, &result) + return result.Id, err +} + +func (c *Client) UpdatePlaylist(s *Playlist) error { + path := fmt.Sprintf("/api/playlists/%d", s.Id) + data, err := json.Marshal(s) + if err != nil { + return err + } + req, err := c.newRequest("PUT", path, bytes.NewBuffer(data)) + if err != nil { + return err + } + + resp, err := c.Do(req) + if err != nil { + return err + } + if resp.StatusCode != 200 { + return errors.New(resp.Status) + } + + return nil +} + +func (c *Client) Playlist(id int64) (*Playlist, error) { + path := fmt.Sprintf("/api/playlists/%d", id) + req, err := c.newRequest("GET", path, nil) + if err != nil { + return nil, err + } + + resp, err := c.Do(req) + if err != nil { + return nil, err + } + if resp.StatusCode != 200 { + return nil, errors.New(resp.Status) + } + + data, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + result := &Playlist{} + err = json.Unmarshal(data, &result) + return result, err +} + +func (c *Client) DeletePlaylist(id int64) error { + path := fmt.Sprintf("/api/playlists/%d", id) + req, err := c.newRequest("DELETE", path, nil) + if err != nil { + return err + } + + resp, err := c.Do(req) + if err != nil { + return err + } + if resp.StatusCode != 200 { + return errors.New(resp.Status) + } + + return nil +}