public double CalculateSongRank(SongModel song, PlaybacksInfo playbacksInfo) { if (!song.LastPlaybackTime.HasValue) { return(MaxRank); } var factorForRating = GetFactorForRating(song.GetRatingOrDefault()); var factorForPlaybacksAge = GetFactorForPlaybackAge(playbacksInfo.GetPlaybacksPassed(song)); return(factorForRating * factorForPlaybacksAge); }
private bool IsTimeToListenHighlyRatedSong(SongModel song) { if (!maxTermsForRatings.TryGetValue(song.GetRatingOrDefault(), out var maxTerm)) { return(false); } if (song.LastPlaybackTime == null) { return(true); } return(dateTimeFacade.Now - song.LastPlaybackTime.Value >= maxTerm); }