github.com/keybase/client/go@v0.0.0-20241007131713-f10651d043c8/chat/wallet/decorate.go (about)

     1  package wallet
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/keybase/client/go/chat/utils"
     7  	"github.com/keybase/client/go/protocol/chat1"
     8  )
     9  
    10  func DecorateWithPayments(ctx context.Context, body string, payments []chat1.TextPayment) string {
    11  	var added int
    12  	seen := make(map[string]struct{})
    13  	paymentMap := make(map[string]chat1.TextPayment)
    14  	for _, p := range payments {
    15  		paymentMap[p.PaymentText] = p
    16  	}
    17  	offset := 0
    18  	parsed := FindChatTxCandidates(body)
    19  	for _, p := range parsed {
    20  		payment, ok := paymentMap[p.Full]
    21  		if !ok {
    22  			continue
    23  		}
    24  		if _, ok := seen[p.Full]; ok {
    25  			continue
    26  		}
    27  		seen[p.Full] = struct{}{}
    28  		body, added = utils.DecorateBody(ctx, body, p.Position[0]+offset, p.Position[1]-p.Position[0],
    29  			chat1.NewUITextDecorationWithPayment(payment))
    30  		offset += added
    31  	}
    32  	return body
    33  }