github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/chat/storage/score.go (about)

     1  package storage
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/keybase/client/go/protocol/gregor1"
     7  )
     8  
     9  const (
    10  	minScoringMinutes = 1           // one minute
    11  	maxScoringMinutes = 7 * 24 * 60 // one week
    12  	frequencyWeight   = 2
    13  	mtimeWeight       = 1
    14  )
    15  
    16  func ScoreByFrequencyAndMtime(freq int, mtime gregor1.Time) float64 {
    17  	// if we are missing an mtime just backdate to a week ago
    18  	if mtime == 0 {
    19  		mtime = gregor1.ToTime(time.Now().Add(-time.Hour * 24 * 7))
    20  	}
    21  	minutes := time.Since(mtime.Time()).Minutes()
    22  	var mtimeScore float64
    23  	if minutes > maxScoringMinutes {
    24  		mtimeScore = 0
    25  	} else if minutes < minScoringMinutes {
    26  		mtimeScore = 1
    27  	} else {
    28  		mtimeScore = 1 - minutes/(maxScoringMinutes-minScoringMinutes)
    29  	}
    30  	return float64(freq*frequencyWeight) + mtimeScore*mtimeWeight
    31  }