Simplify context cancellation checks

This commit is contained in:
Philipp Wolfer 2025-05-22 14:13:31 +02:00
parent 4a66e3d432
commit 20853f7601
No known key found for this signature in database
GPG key ID: 8FDF744D4919943B
5 changed files with 53 additions and 68 deletions

View file

@ -39,17 +39,16 @@ func (b *DumpBackend) FinishImport() error { return nil }
func (b *DumpBackend) ImportListens(ctx context.Context, export models.ListensResult, importResult models.ImportResult, progress chan models.TransferProgress) (models.ImportResult, error) {
for _, listen := range export.Items {
select {
case <-ctx.Done():
return importResult, ctx.Err()
default:
importResult.UpdateTimestamp(listen.ListenedAt)
importResult.ImportCount += 1
msg := fmt.Sprintf("🎶 %v: \"%v\" by %v (%v)",
listen.ListenedAt, listen.TrackName, listen.ArtistName(), listen.RecordingMBID)
importResult.Log(models.Info, msg)
progress <- models.TransferProgress{}.FromImportResult(importResult, false)
if err := ctx.Err(); err != nil {
return importResult, err
}
importResult.UpdateTimestamp(listen.ListenedAt)
importResult.ImportCount += 1
msg := fmt.Sprintf("🎶 %v: \"%v\" by %v (%v)",
listen.ListenedAt, listen.TrackName, listen.ArtistName(), listen.RecordingMBID)
importResult.Log(models.Info, msg)
progress <- models.TransferProgress{}.FromImportResult(importResult, false)
}
return importResult, nil
@ -57,17 +56,16 @@ func (b *DumpBackend) ImportListens(ctx context.Context, export models.ListensRe
func (b *DumpBackend) ImportLoves(ctx context.Context, export models.LovesResult, importResult models.ImportResult, progress chan models.TransferProgress) (models.ImportResult, error) {
for _, love := range export.Items {
select {
case <-ctx.Done():
return importResult, ctx.Err()
default:
importResult.UpdateTimestamp(love.Created)
importResult.ImportCount += 1
msg := fmt.Sprintf("❤️ %v: \"%v\" by %v (%v)",
love.Created, love.TrackName, love.ArtistName(), love.RecordingMBID)
importResult.Log(models.Info, msg)
progress <- models.TransferProgress{}.FromImportResult(importResult, false)
if err := ctx.Err(); err != nil {
return importResult, err
}
importResult.UpdateTimestamp(love.Created)
importResult.ImportCount += 1
msg := fmt.Sprintf("❤️ %v: \"%v\" by %v (%v)",
love.Created, love.TrackName, love.ArtistName(), love.RecordingMBID)
importResult.Log(models.Info, msg)
progress <- models.TransferProgress{}.FromImportResult(importResult, false)
}
return importResult, nil

View file

@ -106,21 +106,20 @@ func process[R models.LovesResult | models.ListensResult, P ImportProcessor[R]](
}
for exportResult := range results {
select {
case <-ctx.Done():
if err := ctx.Err(); err != nil {
processor.ImportBackend().FinishImport()
out <- handleError(result, ctx.Err(), progress)
out <- handleError(result, err, progress)
return
default:
importResult, err := processor.Import(ctx, exportResult, result, out, progress)
result.Update(importResult)
if err != nil {
processor.ImportBackend().FinishImport()
out <- handleError(result, err, progress)
return
}
progress <- p.FromImportResult(result, false)
}
importResult, err := processor.Import(ctx, exportResult, result, out, progress)
result.Update(importResult)
if err != nil {
processor.ImportBackend().FinishImport()
out <- handleError(result, err, progress)
return
}
progress <- p.FromImportResult(result, false)
}
if err := processor.ImportBackend().FinishImport(); err != nil {

View file

@ -123,15 +123,14 @@ func (b *JSPFBackend) ExportListens(ctx context.Context, oldestTimestamp time.Ti
func (b *JSPFBackend) ImportListens(ctx context.Context, export models.ListensResult, importResult models.ImportResult, progress chan models.TransferProgress) (models.ImportResult, error) {
for _, listen := range export.Items {
select {
case <-ctx.Done():
return importResult, ctx.Err()
default:
track := listenAsTrack(listen)
b.playlist.Tracks = append(b.playlist.Tracks, track)
importResult.ImportCount += 1
importResult.UpdateTimestamp(listen.ListenedAt)
if err := ctx.Err(); err != nil {
return importResult, err
}
track := listenAsTrack(listen)
b.playlist.Tracks = append(b.playlist.Tracks, track)
importResult.ImportCount += 1
importResult.UpdateTimestamp(listen.ListenedAt)
}
progress <- models.TransferProgress{}.FromImportResult(importResult, false)
@ -167,15 +166,14 @@ func (b *JSPFBackend) ExportLoves(ctx context.Context, oldestTimestamp time.Time
func (b *JSPFBackend) ImportLoves(ctx context.Context, export models.LovesResult, importResult models.ImportResult, progress chan models.TransferProgress) (models.ImportResult, error) {
for _, love := range export.Items {
select {
case <-ctx.Done():
return importResult, ctx.Err()
default:
track := loveAsTrack(love)
b.playlist.Tracks = append(b.playlist.Tracks, track)
importResult.ImportCount += 1
importResult.UpdateTimestamp(love.Created)
if err := ctx.Err(); err != nil {
return importResult, err
}
track := loveAsTrack(love)
b.playlist.Tracks = append(b.playlist.Tracks, track)
importResult.ImportCount += 1
importResult.UpdateTimestamp(love.Created)
}
progress <- models.TransferProgress{}.FromImportResult(importResult, false)

View file

@ -103,13 +103,11 @@ func (b *LastfmApiBackend) ExportListens(ctx context.Context, oldestTimestamp ti
out:
for page > 0 {
select {
case <-ctx.Done():
results <- models.ListensResult{Error: ctx.Err()}
if err := ctx.Err(); err != nil {
results <- models.ListensResult{Error: err}
p.Export.Abort()
progress <- p
return
default:
}
args := lastfm.P{
@ -195,10 +193,8 @@ out:
func (b *LastfmApiBackend) ImportListens(ctx context.Context, export models.ListensResult, importResult models.ImportResult, progress chan models.TransferProgress) (models.ImportResult, error) {
total := len(export.Items)
for i := 0; i < total; i += MaxListensPerSubmission {
select {
case <-ctx.Done():
return importResult, ctx.Err()
default:
if err := ctx.Err(); err != nil {
return importResult, err
}
listens := export.Items[i:min(i+MaxListensPerSubmission, total)]
@ -290,13 +286,11 @@ func (b *LastfmApiBackend) ExportLoves(ctx context.Context, oldestTimestamp time
out:
for {
select {
case <-ctx.Done():
results <- models.LovesResult{Error: ctx.Err()}
if err := ctx.Err(); err != nil {
results <- models.LovesResult{Error: err}
p.Export.Abort()
progress <- p
return
default:
}
result, err := b.client.User.GetLovedTracks(lastfm.P{
@ -362,10 +356,8 @@ out:
func (b *LastfmApiBackend) ImportLoves(ctx context.Context, export models.LovesResult, importResult models.ImportResult, progress chan models.TransferProgress) (models.ImportResult, error) {
for _, love := range export.Items {
select {
case <-ctx.Done():
return importResult, ctx.Err()
default:
if err := ctx.Err(); err != nil {
return importResult, err
}
err := b.client.Track.Love(lastfm.P{

View file

@ -90,13 +90,11 @@ func (b *SpotifyHistoryBackend) ExportListens(ctx context.Context, oldestTimesta
fileCount := int64(len(files))
p.Export.Total = fileCount
for i, filePath := range files {
select {
case <-ctx.Done():
results <- models.ListensResult{Error: ctx.Err()}
if err := ctx.Err(); err != nil {
results <- models.ListensResult{Error: err}
p.Export.Abort()
progress <- p
return
default:
}
history, err := readHistoryFile(filePath)