summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/slack-go/slack/bookmarks.go
blob: 78753507b2a6ede858307c614cdde169771eefbe (plain) (blame)
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package slack

import (
	"context"
	"net/url"
)

type Bookmark struct {
	ID        string   `json:"id"`
	ChannelID string   `json:"channel_id"`
	Title     string   `json:"title"`
	Link      string   `json:"link"`
	Emoji     string   `json:"emoji"`
	IconURL   string   `json:"icon_url"`
	Type      string   `json:"type"`
	Created   JSONTime `json:"date_created"`
	Updated   JSONTime `json:"date_updated"`
	Rank      string   `json:"rank"`

	LastUpdatedByUserID string `json:"last_updated_by_user_id"`
	LastUpdatedByTeamID string `json:"last_updated_by_team_id"`

	ShortcutID string `json:"shortcut_id"`
	EntityID   string `json:"entity_id"`
	AppID      string `json:"app_id"`
}

type AddBookmarkParameters struct {
	Title    string // A required title for the bookmark
	Type     string // A required type for the bookmark
	Link     string // URL required for type:link
	Emoji    string // An optional emoji
	EntityID string
	ParentID string
}

type EditBookmarkParameters struct {
	Title *string // Change the title. Set to "" to clear
	Emoji *string // Change the emoji. Set to "" to clear
	Link  string  // Change the link
}

type addBookmarkResponse struct {
	Bookmark Bookmark `json:"bookmark"`
	SlackResponse
}

type editBookmarkResponse struct {
	Bookmark Bookmark `json:"bookmark"`
	SlackResponse
}

type listBookmarksResponse struct {
	Bookmarks []Bookmark `json:"bookmarks"`
	SlackResponse
}

// AddBookmark adds a bookmark in a channel
func (api *Client) AddBookmark(channelID string, params AddBookmarkParameters) (Bookmark, error) {
	return api.AddBookmarkContext(context.Background(), channelID, params)
}

// AddBookmarkContext adds a bookmark in a channel with a custom context
func (api *Client) AddBookmarkContext(ctx context.Context, channelID string, params AddBookmarkParameters) (Bookmark, error) {
	values := url.Values{
		"channel_id": {channelID},
		"token":      {api.token},
		"title":      {params.Title},
		"type":       {params.Type},
	}
	if params.Link != "" {
		values.Set("link", params.Link)
	}
	if params.Emoji != "" {
		values.Set("emoji", params.Emoji)
	}
	if params.EntityID != "" {
		values.Set("entity_id", params.EntityID)
	}
	if params.ParentID != "" {
		values.Set("parent_id", params.ParentID)
	}

	response := &addBookmarkResponse{}
	if err := api.postMethod(ctx, "bookmarks.add", values, response); err != nil {
		return Bookmark{}, err
	}

	return response.Bookmark, response.Err()
}

// RemoveBookmark removes a bookmark from a channel
func (api *Client) RemoveBookmark(channelID, bookmarkID string) error {
	return api.RemoveBookmarkContext(context.Background(), channelID, bookmarkID)
}

// RemoveBookmarkContext removes a bookmark from a channel with a custom context
func (api *Client) RemoveBookmarkContext(ctx context.Context, channelID, bookmarkID string) error {
	values := url.Values{
		"channel_id":  {channelID},
		"token":       {api.token},
		"bookmark_id": {bookmarkID},
	}

	response := &SlackResponse{}
	if err := api.postMethod(ctx, "bookmarks.remove", values, response); err != nil {
		return err
	}

	return response.Err()
}

// ListBookmarks returns all bookmarks for a channel.
func (api *Client) ListBookmarks(channelID string) ([]Bookmark, error) {
	return api.ListBookmarksContext(context.Background(), channelID)
}

// ListBookmarksContext returns all bookmarks for a channel with a custom context.
func (api *Client) ListBookmarksContext(ctx context.Context, channelID string) ([]Bookmark, error) {
	values := url.Values{
		"channel_id": {channelID},
		"token":      {api.token},
	}

	response := &listBookmarksResponse{}
	err := api.postMethod(ctx, "bookmarks.list", values, response)
	if err != nil {
		return nil, err
	}
	return response.Bookmarks, response.Err()
}

func (api *Client) EditBookmark(channelID, bookmarkID string, params EditBookmarkParameters) (Bookmark, error) {
	return api.EditBookmarkContext(context.Background(), channelID, bookmarkID, params)
}

func (api *Client) EditBookmarkContext(ctx context.Context, channelID, bookmarkID string, params EditBookmarkParameters) (Bookmark, error) {
	values := url.Values{
		"channel_id":  {channelID},
		"token":       {api.token},
		"bookmark_id": {bookmarkID},
	}
	if params.Link != "" {
		values.Set("link", params.Link)
	}
	if params.Emoji != nil {
		values.Set("emoji", *params.Emoji)
	}
	if params.Title != nil {
		values.Set("title", *params.Title)
	}

	response := &editBookmarkResponse{}
	if err := api.postMethod(ctx, "bookmarks.edit", values, response); err != nil {
		return Bookmark{}, err
	}

	return response.Bookmark, response.Err()
}