jspf: also set username and recording MSID in exports

This commit is contained in:
Philipp Wolfer 2025-05-01 15:20:37 +02:00
parent a645ec5c78
commit d757129bd7
No known key found for this signature in database
GPG key ID: 8FDF744D4919943B
2 changed files with 18 additions and 10 deletions

View file

@ -145,7 +145,7 @@ You can help translate this project into your language with [Weblate](https://tr
## License ## License
Scotty © 2023-2024 Philipp Wolfer <phw@uploadedlobster.com> Scotty © 2023-2025 Philipp Wolfer <phw@uploadedlobster.com>
Scotty is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Scotty is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

View file

@ -180,13 +180,14 @@ func listenAsTrack(l models.Listen) jspf.Track {
} }
func trackAsListen(t jspf.Track) (*models.Listen, error) { func trackAsListen(t jspf.Track) (*models.Listen, error) {
track, addedAt, err := jspfTrackAsTrack(t) track, ext, err := jspfTrackAsTrack(t)
if err != nil { if err != nil {
return nil, err return nil, err
} }
listen := models.Listen{ listen := models.Listen{
ListenedAt: *addedAt, ListenedAt: ext.AddedAt,
UserName: ext.AddedBy,
Track: *track, Track: *track,
} }
return &listen, err return &listen, err
@ -212,16 +213,23 @@ func loveAsTrack(l models.Love) jspf.Track {
} }
func trackAsLove(t jspf.Track) (*models.Love, error) { func trackAsLove(t jspf.Track) (*models.Love, error) {
track, addedAt, err := jspfTrackAsTrack(t) track, ext, err := jspfTrackAsTrack(t)
if err != nil { if err != nil {
return nil, err return nil, err
} }
love := models.Love{ love := models.Love{
Created: *addedAt, Created: ext.AddedAt,
UserName: ext.AddedBy,
RecordingMBID: track.RecordingMBID, RecordingMBID: track.RecordingMBID,
Track: *track, Track: *track,
} }
recordingMSID, ok := track.AdditionalInfo["recording_msid"].(string)
if ok {
love.RecordingMSID = mbtypes.MBID(recordingMSID)
}
return &love, err return &love, err
} }
@ -238,7 +246,7 @@ func trackAsJSPFTrack(t models.Track) jspf.Track {
return track return track
} }
func jspfTrackAsTrack(t jspf.Track) (*models.Track, *time.Time, error) { func jspfTrackAsTrack(t jspf.Track) (*models.Track, *jspf.MusicBrainzTrackExtension, error) {
track := models.Track{ track := models.Track{
ArtistNames: []string{t.Creator}, ArtistNames: []string{t.Creator},
ReleaseName: t.Album, ReleaseName: t.Album,
@ -253,12 +261,12 @@ func jspfTrackAsTrack(t jspf.Track) (*models.Track, *time.Time, error) {
} }
} }
addedAt, err := readMusicBrainzExtension(t, &track) ext, err := readMusicBrainzExtension(t, &track)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
return &track, addedAt, nil return &track, ext, nil
} }
func makeMusicBrainzExtension(t models.Track) jspf.MusicBrainzTrackExtension { func makeMusicBrainzExtension(t models.Track) jspf.MusicBrainzTrackExtension {
@ -281,7 +289,7 @@ func makeMusicBrainzExtension(t models.Track) jspf.MusicBrainzTrackExtension {
return extension return extension
} }
func readMusicBrainzExtension(jspfTrack jspf.Track, outputTrack *models.Track) (*time.Time, error) { func readMusicBrainzExtension(jspfTrack jspf.Track, outputTrack *models.Track) (*jspf.MusicBrainzTrackExtension, error) {
ext := jspf.MusicBrainzTrackExtension{} ext := jspf.MusicBrainzTrackExtension{}
err := jspfTrack.Extension.Get(jspf.MusicBrainzTrackExtensionID, &ext) err := jspfTrack.Extension.Get(jspf.MusicBrainzTrackExtensionID, &ext)
if err != nil { if err != nil {
@ -297,7 +305,7 @@ func readMusicBrainzExtension(jspfTrack jspf.Track, outputTrack *models.Track) (
} }
} }
return &ext.AddedAt, nil return &ext, nil
} }
func (b *JSPFBackend) readJSPF() error { func (b *JSPFBackend) readJSPF() error {