// 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 }