From 0ff8cbfd17fcca5aff4d4b1e09c9b419f6bca24a Mon Sep 17 00:00:00 2001 From: Rob Emery Date: Sun, 2 Feb 2025 16:35:06 +0000 Subject: [PATCH] OK can't find any library to do this, so had to do it by hand --- dlna/contenddirectoryservice.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/dlna/contenddirectoryservice.go b/dlna/contenddirectoryservice.go index c512928b0..d75dc8cb4 100644 --- a/dlna/contenddirectoryservice.go +++ b/dlna/contenddirectoryservice.go @@ -5,13 +5,13 @@ package dlna import ( "encoding/xml" "fmt" + "math" "net/http" "net/url" "os" "path" "path/filepath" "slices" - "strconv" "strings" "time" @@ -260,7 +260,8 @@ func (cds *contentDirectoryService) doMediaFiles(tracks model.MediaFiles, basePa album := track.Album genre := track.Genre trackNo := track.TrackNumber - trackDuration := strconv.FormatFloat(float64(track.Duration), 'f', -1, 64) + + trackDurStr := floatToDurationString(track.Duration) obj := upnpav.Object{ ID: child.Id, @@ -293,7 +294,7 @@ func (cds *contentDirectoryService) doMediaFiles(tracks model.MediaFiles, basePa SupportRange: false, }.String()), Size: uint64(track.Size), - Duration: trackDuration, + Duration: trackDurStr, }) ret = append(ret, item) } @@ -301,6 +302,19 @@ func (cds *contentDirectoryService) doMediaFiles(tracks model.MediaFiles, basePa return ret, nil } +func floatToDurationString(totalSeconds32 float32) string { + totalSeconds := float64(totalSeconds32) + secondsInAnHour := float64(60*60) + secondsInAMinute := float64(60) + + hours := int(math.Floor(totalSeconds / secondsInAnHour)) + minutes := int(math.Floor(math.Mod(totalSeconds, secondsInAnHour) / secondsInAMinute)) + seconds := int(math.Floor(math.Mod(totalSeconds, secondsInAMinute))) + ms := int(math.Floor(math.Mod(totalSeconds,1) * 1000)) + + return fmt.Sprintf("%02d:%02d:%02d.%03d", hours, minutes, seconds, ms) +} + func (cds *contentDirectoryService) doAlbum(album *model.Album, basepath string, ret []interface{}, host string) ([]interface{}, error) { log.Debug(fmt.Sprintf("TODO: doAlbum Called with : '%+v', '%s'", album, basepath)) panic("doAlbum Called!")