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 {
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
}