Fix issues related to AntiDopamine mode
[bloat] / mastodon / notification.go
1 package mastodon
2
3 import (
4         "context"
5         "fmt"
6         "net/http"
7         "net/url"
8         "time"
9 )
10
11 type NotificationPleroma struct {
12         IsSeen bool `json:"is_seen"`
13 }
14
15 // Notification hold information for mastodon notification.
16 type Notification struct {
17         ID        string               `json:"id"`
18         Type      string               `json:"type"`
19         CreatedAt time.Time            `json:"created_at"`
20         Account   Account              `json:"account"`
21         Status    *Status              `json:"status"`
22         Pleroma   *NotificationPleroma `json:"pleroma"`
23 }
24
25 // GetNotifications return notifications.
26 func (c *Client) GetNotifications(ctx context.Context, pg *Pagination, excludes []string) ([]*Notification, error) {
27         var notifications []*Notification
28         params := url.Values{}
29         for _, exclude := range excludes {
30                 params.Add("exclude_types[]", exclude)
31         }
32         err := c.doAPI(ctx, http.MethodGet, "/api/v1/notifications", params, &notifications, pg)
33         if err != nil {
34                 return nil, err
35         }
36         return notifications, nil
37 }
38
39 // GetNotification return notification.
40 func (c *Client) GetNotification(ctx context.Context, id string) (*Notification, error) {
41         var notification Notification
42         err := c.doAPI(ctx, http.MethodGet, fmt.Sprintf("/api/v1/notifications/%v", id), nil, &notification, nil)
43         if err != nil {
44                 return nil, err
45         }
46         return &notification, nil
47 }
48
49 // ClearNotifications clear notifications.
50 func (c *Client) ClearNotifications(ctx context.Context) error {
51         return c.doAPI(ctx, http.MethodPost, "/api/v1/notifications/clear", nil, nil, nil)
52 }
53
54 // ReadNotifications marks notifications as read
55 // Currenly only works for Pleroma
56 func (c *Client) ReadNotifications(ctx context.Context, maxID string) error {
57         params := url.Values{}
58         params.Set("max_id", maxID)
59         return c.doAPI(ctx, http.MethodPost, "/api/v1/pleroma/notifications/read", params, nil, nil)
60 }