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,10 +39,10 @@ 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:
if err := ctx.Err(); err != nil {
return importResult, err
}
importResult.UpdateTimestamp(listen.ListenedAt)
importResult.ImportCount += 1
msg := fmt.Sprintf("🎶 %v: \"%v\" by %v (%v)",
@ -50,17 +50,16 @@ func (b *DumpBackend) ImportListens(ctx context.Context, export models.ListensRe
importResult.Log(models.Info, msg)
progress <- models.TransferProgress{}.FromImportResult(importResult, false)
}
}
return importResult, nil
}
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:
if err := ctx.Err(); err != nil {
return importResult, err
}
importResult.UpdateTimestamp(love.Created)
importResult.ImportCount += 1
msg := fmt.Sprintf("❤️ %v: \"%v\" by %v (%v)",
@ -68,7 +67,6 @@ func (b *DumpBackend) ImportLoves(ctx context.Context, export models.LovesResult
importResult.Log(models.Info, msg)
progress <- models.TransferProgress{}.FromImportResult(importResult, false)
}
}
return importResult, nil
}

View file

@ -106,12 +106,12 @@ 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 {
@ -121,7 +121,6 @@ func process[R models.LovesResult | models.ListensResult, P ImportProcessor[R]](
}
progress <- p.FromImportResult(result, false)
}
}
if err := processor.ImportBackend().FinishImport(); err != nil {
out <- handleError(result, err, progress)

View file

@ -123,16 +123,15 @@ 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:
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)
return importResult, nil
@ -167,16 +166,15 @@ 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:
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)
return importResult, nil

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)