Compare commits

...

5 Commits

Author SHA1 Message Date
yanggqi
927d7e15db
Merge 167020310689a06318491a5f4eb11a1a17a20abf into f939ad84f308692134206e4226d23bf401720635 2025-11-12 16:28:23 -05:00
Deluan
f939ad84f3 fix(ui): increase contrast of button text in the Dark theme
Signed-off-by: Deluan <deluan@navidrome.org>
2025-11-12 16:17:41 -05:00
Deluan
c3e8c67116 feat(ui): update totalSize formatting to display two decimal places
Signed-off-by: Deluan <deluan@navidrome.org>
2025-11-12 13:23:18 -05:00
Deluan
d57a8e6d84 refactor(scanner): refactor legacyReleaseDate logic and add tests for date mapping
Signed-off-by: Deluan <deluan@navidrome.org>
2025-11-12 13:11:33 -05:00
Deluan
73ec89e1af feat(ui): add SizeField to display total size in LibraryList
Signed-off-by: Deluan <deluan@navidrome.org>
2025-11-12 13:01:17 -05:00
6 changed files with 26 additions and 39 deletions

View File

@ -23,7 +23,7 @@ func legacyTrackID(mf model.MediaFile, prependLibId bool) string {
} }
func legacyAlbumID(mf model.MediaFile, md Metadata, prependLibId bool) string { func legacyAlbumID(mf model.MediaFile, md Metadata, prependLibId bool) string {
releaseDate := legacyReleaseDate(md) _, _, releaseDate := md.mapDates()
albumPath := strings.ToLower(fmt.Sprintf("%s\\%s", legacyMapAlbumArtistName(md), legacyMapAlbumName(md))) albumPath := strings.ToLower(fmt.Sprintf("%s\\%s", legacyMapAlbumArtistName(md), legacyMapAlbumName(md)))
if !conf.Server.Scanner.GroupAlbumReleases { if !conf.Server.Scanner.GroupAlbumReleases {
if len(releaseDate) != 0 { if len(releaseDate) != 0 {
@ -55,9 +55,3 @@ func legacyMapAlbumName(md Metadata) string {
consts.UnknownAlbum, consts.UnknownAlbum,
) )
} }
// Keep the TaggedLikePicard logic for backwards compatibility
func legacyReleaseDate(md Metadata) string {
_, _, releaseDate := md.mapDates()
return string(releaseDate)
}

View File

@ -1,30 +0,0 @@
package metadata
import (
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
var _ = Describe("legacyReleaseDate", func() {
DescribeTable("legacyReleaseDate",
func(recordingDate, originalDate, releaseDate, expected string) {
md := New("", Info{
Tags: map[string][]string{
"DATE": {recordingDate},
"ORIGINALDATE": {originalDate},
"RELEASEDATE": {releaseDate},
},
})
result := legacyReleaseDate(md)
Expect(result).To(Equal(expected))
},
Entry("regular mapping", "2020-05-15", "2019-02-10", "2021-01-01", "2021-01-01"),
Entry("legacy mapping", "2020-05-15", "2019-02-10", "", "2020-05-15"),
Entry("legacy mapping, originalYear < year", "2018-05-15", "2019-02-10", "2021-01-01", "2021-01-01"),
Entry("legacy mapping, originalYear empty", "2020-05-15", "", "2021-01-01", "2021-01-01"),
Entry("legacy mapping, releaseYear", "2020-05-15", "2019-02-10", "2021-01-01", "2021-01-01"),
Entry("legacy mapping, same dates", "2020-05-15", "2020-05-15", "", "2020-05-15"),
)
})

View File

@ -75,6 +75,23 @@ var _ = Describe("ToMediaFile", func() {
Expect(mf.OriginalYear).To(Equal(1966)) Expect(mf.OriginalYear).To(Equal(1966))
Expect(mf.ReleaseYear).To(Equal(2014)) Expect(mf.ReleaseYear).To(Equal(2014))
}) })
DescribeTable("legacyReleaseDate (TaggedLikePicard old behavior)",
func(recordingDate, originalDate, releaseDate, expected string) {
mf := toMediaFile(model.RawTags{
"DATE": {recordingDate},
"ORIGINALDATE": {originalDate},
"RELEASEDATE": {releaseDate},
})
Expect(mf.ReleaseDate).To(Equal(expected))
},
Entry("regular mapping", "2020-05-15", "2019-02-10", "2021-01-01", "2021-01-01"),
Entry("legacy mapping", "2020-05-15", "2019-02-10", "", "2020-05-15"),
Entry("legacy mapping, originalYear < year", "2018-05-15", "2019-02-10", "2021-01-01", "2021-01-01"),
Entry("legacy mapping, originalYear empty", "2020-05-15", "", "2021-01-01", "2021-01-01"),
Entry("legacy mapping, releaseYear", "2020-05-15", "2019-02-10", "2021-01-01", "2021-01-01"),
Entry("legacy mapping, same dates", "2020-05-15", "2020-05-15", "", "2020-05-15"),
)
}) })
Describe("Lyrics", func() { Describe("Lyrics", func() {

View File

@ -169,7 +169,7 @@ const LibraryEdit = (props) => {
resource={'library'} resource={'library'}
source={'totalSize'} source={'totalSize'}
label={translate('resources.library.fields.totalSize')} label={translate('resources.library.fields.totalSize')}
format={formatBytes} format={(v) => formatBytes(v, 2)}
fullWidth fullWidth
variant="outlined" variant="outlined"
/> />

View File

@ -9,7 +9,7 @@ import {
BooleanField, BooleanField,
} from 'react-admin' } from 'react-admin'
import { useMediaQuery } from '@material-ui/core' import { useMediaQuery } from '@material-ui/core'
import { List, DateField, useResourceRefresh } from '../common' import { List, DateField, useResourceRefresh, SizeField } from '../common'
const LibraryFilter = (props) => ( const LibraryFilter = (props) => (
<Filter {...props} variant={'outlined'}> <Filter {...props} variant={'outlined'}>
@ -42,6 +42,7 @@ const LibraryList = (props) => {
<NumberField source="totalSongs" label="Songs" /> <NumberField source="totalSongs" label="Songs" />
<NumberField source="totalAlbums" label="Albums" /> <NumberField source="totalAlbums" label="Albums" />
<NumberField source="totalMissingFiles" label="Missing Files" /> <NumberField source="totalMissingFiles" label="Missing Files" />
<SizeField source="totalSize" />
<DateField <DateField
source="lastScanAt" source="lastScanAt"
label="Last Scan" label="Last Scan"

View File

@ -16,6 +16,11 @@ export default {
color: 'white', color: 'white',
}, },
}, },
MuiButton: {
textPrimary: {
color: '#fff',
},
},
NDLogin: { NDLogin: {
systemNameLink: { systemNameLink: {
color: '#0085ff', color: '#0085ff',