diff --git a/internal/backends/dump/dump.go b/internal/backends/dump/dump.go index 4714bd6..8d7c641 100644 --- a/internal/backends/dump/dump.go +++ b/internal/backends/dump/dump.go @@ -73,14 +73,17 @@ func (b *DumpBackend) InitConfig(config *config.ServiceConfig) error { func (b *DumpBackend) StartImport() error { return nil } -func (b *DumpBackend) FinishImport() error { +func (b *DumpBackend) FinishImport(result *models.ImportResult) error { if b.print { out := new(strings.Builder) _, err := io.Copy(out, b.buffer) if err != nil { return err } - fmt.Println(out.String()) + + if result != nil { + result.Log(models.Output, out.String()) + } } // Close the io writer if it is closable diff --git a/internal/backends/import.go b/internal/backends/import.go index 97912dd..ae6da92 100644 --- a/internal/backends/import.go +++ b/internal/backends/import.go @@ -107,7 +107,7 @@ func process[R models.LovesResult | models.ListensResult, P ImportProcessor[R]]( for exportResult := range results { if err := ctx.Err(); err != nil { - processor.ImportBackend().FinishImport() + processor.ImportBackend().FinishImport(&result) out <- handleError(result, err, progress) return } @@ -116,14 +116,14 @@ func process[R models.LovesResult | models.ListensResult, P ImportProcessor[R]]( ctx, exportResult, result.Copy(), out, progress) result.Update(&importResult) if err != nil { - processor.ImportBackend().FinishImport() + processor.ImportBackend().FinishImport(&result) out <- handleError(result, err, progress) return } progress <- p.FromImportResult(result, false) } - if err := processor.ImportBackend().FinishImport(); err != nil { + if err := processor.ImportBackend().FinishImport(&result); err != nil { out <- handleError(result, err, progress) return } diff --git a/internal/backends/jspf/jspf.go b/internal/backends/jspf/jspf.go index e2bcde1..887fd72 100644 --- a/internal/backends/jspf/jspf.go +++ b/internal/backends/jspf/jspf.go @@ -90,7 +90,7 @@ func (b *JSPFBackend) StartImport() error { return b.readJSPF() } -func (b *JSPFBackend) FinishImport() error { +func (b *JSPFBackend) FinishImport(result *models.ImportResult) error { return b.writeJSPF() } diff --git a/internal/backends/lastfm/lastfm.go b/internal/backends/lastfm/lastfm.go index b34452e..186a631 100644 --- a/internal/backends/lastfm/lastfm.go +++ b/internal/backends/lastfm/lastfm.go @@ -70,8 +70,10 @@ func (b *LastfmApiBackend) InitConfig(config *config.ServiceConfig) error { return nil } -func (b *LastfmApiBackend) StartImport() error { return nil } -func (b *LastfmApiBackend) FinishImport() error { return nil } +func (b *LastfmApiBackend) StartImport() error { return nil } +func (b *LastfmApiBackend) FinishImport(result *models.ImportResult) error { + return nil +} func (b *LastfmApiBackend) OAuth2Strategy(redirectURL *url.URL) auth.OAuth2Strategy { return lastfmStrategy{ diff --git a/internal/backends/listenbrainz/listenbrainz.go b/internal/backends/listenbrainz/listenbrainz.go index dcc28fa..98d1525 100644 --- a/internal/backends/listenbrainz/listenbrainz.go +++ b/internal/backends/listenbrainz/listenbrainz.go @@ -73,8 +73,10 @@ func (b *ListenBrainzApiBackend) InitConfig(config *config.ServiceConfig) error return nil } -func (b *ListenBrainzApiBackend) StartImport() error { return nil } -func (b *ListenBrainzApiBackend) FinishImport() error { return nil } +func (b *ListenBrainzApiBackend) StartImport() error { return nil } +func (b *ListenBrainzApiBackend) FinishImport(result *models.ImportResult) error { + return nil +} func (b *ListenBrainzApiBackend) ExportListens(ctx context.Context, oldestTimestamp time.Time, results chan models.ListensResult, progress chan models.TransferProgress) { startTime := time.Now() diff --git a/internal/backends/maloja/maloja.go b/internal/backends/maloja/maloja.go index f082d9b..d85309f 100644 --- a/internal/backends/maloja/maloja.go +++ b/internal/backends/maloja/maloja.go @@ -61,8 +61,10 @@ func (b *MalojaApiBackend) InitConfig(config *config.ServiceConfig) error { return nil } -func (b *MalojaApiBackend) StartImport() error { return nil } -func (b *MalojaApiBackend) FinishImport() error { return nil } +func (b *MalojaApiBackend) StartImport() error { return nil } +func (b *MalojaApiBackend) FinishImport(result *models.ImportResult) error { + return nil +} func (b *MalojaApiBackend) ExportListens(ctx context.Context, oldestTimestamp time.Time, results chan models.ListensResult, progress chan models.TransferProgress) { page := 0 diff --git a/internal/backends/scrobblerlog/scrobblerlog.go b/internal/backends/scrobblerlog/scrobblerlog.go index 6d42f3c..13aecba 100644 --- a/internal/backends/scrobblerlog/scrobblerlog.go +++ b/internal/backends/scrobblerlog/scrobblerlog.go @@ -126,7 +126,7 @@ func (b *ScrobblerLogBackend) StartImport() error { return nil } -func (b *ScrobblerLogBackend) FinishImport() error { +func (b *ScrobblerLogBackend) FinishImport(result *models.ImportResult) error { return b.file.Close() } diff --git a/internal/cli/transfer.go b/internal/cli/transfer.go index 3aabb4b..7c5ecc0 100644 --- a/internal/cli/transfer.go +++ b/internal/cli/transfer.go @@ -157,7 +157,11 @@ func (c *TransferCmd[E, I, R]) Transfer(exp backends.ExportProcessor[R], imp bac fmt.Println() fmt.Println(i18n.Tr("Import log:")) for _, entry := range result.ImportLog { - fmt.Println(i18n.Tr("%v: %v", entry.Type, entry.Message)) + if entry.Type != models.Output { + fmt.Println(i18n.Tr("%v: %v", entry.Type, entry.Message)) + } else { + fmt.Println(entry.Message) + } } } diff --git a/internal/models/interfaces.go b/internal/models/interfaces.go index 2f4beaf..79a4c6c 100644 --- a/internal/models/interfaces.go +++ b/internal/models/interfaces.go @@ -46,7 +46,7 @@ type ImportBackend interface { // The implementation can perform all steps here to finalize the // export/import and free used resources. - FinishImport() error + FinishImport(result *ImportResult) error } // Must be implemented by services supporting the export of listens. diff --git a/internal/models/models.go b/internal/models/models.go index a93a043..69280b3 100644 --- a/internal/models/models.go +++ b/internal/models/models.go @@ -169,6 +169,7 @@ type LovesResult ExportResult[LovesList] type LogEntryType string const ( + Output LogEntryType = "" Info LogEntryType = "Info" Warning LogEntryType = "Warning" Error LogEntryType = "Error"