// 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 the skip-detection // thresholds, which feed the scoring formula's skip penalty instead. func Qualifies(durationPlayedMs int, completionRatio float64) bool { return durationPlayedMs >= 240_000 || completionRatio >= 0.5 }