From 540edef0c20dad4ea13d8af091ccf69796b848b6 Mon Sep 17 00:00:00 2001 From: Vyr Cossont Date: Mon, 9 Sep 2024 15:56:58 -0700 Subject: [feature] Implement exclusive lists (#3280) Fixes #2616 --- internal/api/client/accounts/lists_test.go | 2 +- internal/api/client/lists/listcreate.go | 37 +++++++++++++++++++++++++++++- internal/api/client/lists/listupdate.go | 18 ++++++++++++--- internal/api/model/list.go | 12 ++++++++++ 4 files changed, 64 insertions(+), 5 deletions(-) (limited to 'internal/api') diff --git a/internal/api/client/accounts/lists_test.go b/internal/api/client/accounts/lists_test.go index 637babc35..95b50b1d3 100644 --- a/internal/api/client/accounts/lists_test.go +++ b/internal/api/client/accounts/lists_test.go @@ -89,7 +89,7 @@ func (suite *ListsTestSuite) getLists(targetAccountID string, expectedHTTPStatus func (suite *ListsTestSuite) TestGetListsHit() { targetAccount := suite.testAccounts["admin_account"] - suite.getLists(targetAccount.ID, http.StatusOK, `[{"id":"01H0G8E4Q2J3FE3JDWJVWEDCD1","title":"Cool Ass Posters From This Instance","replies_policy":"followed"}]`) + suite.getLists(targetAccount.ID, http.StatusOK, `[{"id":"01H0G8E4Q2J3FE3JDWJVWEDCD1","title":"Cool Ass Posters From This Instance","replies_policy":"followed","exclusive":false}]`) } func (suite *ListsTestSuite) TestGetListsNoHit() { diff --git a/internal/api/client/lists/listcreate.go b/internal/api/client/lists/listcreate.go index 9046ce34d..c8f547ccc 100644 --- a/internal/api/client/lists/listcreate.go +++ b/internal/api/client/lists/listcreate.go @@ -46,6 +46,35 @@ import ( // produces: // - application/json // +// parameters: +// - +// name: title +// type: string +// description: |- +// Title of this list. +// Sample: Cool People +// in: formData +// - +// name: replies_policy +// type: string +// description: |- +// RepliesPolicy for this list. +// followed = Show replies to any followed user +// list = Show replies to members of the list +// none = Show replies to no one +// Sample: list +// enum: +// - followed +// - list +// - none +// in: formData +// - +// name: exclusive +// in: formData +// description: Hide posts from members of this list from your home timeline. +// type: boolean +// default: false +// // security: // - OAuth2 Bearer: // - write:lists @@ -101,7 +130,13 @@ func (m *Module) ListCreatePOSTHandler(c *gin.Context) { return } - apiList, errWithCode := m.processor.List().Create(c.Request.Context(), authed.Account, form.Title, repliesPolicy) + apiList, errWithCode := m.processor.List().Create( + c.Request.Context(), + authed.Account, + form.Title, + repliesPolicy, + form.Exclusive, + ) if errWithCode != nil { apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) return diff --git a/internal/api/client/lists/listupdate.go b/internal/api/client/lists/listupdate.go index 312aa9ec7..38caa9621 100644 --- a/internal/api/client/lists/listupdate.go +++ b/internal/api/client/lists/listupdate.go @@ -75,6 +75,11 @@ import ( // - list // - none // in: formData +// - +// name: exclusive +// in: formData +// description: Hide posts from members of this list from your home timeline. +// type: boolean // // security: // - OAuth2 Bearer: @@ -146,13 +151,20 @@ func (m *Module) ListUpdatePUTHandler(c *gin.Context) { repliesPolicy = &rp } - if form.Title == nil && repliesPolicy == nil { - err = errors.New("neither title nor replies_policy was set; nothing to update") + if form.Title == nil && repliesPolicy == nil && form.Exclusive == nil { + err = errors.New("neither title nor replies_policy nor exclusive was set; nothing to update") apiutil.ErrorHandler(c, gtserror.NewErrorBadRequest(err, err.Error()), m.processor.InstanceGetV1) return } - apiList, errWithCode := m.processor.List().Update(c.Request.Context(), authed.Account, targetListID, form.Title, repliesPolicy) + apiList, errWithCode := m.processor.List().Update( + c.Request.Context(), + authed.Account, + targetListID, + form.Title, + repliesPolicy, + form.Exclusive, + ) if errWithCode != nil { apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) return diff --git a/internal/api/model/list.go b/internal/api/model/list.go index 03ea3420d..2f3e3855f 100644 --- a/internal/api/model/list.go +++ b/internal/api/model/list.go @@ -30,6 +30,9 @@ type List struct { // list = Show replies to members of the list // none = Show replies to no one RepliesPolicy string `json:"replies_policy"` + // Exclusive setting for this list. + // If true, hide posts from members of this list from your home timeline. + Exclusive bool `json:"exclusive"` } // ListCreateRequest models list creation parameters. @@ -53,6 +56,11 @@ type ListCreateRequest struct { // - list // - none RepliesPolicy string `form:"replies_policy" json:"replies_policy" xml:"replies_policy"` + // Exclusive setting for this list. + // If true, hide posts from members of this list from your home timeline. + // default: false + // in: formData + Exclusive bool `form:"exclusive" json:"exclusive" xml:"exclusive"` } // ListUpdateRequest models list update parameters. @@ -70,6 +78,10 @@ type ListUpdateRequest struct { // Sample: list // in: formData RepliesPolicy *string `form:"replies_policy" json:"replies_policy" xml:"replies_policy"` + // Exclusive setting for this list. + // If true, hide posts from members of this list from your home timeline. + // in: formData + Exclusive *bool `form:"exclusive" json:"exclusive" xml:"exclusive"` } // ListAccountsChangeRequest is a list of account IDs to add to or remove from a list. -- cgit v1.2.3