Fixed import error handling

This commit is contained in:
Philipp Wolfer 2023-12-09 18:37:52 +01:00
parent 3e9ebfb9af
commit b07c393a22
No known key found for this signature in database
GPG key ID: 8FDF744D4919943B

View file

@ -24,7 +24,7 @@ import (
type ImportProcessor[T models.ListensResult | models.LovesResult] interface { type ImportProcessor[T models.ListensResult | models.LovesResult] interface {
ImportBackend() models.ImportBackend ImportBackend() models.ImportBackend
Process(results chan T, out chan models.ImportResult, progress chan models.Progress) 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 { type ListensImportProcessor struct {
@ -39,10 +39,9 @@ func (p ListensImportProcessor) Process(results chan models.ListensResult, out c
process(p, results, out, progress) 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 { if export.Error != nil {
handleError(result, export.Error, out, progress) return handleError(result, export.Error, progress), export.Error
return result
} }
if export.Total > 0 { 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) importResult, err := p.Backend.ImportListens(export, result, progress)
if err != nil { if err != nil {
handleError(importResult, err, out, progress) return handleError(result, err, progress), err
return result
} }
return importResult return importResult, nil
} }
type LovesImportProcessor struct { type LovesImportProcessor struct {
@ -70,10 +68,9 @@ func (p LovesImportProcessor) Process(results chan models.LovesResult, out chan
process(p, results, out, progress) 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 { if export.Error != nil {
handleError(result, export.Error, out, progress) return handleError(result, export.Error, progress), export.Error
return result
} }
if export.Total > 0 { 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) importResult, err := p.Backend.ImportLoves(export, result, progress)
if err != nil { if err != nil {
handleError(importResult, err, out, progress) return handleError(importResult, err, progress), err
return result
} }
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) { 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() err := processor.ImportBackend().StartImport()
if err != nil { if err != nil {
handleError(result, err, out, progress) out <- handleError(result, err, progress)
return return
} }
for exportResult := range results { 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) result.Update(importResult)
progress <- models.Progress{}.FromImportResult(result) progress <- models.Progress{}.FromImportResult(result)
} }
err = processor.ImportBackend().FinishImport() err = processor.ImportBackend().FinishImport()
if err != nil { if err != nil {
handleError(result, err, out, progress) out <- handleError(result, err, progress)
return return
} }
@ -116,8 +116,8 @@ func process[R models.LovesResult | models.ListensResult, P ImportProcessor[R]](
out <- result 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 result.Error = err
progress <- models.Progress{}.FromImportResult(result).Complete() progress <- models.Progress{}.FromImportResult(result).Complete()
out <- result return result
} }