From afba4c9915d8cee7345da602e6f6da743fbea795 Mon Sep 17 00:00:00 2001
From: Deluan <deluan@deluan.com>
Date: Tue, 14 Apr 2020 15:23:11 -0400
Subject: [PATCH] Add size and play count/date to Song Details

---
 ui/src/common/SizeField.js   | 30 ++++++++++++++++++++++++++++++
 ui/src/common/SongDetails.js |  6 +++++-
 ui/src/common/index.js       |  2 ++
 3 files changed, 37 insertions(+), 1 deletion(-)
 create mode 100644 ui/src/common/SizeField.js

diff --git a/ui/src/common/SizeField.js b/ui/src/common/SizeField.js
new file mode 100644
index 000000000..be895ec99
--- /dev/null
+++ b/ui/src/common/SizeField.js
@@ -0,0 +1,30 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+
+const SizeField = ({ record = {}, source }) => {
+  return <span>{formatBytes(record[source])}</span>
+}
+
+function formatBytes(bytes, decimals = 2) {
+  if (bytes === 0) return '0 Bytes'
+
+  const k = 1024
+  const dm = decimals < 0 ? 0 : decimals
+  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
+
+  const i = Math.floor(Math.log(bytes) / Math.log(k))
+
+  return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]
+}
+
+SizeField.propTypes = {
+  label: PropTypes.string,
+  record: PropTypes.object,
+  source: PropTypes.string.isRequired
+}
+
+SizeField.defaultProps = {
+  addLabel: true
+}
+
+export default SizeField
diff --git a/ui/src/common/SongDetails.js b/ui/src/common/SongDetails.js
index 4ea823a8e..4ba32719f 100644
--- a/ui/src/common/SongDetails.js
+++ b/ui/src/common/SongDetails.js
@@ -6,9 +6,10 @@ import {
   DateField,
   TextField
 } from 'react-admin'
-import { BitrateField } from './index'
+import { BitrateField, SizeField } from './index'
 
 const SongDetails = (props) => {
+  const { record } = props
   return (
     <Show {...props} title=" ">
       <SimpleShowLayout>
@@ -18,6 +19,9 @@ const SongDetails = (props) => {
         <BooleanField source="compilation" />
         <BitrateField source="bitRate" />
         <DateField source="updatedAt" showTime />
+        <SizeField source="size" />
+        <TextField source="playCount" />
+        {record.playCount > 0 && <DateField source="playDate" showTime />}
       </SimpleShowLayout>
     </Show>
   )
diff --git a/ui/src/common/index.js b/ui/src/common/index.js
index c5b435cf0..6d3b14078 100644
--- a/ui/src/common/index.js
+++ b/ui/src/common/index.js
@@ -6,10 +6,12 @@ import PlayButton from './PlayButton'
 import SimpleList from './SimpleList'
 import RangeField, { formatRange } from './RangeField'
 import SongDetails from './SongDetails'
+import SizeField from './SizeField'
 
 export {
   Title,
   DurationField,
+  SizeField,
   BitrateField,
   Pagination,
   PlayButton,