mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 06:02:26 -05:00 
			
		
		
		
	Timeline improvements (#41)
Tidying up. Parent/child statuses now display correctly in status/id/context.
This commit is contained in:
		
					parent
					
						
							
								b4288f3c47
							
						
					
				
			
			
				commit
				
					
						82d9f88e42
					
				
			
		
					 39 changed files with 739 additions and 602 deletions
				
			
		
							
								
								
									
										81
									
								
								internal/visibility/util.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								internal/visibility/util.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,81 @@ | |||
| package visibility | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/gtsmodel" | ||||
| ) | ||||
| 
 | ||||
| func (f *filter) pullRelevantAccountsFromStatus(targetStatus *gtsmodel.Status) (*relevantAccounts, error) { | ||||
| 	accounts := &relevantAccounts{ | ||||
| 		MentionedAccounts: []*gtsmodel.Account{}, | ||||
| 	} | ||||
| 
 | ||||
| 	// get the author account | ||||
| 	if targetStatus.GTSAuthorAccount == nil { | ||||
| 		statusAuthor := >smodel.Account{} | ||||
| 		if err := f.db.GetByID(targetStatus.AccountID, statusAuthor); err != nil { | ||||
| 			return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting statusAuthor with id %s: %s", targetStatus.AccountID, err) | ||||
| 		} | ||||
| 		targetStatus.GTSAuthorAccount = statusAuthor | ||||
| 	} | ||||
| 	accounts.StatusAuthor = targetStatus.GTSAuthorAccount | ||||
| 
 | ||||
| 	// get the replied to account from the status and add it to the pile | ||||
| 	if targetStatus.InReplyToAccountID != "" { | ||||
| 		repliedToAccount := >smodel.Account{} | ||||
| 		if err := f.db.GetByID(targetStatus.InReplyToAccountID, repliedToAccount); err != nil { | ||||
| 			return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting repliedToAcount with id %s: %s", targetStatus.InReplyToAccountID, err) | ||||
| 		} | ||||
| 		accounts.ReplyToAccount = repliedToAccount | ||||
| 	} | ||||
| 
 | ||||
| 	// get the boosted account from the status and add it to the pile | ||||
| 	if targetStatus.BoostOfID != "" { | ||||
| 		// retrieve the boosted status first | ||||
| 		boostedStatus := >smodel.Status{} | ||||
| 		if err := f.db.GetByID(targetStatus.BoostOfID, boostedStatus); err != nil { | ||||
| 			return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting boostedStatus with id %s: %s", targetStatus.BoostOfID, err) | ||||
| 		} | ||||
| 		boostedAccount := >smodel.Account{} | ||||
| 		if err := f.db.GetByID(boostedStatus.AccountID, boostedAccount); err != nil { | ||||
| 			return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting boostedAccount with id %s: %s", boostedStatus.AccountID, err) | ||||
| 		} | ||||
| 		accounts.BoostedAccount = boostedAccount | ||||
| 
 | ||||
| 		// the boosted status might be a reply to another account so we should get that too | ||||
| 		if boostedStatus.InReplyToAccountID != "" { | ||||
| 			boostedStatusRepliedToAccount := >smodel.Account{} | ||||
| 			if err := f.db.GetByID(boostedStatus.InReplyToAccountID, boostedStatusRepliedToAccount); err != nil { | ||||
| 				return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting boostedStatusRepliedToAccount with id %s: %s", boostedStatus.InReplyToAccountID, err) | ||||
| 			} | ||||
| 			accounts.BoostedReplyToAccount = boostedStatusRepliedToAccount | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// now get all accounts with IDs that are mentioned in the status | ||||
| 	for _, mentionID := range targetStatus.Mentions { | ||||
| 
 | ||||
| 		mention := >smodel.Mention{} | ||||
| 		if err := f.db.GetByID(mentionID, mention); err != nil { | ||||
| 			return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting mention with id %s: %s", mentionID, err) | ||||
| 		} | ||||
| 
 | ||||
| 		mentionedAccount := >smodel.Account{} | ||||
| 		if err := f.db.GetByID(mention.TargetAccountID, mentionedAccount); err != nil { | ||||
| 			return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting mentioned account: %s", err) | ||||
| 		} | ||||
| 		accounts.MentionedAccounts = append(accounts.MentionedAccounts, mentionedAccount) | ||||
| 	} | ||||
| 
 | ||||
| 	return accounts, nil | ||||
| } | ||||
| 
 | ||||
| // relevantAccounts denotes accounts that are replied to, boosted by, or mentioned in a status. | ||||
| type relevantAccounts struct { | ||||
| 	StatusAuthor          *gtsmodel.Account | ||||
| 	ReplyToAccount        *gtsmodel.Account | ||||
| 	BoostedAccount        *gtsmodel.Account | ||||
| 	BoostedReplyToAccount *gtsmodel.Account | ||||
| 	MentionedAccounts     []*gtsmodel.Account | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue