diff --git a/internal/backends/import.go b/internal/backends/import.go index 6365cbb..6173a53 100644 --- a/internal/backends/import.go +++ b/internal/backends/import.go @@ -24,7 +24,7 @@ import ( type ImportProcessor[T models.ListensResult | models.LovesResult] interface { ImportBackend() models.ImportBackend Process(results chan T, out chan models.ImportResult, progress chan models.Progress) - Import(export T, result models.ImportResult, out chan models.ImportResult, progress chan models.Progress) models.ImportResult + Import(export T, result models.ImportResult, out chan models.ImportResult, progress chan models.Progress) (models.ImportResult, error) } type ListensImportProcessor struct { @@ -39,10 +39,9 @@ func (p ListensImportProcessor) Process(results chan models.ListensResult, out c process(p, results, out, progress) } -func (p ListensImportProcessor) Import(export models.ListensResult, result models.ImportResult, out chan models.ImportResult, progress chan models.Progress) models.ImportResult { +func (p ListensImportProcessor) Import(export models.ListensResult, result models.ImportResult, out chan models.ImportResult, progress chan models.Progress) (models.ImportResult, error) { if export.Error != nil { - handleError(result, export.Error, out, progress) - return result + return handleError(result, export.Error, progress), export.Error } if export.Total > 0 { @@ -52,10 +51,9 @@ func (p ListensImportProcessor) Import(export models.ListensResult, result model } importResult, err := p.Backend.ImportListens(export, result, progress) if err != nil { - handleError(importResult, err, out, progress) - return result + return handleError(result, err, progress), err } - return importResult + return importResult, nil } type LovesImportProcessor struct { @@ -70,10 +68,9 @@ func (p LovesImportProcessor) Process(results chan models.LovesResult, out chan process(p, results, out, progress) } -func (p LovesImportProcessor) Import(export models.LovesResult, result models.ImportResult, out chan models.ImportResult, progress chan models.Progress) models.ImportResult { +func (p LovesImportProcessor) Import(export models.LovesResult, result models.ImportResult, out chan models.ImportResult, progress chan models.Progress) (models.ImportResult, error) { if export.Error != nil { - handleError(result, export.Error, out, progress) - return result + return handleError(result, export.Error, progress), export.Error } if export.Total > 0 { @@ -83,10 +80,9 @@ func (p LovesImportProcessor) Import(export models.LovesResult, result models.Im } importResult, err := p.Backend.ImportLoves(export, result, progress) if err != nil { - handleError(importResult, err, out, progress) - return result + return handleError(importResult, err, progress), err } - return importResult + return importResult, nil } func process[R models.LovesResult | models.ListensResult, P ImportProcessor[R]](processor P, results chan R, out chan models.ImportResult, progress chan models.Progress) { @@ -96,19 +92,23 @@ func process[R models.LovesResult | models.ListensResult, P ImportProcessor[R]]( err := processor.ImportBackend().StartImport() if err != nil { - handleError(result, err, out, progress) + out <- handleError(result, err, progress) return } for exportResult := range results { - importResult := processor.Import(exportResult, result, out, progress) + importResult, err := processor.Import(exportResult, result, out, progress) + if err != nil { + out <- handleError(result, err, progress) + return + } result.Update(importResult) progress <- models.Progress{}.FromImportResult(result) } err = processor.ImportBackend().FinishImport() if err != nil { - handleError(result, err, out, progress) + out <- handleError(result, err, progress) return } @@ -116,8 +116,8 @@ func process[R models.LovesResult | models.ListensResult, P ImportProcessor[R]]( out <- result } -func handleError(result models.ImportResult, err error, out chan models.ImportResult, progress chan models.Progress) { +func handleError(result models.ImportResult, err error, progress chan models.Progress) models.ImportResult { result.Error = err progress <- models.Progress{}.FromImportResult(result).Complete() - out <- result + return result }