mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-29 07:22:24 -05:00
[feature] Add List functionality (#1802)
* start working on lists * further list work * test list db functions nicely * more work on lists * peepoopeepoo * poke * start list timeline func * we're getting there lads * couldn't be me working on stuff... could it? * hook up handlers * fiddling * weeee * woah * screaming, pissing * fix streaming being a whiny baby * lint, small test fix, swagger * tidying up, testing * fucked! by the linter * move timelines to state like a boss * add timeline start to tests using state * invalidate lists
This commit is contained in:
parent
282be6f26d
commit
f5c004d67d
123 changed files with 5654 additions and 970 deletions
|
|
@ -33,7 +33,7 @@ func InitTestConfig() {
|
|||
}
|
||||
|
||||
var testDefaults = config.Configuration{
|
||||
LogLevel: "info",
|
||||
LogLevel: "trace",
|
||||
LogDbQueries: true,
|
||||
ApplicationName: "gotosocial",
|
||||
LandingPageUser: "",
|
||||
|
|
|
|||
|
|
@ -39,6 +39,8 @@ var testModels = []interface{}{
|
|||
>smodel.EmailDomainBlock{},
|
||||
>smodel.Follow{},
|
||||
>smodel.FollowRequest{},
|
||||
>smodel.List{},
|
||||
>smodel.ListEntry{},
|
||||
>smodel.MediaAttachment{},
|
||||
>smodel.Mention{},
|
||||
>smodel.Status{},
|
||||
|
|
@ -248,6 +250,18 @@ func StandardDBSetup(db db.DB, accounts map[string]*gtsmodel.Account) {
|
|||
}
|
||||
}
|
||||
|
||||
for _, v := range NewTestLists() {
|
||||
if err := db.Put(ctx, v); err != nil {
|
||||
log.Panic(nil, err)
|
||||
}
|
||||
}
|
||||
|
||||
for _, v := range NewTestListEntries() {
|
||||
if err := db.Put(ctx, v); err != nil {
|
||||
log.Panic(nil, err)
|
||||
}
|
||||
}
|
||||
|
||||
for _, v := range NewTestNotifications() {
|
||||
if err := db.Put(ctx, v); err != nil {
|
||||
log.Panic(nil, err)
|
||||
|
|
|
|||
|
|
@ -1961,6 +1961,38 @@ func NewTestFollows() map[string]*gtsmodel.Follow {
|
|||
}
|
||||
}
|
||||
|
||||
func NewTestLists() map[string]*gtsmodel.List {
|
||||
return map[string]*gtsmodel.List{
|
||||
"local_account_1_list_1": {
|
||||
ID: "01H0G8E4Q2J3FE3JDWJVWEDCD1",
|
||||
CreatedAt: TimeMustParse("2022-05-14T13:21:09+02:00"),
|
||||
UpdatedAt: TimeMustParse("2022-05-14T13:21:09+02:00"),
|
||||
Title: "Cool Ass Posters From This Instance",
|
||||
AccountID: "01F8MH1H7YV1Z7D2C8K2730QBF",
|
||||
RepliesPolicy: gtsmodel.RepliesPolicyFollowed,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func NewTestListEntries() map[string]*gtsmodel.ListEntry {
|
||||
return map[string]*gtsmodel.ListEntry{
|
||||
"local_account_1_list_1_entry_1": {
|
||||
ID: "01H0G89MWVQE0M58VD2HQYMQWH",
|
||||
CreatedAt: TimeMustParse("2022-05-14T13:21:09+02:00"),
|
||||
UpdatedAt: TimeMustParse("2022-05-14T13:21:09+02:00"),
|
||||
ListID: "01H0G8E4Q2J3FE3JDWJVWEDCD1",
|
||||
FollowID: "01F8PYDCE8XE23GRE5DPZJDZDP",
|
||||
},
|
||||
"local_account_1_list_1_entry_2": {
|
||||
ID: "01H0G8FFM1AGQDRNGBGGX8CYJQ",
|
||||
CreatedAt: TimeMustParse("2022-05-14T13:21:09+02:00"),
|
||||
UpdatedAt: TimeMustParse("2022-05-14T13:21:09+02:00"),
|
||||
ListID: "01H0G8E4Q2J3FE3JDWJVWEDCD1",
|
||||
FollowID: "01F8PY8RHWRQZV038T4E8T9YK8",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func NewTestBlocks() map[string]*gtsmodel.Block {
|
||||
return map[string]*gtsmodel.Block{
|
||||
"local_account_2_block_remote_account_1": {
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ package testrig
|
|||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"mime/multipart"
|
||||
"net/url"
|
||||
|
|
@ -27,7 +28,11 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/superseriousbusiness/gotosocial/internal/messages"
|
||||
tlprocessor "github.com/superseriousbusiness/gotosocial/internal/processing/timeline"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/state"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/timeline"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/typeutils"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/visibility"
|
||||
)
|
||||
|
||||
func StartWorkers(state *state.State) {
|
||||
|
|
@ -47,6 +52,28 @@ func StopWorkers(state *state.State) {
|
|||
_ = state.Workers.Media.Stop()
|
||||
}
|
||||
|
||||
func StartTimelines(state *state.State, filter *visibility.Filter, typeConverter typeutils.TypeConverter) {
|
||||
state.Timelines.Home = timeline.NewManager(
|
||||
tlprocessor.HomeTimelineGrab(state),
|
||||
tlprocessor.HomeTimelineFilter(state, filter),
|
||||
tlprocessor.HomeTimelineStatusPrepare(state, typeConverter),
|
||||
tlprocessor.SkipInsert(),
|
||||
)
|
||||
if err := state.Timelines.Home.Start(); err != nil {
|
||||
panic(fmt.Sprintf("error starting home timeline: %s", err))
|
||||
}
|
||||
|
||||
state.Timelines.List = timeline.NewManager(
|
||||
tlprocessor.ListTimelineGrab(state),
|
||||
tlprocessor.ListTimelineFilter(state, filter),
|
||||
tlprocessor.ListTimelineStatusPrepare(state, typeConverter),
|
||||
tlprocessor.SkipInsert(),
|
||||
)
|
||||
if err := state.Timelines.List.Start(); err != nil {
|
||||
panic(fmt.Sprintf("error starting list timeline: %s", err))
|
||||
}
|
||||
}
|
||||
|
||||
// CreateMultipartFormData is a handy function for taking a fieldname and a filename, and creating a multipart form bytes buffer
|
||||
// with the file contents set in the given fieldname. The extraFields param can be used to add extra FormFields to the request, as necessary.
|
||||
// The returned bytes.Buffer b can be used like so:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue