From 1804fb3e5038b7582df730c9590fec4f6b537c58 Mon Sep 17 00:00:00 2001
From: Deluan <deluan@navidrome.org>
Date: Sun, 20 Dec 2020 13:29:09 -0500
Subject: [PATCH] Fix duration formatting, add days and don't show 60 seconds

---
 ui/src/utils/formatters.js      | 11 +++++++----
 ui/src/utils/formatters.test.js | 10 ++++++++--
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/ui/src/utils/formatters.js b/ui/src/utils/formatters.js
index 3702c5d70..3474f5cb7 100644
--- a/ui/src/utils/formatters.js
+++ b/ui/src/utils/formatters.js
@@ -11,12 +11,15 @@ export const formatBytes = (bytes, decimals = 2) => {
 }
 
 export const formatDuration = (d) => {
-  const hours = Math.floor(d / 3600)
+  const days = Math.floor(d / 86400)
+  const hours = Math.floor(d / 3600) % 24
   const minutes = Math.floor(d / 60) % 60
-  const seconds = d % 60
-  return [hours, minutes, seconds]
-    .map((v) => Math.round(v).toString())
+  const seconds = Math.floor(d % 60)
+  const f = [hours, minutes, seconds]
+    .map((v) => v.toString())
     .map((v) => (v.length !== 2 ? '0' + v : v))
     .filter((v, i) => v !== '00' || i > 0)
     .join(':')
+
+  return `${days > 0 ? days + ':' : ''}${f}`
 }
diff --git a/ui/src/utils/formatters.test.js b/ui/src/utils/formatters.test.js
index 0cb8c94af..3beed2088 100644
--- a/ui/src/utils/formatters.test.js
+++ b/ui/src/utils/formatters.test.js
@@ -18,10 +18,16 @@ const hour = 3600
 const minute = 60
 
 describe('formatDuration', () => {
-  it('format seconds', () => {
+  it('formats seconds', () => {
     expect(formatDuration(0)).toEqual('00:00')
     expect(formatDuration(59)).toEqual('00:59')
+    expect(formatDuration(59.99)).toEqual('00:59')
+  })
+
+  it('formats days, hours and minutes', () => {
     expect(formatDuration(hour + minute + 1)).toEqual('01:01:01')
-    expect(formatDuration(2 * day + 3 * hour + 7 * minute)).toEqual('51:07:00')
+    expect(formatDuration(3 * day + 3 * hour + 7 * minute)).toEqual(
+      '3:03:07:00'
+    )
   })
 })