Ability to disable/enable replay variance.
This commit is contained in:
parent
9b2da555d1
commit
b73f3b5bb8
2 changed files with 24 additions and 11 deletions
|
@ -96,6 +96,15 @@ class ReplayRatio(FloatPreference):
|
||||||
raise ValidationError('Must be between 0.0 and 1.0, inclusive.')
|
raise ValidationError('Must be between 0.0 and 1.0, inclusive.')
|
||||||
|
|
||||||
|
|
||||||
|
@global_preferences_registry.register
|
||||||
|
class VarianceEnabled(BooleanPreference):
|
||||||
|
section = replay
|
||||||
|
name = 'variance_enabled'
|
||||||
|
help_text = 'Enable variance to replay time based on user ratings.'
|
||||||
|
default = False
|
||||||
|
required = False
|
||||||
|
|
||||||
|
|
||||||
@global_preferences_registry.register
|
@global_preferences_registry.register
|
||||||
class MinRatingsForVariance(IntegerPreference):
|
class MinRatingsForVariance(IntegerPreference):
|
||||||
section = replay
|
section = replay
|
||||||
|
|
|
@ -246,6 +246,20 @@ class Song(Disableable, Publishable, Timestampable, models.Model):
|
||||||
return None
|
return None
|
||||||
average_rating = property(_average_rating)
|
average_rating = property(_average_rating)
|
||||||
|
|
||||||
|
def get_adjusted_ratio(self):
|
||||||
|
'''
|
||||||
|
Return a change to the replay ratio based on various factors.
|
||||||
|
'''
|
||||||
|
if radio_settings['replay__variance_enabled']:
|
||||||
|
min_ratings = radio_settings['replay__min_ratings_for_variance']
|
||||||
|
if self.rating_set.count() >= min_ratings:
|
||||||
|
ratio = radio_settings['replay__rating_variance_ratio']
|
||||||
|
|
||||||
|
# -((average - 1)/(highest_rating - 1)) * ratio
|
||||||
|
base = -((self._average_rating() - 1) / 4) * ratio
|
||||||
|
return float(base + (ratio * 0.5))
|
||||||
|
return float(0.0)
|
||||||
|
|
||||||
def get_time_until_requestable(self):
|
def get_time_until_requestable(self):
|
||||||
'''
|
'''
|
||||||
Length of time before a song can be requested again.
|
Length of time before a song can be requested again.
|
||||||
|
@ -267,17 +281,7 @@ class Song(Disableable, Publishable, Timestampable, models.Model):
|
||||||
|
|
||||||
if self._is_song() and self._is_available():
|
if self._is_song() and self._is_available():
|
||||||
if last:
|
if last:
|
||||||
# Check if we have enough ratings to change ratio
|
adjusted_ratio = self.get_adjusted_ratio()
|
||||||
min_rate = radio_settings['replay__min_ratings_for_variance']
|
|
||||||
if self.rating_set.count() >= min_rate:
|
|
||||||
ratio = radio_settings['replay__rating_variance_ratio']
|
|
||||||
|
|
||||||
# -((average - 1)/(highest_rating - 1)) * ratio
|
|
||||||
base = -((self._average_rating() - 1) / 4) * ratio
|
|
||||||
adjusted_ratio = float(base + (ratio * 0.5))
|
|
||||||
else:
|
|
||||||
adjusted_ratio = float(0.0)
|
|
||||||
|
|
||||||
return last + Song.music.wait_total(adjusted_ratio)
|
return last + Song.music.wait_total(adjusted_ratio)
|
||||||
return timezone.now()
|
return timezone.now()
|
||||||
return None
|
return None
|
||||||
|
|
Loading…
Reference in a new issue