mirror of
https://git.sr.ht/~phw/scotty
synced 2025-04-30 21:57:06 +02:00
Funkwhale: Implemented LovesExport
This commit is contained in:
parent
48c8843f91
commit
9316838d59
6 changed files with 446 additions and 13 deletions
|
@ -49,7 +49,7 @@ func (b FunkwhaleApiBackend) ExportListens(oldestTimestamp time.Time) ([]models.
|
|||
page := 1
|
||||
perPage := MaxItemsPerGet
|
||||
|
||||
listens := make([]models.Listen, 0)
|
||||
listens := make([]models.Listen, 0, 2*MaxItemsPerGet)
|
||||
|
||||
out:
|
||||
for {
|
||||
|
@ -64,7 +64,7 @@ out:
|
|||
}
|
||||
|
||||
for _, fwListen := range result.Results {
|
||||
listen := ListenFromFunkwhale(fwListen)
|
||||
listen := fwListen.ToListen()
|
||||
if listen.ListenedAt.Unix() > oldestTimestamp.Unix() {
|
||||
listens = append(listens, listen)
|
||||
} else {
|
||||
|
@ -84,10 +84,49 @@ out:
|
|||
return listens, nil
|
||||
}
|
||||
|
||||
func ListenFromFunkwhale(fwListen Listening) models.Listen {
|
||||
track := fwListen.Track
|
||||
func (b FunkwhaleApiBackend) ExportLoves(oldestTimestamp time.Time) ([]models.Love, error) {
|
||||
page := 1
|
||||
perPage := MaxItemsPerGet
|
||||
|
||||
loves := make([]models.Love, 0, 2*MaxItemsPerGet)
|
||||
|
||||
out:
|
||||
for {
|
||||
result, err := b.client.GetFavoriteTracks(page, perPage)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
count := len(result.Results)
|
||||
if count == 0 {
|
||||
break out
|
||||
}
|
||||
|
||||
for _, favorite := range result.Results {
|
||||
love := favorite.ToLove()
|
||||
if love.Created.Unix() > oldestTimestamp.Unix() {
|
||||
loves = append(loves, love)
|
||||
} else {
|
||||
break out
|
||||
}
|
||||
}
|
||||
|
||||
if result.Next == "" {
|
||||
// No further results
|
||||
break out
|
||||
}
|
||||
|
||||
page += 1
|
||||
}
|
||||
|
||||
slices.Reverse(loves)
|
||||
return loves, nil
|
||||
}
|
||||
|
||||
func (l Listening) ToListen() models.Listen {
|
||||
track := l.Track
|
||||
listen := models.Listen{
|
||||
UserName: fwListen.User.UserName,
|
||||
UserName: l.User.UserName,
|
||||
Track: models.Track{
|
||||
TrackName: track.Title,
|
||||
ReleaseName: track.Album.Title,
|
||||
|
@ -103,7 +142,7 @@ func ListenFromFunkwhale(fwListen Listening) models.Listen {
|
|||
},
|
||||
}
|
||||
|
||||
listenedAt, err := time.Parse(time.RFC3339, fwListen.CreationDate)
|
||||
listenedAt, err := time.Parse(time.RFC3339, l.CreationDate)
|
||||
if err == nil {
|
||||
listen.ListenedAt = listenedAt
|
||||
}
|
||||
|
@ -114,3 +153,36 @@ func ListenFromFunkwhale(fwListen Listening) models.Listen {
|
|||
|
||||
return listen
|
||||
}
|
||||
|
||||
func (f FavoriteTrack) ToLove() models.Love {
|
||||
track := f.Track
|
||||
recordingMbid := models.MBID(track.RecordingMbid)
|
||||
love := models.Love{
|
||||
UserName: f.User.UserName,
|
||||
RecordingMbid: recordingMbid,
|
||||
Track: models.Track{
|
||||
TrackName: track.Title,
|
||||
ReleaseName: track.Album.Title,
|
||||
ArtistNames: []string{track.Artist.Name},
|
||||
TrackNumber: track.Position,
|
||||
RecordingMbid: recordingMbid,
|
||||
ReleaseMbid: models.MBID(track.Album.ReleaseMbid),
|
||||
ArtistMbids: []models.MBID{models.MBID(track.Artist.ArtistMbid)},
|
||||
Tags: track.Tags,
|
||||
AdditionalInfo: map[string]any{
|
||||
"media_player": FunkwhaleClientName,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
created, err := time.Parse(time.RFC3339, f.CreationDate)
|
||||
if err == nil {
|
||||
love.Created = created
|
||||
}
|
||||
|
||||
if len(track.Uploads) > 0 {
|
||||
love.Track.Duration = time.Duration(track.Uploads[0].Duration * int(time.Second))
|
||||
}
|
||||
|
||||
return love
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue