16 lines
725 B
Go
16 lines
725 B
Go
// Package scrobble owns the outbound-scrobble pipeline: threshold detection,
|
|
// the queue write path, and the worker goroutine. The HTTP client is in
|
|
// internal/scrobble/listenbrainz; this package consumes it.
|
|
package scrobble
|
|
|
|
// Qualifies returns true if a closed play_event meets ListenBrainz's
|
|
// recommended scrobble threshold: ≥240 seconds played OR ≥50% of the
|
|
// track length played.
|
|
//
|
|
// The two thresholds are deliberately separate from M2's skip-detection
|
|
// thresholds (which serve a different purpose — internal engine signal
|
|
// for the scoring formula's skip penalty).
|
|
func Qualifies(durationPlayedMs int, completionRatio float64) bool {
|
|
return durationPlayedMs >= 240_000 || completionRatio >= 0.5
|
|
}
|