mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-30 10:22:25 -05:00 
			
		
		
		
	Timeline manager (#40)
* start messing about with timeline manager * i have no idea what i'm doing * i continue to not know what i'm doing * it's coming along * bit more progress * update timeline with new posts as they come in * lint and fmt * Select accounts where empty string * restructure a bunch, get unfaves working * moving stuff around * federate status deletes properly * mention regex better but not 100% there * fix regex * some more hacking away at the timeline code phew * fix up some little things * i can't even * more timeline stuff * move to ulid * fiddley * some lil fixes for kibou compatibility * timelines working pretty alright! * tidy + lint
This commit is contained in:
		
					parent
					
						
							
								6ac6f8d614
							
						
					
				
			
			
				commit
				
					
						b4288f3c47
					
				
			
		
					 96 changed files with 3458 additions and 1679 deletions
				
			
		
							
								
								
									
										105
									
								
								internal/processing/synchronous/status/create.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								internal/processing/synchronous/status/create.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,105 @@ | |||
| package status | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| 
 | ||||
| 	apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/gtserror" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/gtsmodel" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/id" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/util" | ||||
| ) | ||||
| 
 | ||||
| func (p *processor) Create(account *gtsmodel.Account, application *gtsmodel.Application, form *apimodel.AdvancedStatusCreateForm) (*apimodel.Status, gtserror.WithCode) { | ||||
| 	uris := util.GenerateURIsForAccount(account.Username, p.config.Protocol, p.config.Host) | ||||
| 	thisStatusID, err := id.NewULID() | ||||
| 	if err != nil { | ||||
| 		return nil, gtserror.NewErrorInternalError(err) | ||||
| 	} | ||||
| 	thisStatusURI := fmt.Sprintf("%s/%s", uris.StatusesURI, thisStatusID) | ||||
| 	thisStatusURL := fmt.Sprintf("%s/%s", uris.StatusesURL, thisStatusID) | ||||
| 
 | ||||
| 	newStatus := >smodel.Status{ | ||||
| 		ID:                       thisStatusID, | ||||
| 		URI:                      thisStatusURI, | ||||
| 		URL:                      thisStatusURL, | ||||
| 		CreatedAt:                time.Now(), | ||||
| 		UpdatedAt:                time.Now(), | ||||
| 		Local:                    true, | ||||
| 		AccountID:                account.ID, | ||||
| 		ContentWarning:           form.SpoilerText, | ||||
| 		ActivityStreamsType:      gtsmodel.ActivityStreamsNote, | ||||
| 		Sensitive:                form.Sensitive, | ||||
| 		Language:                 form.Language, | ||||
| 		CreatedWithApplicationID: application.ID, | ||||
| 		Text:                     form.Status, | ||||
| 	} | ||||
| 
 | ||||
| 	// check if replyToID is ok | ||||
| 	if err := p.processReplyToID(form, account.ID, newStatus); err != nil { | ||||
| 		return nil, gtserror.NewErrorInternalError(err) | ||||
| 	} | ||||
| 
 | ||||
| 	// check if mediaIDs are ok | ||||
| 	if err := p.processMediaIDs(form, account.ID, newStatus); err != nil { | ||||
| 		return nil, gtserror.NewErrorInternalError(err) | ||||
| 	} | ||||
| 
 | ||||
| 	// check if visibility settings are ok | ||||
| 	if err := p.processVisibility(form, account.Privacy, newStatus); err != nil { | ||||
| 		return nil, gtserror.NewErrorInternalError(err) | ||||
| 	} | ||||
| 
 | ||||
| 	// handle language settings | ||||
| 	if err := p.processLanguage(form, account.Language, newStatus); err != nil { | ||||
| 		return nil, gtserror.NewErrorInternalError(err) | ||||
| 	} | ||||
| 
 | ||||
| 	// handle mentions | ||||
| 	if err := p.processMentions(form, account.ID, newStatus); err != nil { | ||||
| 		return nil, gtserror.NewErrorInternalError(err) | ||||
| 	} | ||||
| 
 | ||||
| 	if err := p.processTags(form, account.ID, newStatus); err != nil { | ||||
| 		return nil, gtserror.NewErrorInternalError(err) | ||||
| 	} | ||||
| 
 | ||||
| 	if err := p.processEmojis(form, account.ID, newStatus); err != nil { | ||||
| 		return nil, gtserror.NewErrorInternalError(err) | ||||
| 	} | ||||
| 
 | ||||
| 	if err := p.processContent(form, account.ID, newStatus); err != nil { | ||||
| 		return nil, gtserror.NewErrorInternalError(err) | ||||
| 	} | ||||
| 
 | ||||
| 	// put the new status in the database, generating an ID for it in the process | ||||
| 	if err := p.db.Put(newStatus); err != nil { | ||||
| 		return nil, gtserror.NewErrorInternalError(err) | ||||
| 	} | ||||
| 
 | ||||
| 	// change the status ID of the media attachments to the new status | ||||
| 	for _, a := range newStatus.GTSMediaAttachments { | ||||
| 		a.StatusID = newStatus.ID | ||||
| 		a.UpdatedAt = time.Now() | ||||
| 		if err := p.db.UpdateByID(a.ID, a); err != nil { | ||||
| 			return nil, gtserror.NewErrorInternalError(err) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// send it back to the processor for async processing | ||||
| 	p.fromClientAPI <- gtsmodel.FromClientAPI{ | ||||
| 		APObjectType:   gtsmodel.ActivityStreamsNote, | ||||
| 		APActivityType: gtsmodel.ActivityStreamsCreate, | ||||
| 		GTSModel:       newStatus, | ||||
| 		OriginAccount:  account, | ||||
| 	} | ||||
| 
 | ||||
| 	// return the frontend representation of the new status to the submitter | ||||
| 	mastoStatus, err := p.tc.StatusToMasto(newStatus, account, account, nil, newStatus.GTSReplyToAccount, nil) | ||||
| 	if err != nil { | ||||
| 		return nil, gtserror.NewErrorInternalError(fmt.Errorf("error converting status %s to frontend representation: %s", newStatus.ID, err)) | ||||
| 	} | ||||
| 
 | ||||
| 	return mastoStatus, nil | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue