Return better formatted play times (Closes #1562)

This commit is contained in:
Mathieu Comandon 2019-01-12 02:24:03 -08:00
parent e432d10d23
commit 7be6264aad
2 changed files with 24 additions and 2 deletions

View file

@ -1,5 +1,6 @@
import unicodedata
import re
import math
def slugify(value):
@ -104,5 +105,19 @@ def escape_gtk_label(string):
def get_formatted_playtime(playtime):
"""Return a human readable value of the play time"""
if not playtime:
return "0.0 hrs"
return "%.2f hrs" % float(playtime)
return "No play time recorded"
playtime = float(playtime)
hours = math.floor(playtime)
if hours:
hours_text = "%d hour%s" % (hours, "s" if hours > 1 else "")
else:
hours_text = ""
minutes = int((playtime - hours) * 60)
if minutes:
minutes_text = "%d minute%s" % (minutes, "s" if minutes > 1 else "")
else:
minutes_text = ""
return " and ".join([text for text in (hours_text, minutes_text) if text]) or "0 minute"

View file

@ -79,6 +79,13 @@ class TestStringUtils(TestCase):
)
self.assertEqual(strings.add_url_tags(text), expected)
def test_get_formatted_playtime(self):
self.assertEqual(strings.get_formatted_playtime(None), "No play time recorded")
self.assertEqual(strings.get_formatted_playtime(1.0), "1 hour")
self.assertEqual(strings.get_formatted_playtime(2.0), "2 hours")
self.assertEqual(strings.get_formatted_playtime(0.5), "30 minutes")
self.assertEqual(strings.get_formatted_playtime(1.5), "1 hour and 30 minutes")
self.assertEqual(strings.get_formatted_playtime(45.90), "45 hours and 53 minutes")
class TestVersionSort(TestCase):
def test_parse_version(self):