lastfm: loves import

This commit is contained in:
Philipp Wolfer 2023-11-26 12:56:27 +01:00
parent 1249238d3a
commit 406e150987
No known key found for this signature in database
GPG key ID: 8FDF744D4919943B
5 changed files with 57 additions and 6 deletions

View file

@ -16,6 +16,7 @@ Scotty. If not, see <https://www.gnu.org/licenses/>.
package lastfm
import (
"fmt"
"net/url"
"sort"
"strconv"
@ -45,6 +46,9 @@ func (b *LastfmApiBackend) FromConfig(config *viper.Viper) models.Backend {
return b
}
func (b *LastfmApiBackend) StartImport() error { return nil }
func (b *LastfmApiBackend) FinishImport() error { return nil }
func (b *LastfmApiBackend) OAuth2Strategy(redirectUrl *url.URL) auth.OAuth2Strategy {
return lastfmStrategy{
client: b.client,
@ -57,7 +61,8 @@ func (b *LastfmApiBackend) OAuth2Setup(token oauth2.TokenSource) error {
if err != nil {
return err
}
return b.client.LoginWithToken(t.AccessToken)
b.client.SetSession(t.AccessToken)
return nil
}
func (b *LastfmApiBackend) ExportLoves(oldestTimestamp time.Time, results chan models.LovesResult, progress chan models.Progress) {
@ -130,3 +135,25 @@ out:
results <- models.LovesResult{Loves: loves, Total: totalCount}
progress <- p.Complete()
}
func (b *LastfmApiBackend) ImportLoves(export models.LovesResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
for _, love := range export.Loves {
err := b.client.Track.Love(lastfm.P{
"track": love.TrackName,
"artist": love.ArtistName(),
})
if err == nil {
importResult.UpdateTimestamp(love.Created)
importResult.ImportCount += 1
} else {
msg := fmt.Sprintf("Failed import of \"%s\" by %s: %v",
love.TrackName, love.ArtistName(), err.Error())
importResult.ImportErrors = append(importResult.ImportErrors, msg)
}
progress <- models.Progress{}.FromImportResult(importResult)
}
return importResult, nil
}