diff --git a/app/cmd/archive/archive.go b/app/cmd/archive/archive.go index 891d20a2..2151b9fd 100644 --- a/app/cmd/archive/archive.go +++ b/app/cmd/archive/archive.go @@ -35,6 +35,9 @@ func NewArchiveCommand(ctx context.Context, app *app.Application) *cobra.Command cmd.AddCommand(NewFromGooglePhotosCommand(ctx, cmd, app, options)) cmd.AddCommand(NewFromImmichCommand(ctx, cmd, app, options)) + cmd.RunE = func(cmd *cobra.Command, args []string) error { //nolint:contextcheck + return errors.New("you must specify a subcommand to the archive command") + } return cmd } diff --git a/app/cmd/archive/run.go b/app/cmd/archive/run.go index c2fc2548..388bd933 100644 --- a/app/cmd/archive/run.go +++ b/app/cmd/archive/run.go @@ -9,7 +9,7 @@ import ( "github.com/simulot/immich-go/internal/fileevent" ) -func run(ctx context.Context, jnl *fileevent.Recorder, _ *app.Application, source adapters.Reader, dest adapters.AssetWriter) error { // nolint:unparam +func run(ctx context.Context, jnl *fileevent.Recorder, app *app.Application, source adapters.Reader, dest adapters.AssetWriter) error { // nolint:unparam gChan := source.Browse(ctx) errCount := 0 for { @@ -18,6 +18,7 @@ func run(ctx context.Context, jnl *fileevent.Recorder, _ *app.Application, sourc return ctx.Err() case g, ok := <-gChan: if !ok { + app.Jnl().Report() return nil } for _, a := range g.Assets { diff --git a/internal/e2eTests/archive/e2e_archive_test.go b/internal/e2eTests/archive/e2e_archive_test.go index 304417dd..bc62106e 100644 --- a/internal/e2eTests/archive/e2e_archive_test.go +++ b/internal/e2eTests/archive/e2e_archive_test.go @@ -36,6 +36,7 @@ func TestArchiveFromGooglePhotos(t *testing.T) { err = c.ExecuteContext(ctx) if err != nil && a.Log().GetSLog() != nil { a.Log().Error(err.Error()) + t.Error(err) } } @@ -71,12 +72,15 @@ func TestArchiveFromFolder(t *testing.T) { err = c.ExecuteContext(ctx) if err != nil && a.Log().GetSLog() != nil { a.Log().Error(err.Error()) + t.Error(err) return } c, a = cmd.RootImmichGoCommand(ctx) c.SetArgs([]string{ - "archive", "from-imich", + "archive", "from-immich", + "--from-server=" + e2e.MyEnv("IMMICHGO_SERVER"), + "--from-api-key=" + e2e.MyEnv("IMMICHGO_APIKEY"), "--write-to-folder=" + tmpDir, e2e.MyEnv("IMMICHGO_TESTFILES") + "/burst/Reflex", }) @@ -85,6 +89,7 @@ func TestArchiveFromFolder(t *testing.T) { err = c.ExecuteContext(ctx) if err != nil && a.Log().GetSLog() != nil { a.Log().Error(err.Error()) + t.Error(err) } } @@ -120,6 +125,7 @@ func TestArchiveFromImmich(t *testing.T) { err = c.ExecuteContext(ctx) if err != nil && a.Log().GetSLog() != nil { a.Log().Error(err.Error()) + t.Error(err) } c, a = cmd.RootImmichGoCommand(ctx) c.SetArgs([]string{ @@ -133,5 +139,6 @@ func TestArchiveFromImmich(t *testing.T) { err = c.ExecuteContext(ctx) if err != nil && a.Log().GetSLog() != nil { a.Log().Error(err.Error()) + t.Error(err) } } diff --git a/internal/fileevent/fileevents.go b/internal/fileevent/fileevents.go index a3953af5..858a0531 100644 --- a/internal/fileevent/fileevents.go +++ b/internal/fileevent/fileevents.go @@ -170,9 +170,7 @@ func (r *Recorder) SetLogger(l *slog.Logger) { func (r *Recorder) Report() { sb := strings.Builder{} - sb.WriteString("\n") - sb.WriteString("Input analysis:\n") - sb.WriteString("---------------\n") + countAnalysis := 0 for _, c := range []Code{ DiscoveredImage, DiscoveredVideo, @@ -183,12 +181,29 @@ func (r *Recorder) Report() { AnalysisAssociatedMetadata, AnalysisMissingAssociatedMetadata, } { - sb.WriteString(fmt.Sprintf("%-40s: %7d\n", c.String(), r.counts[c])) + countAnalysis += int(r.counts[c]) } - sb.WriteString("\n") - sb.WriteString("Uploading:\n") - sb.WriteString("----------\n") + if countAnalysis > 0 { + sb.WriteString("\n") + sb.WriteString("Input analysis:\n") + sb.WriteString("---------------\n") + for _, c := range []Code{ + DiscoveredImage, + DiscoveredVideo, + DiscoveredSidecar, + DiscoveredDiscarded, + DiscoveredUnsupported, + AnalysisLocalDuplicate, + AnalysisAssociatedMetadata, + AnalysisMissingAssociatedMetadata, + } { + sb.WriteString(fmt.Sprintf("%-40s: %7d\n", c.String(), r.counts[c])) + } + sb.WriteString("\n") + } + + countsUpload := 0 for _, c := range []Code{ Uploaded, UploadServerError, @@ -197,12 +212,29 @@ func (r *Recorder) Report() { UploadServerDuplicate, UploadServerBetter, } { - sb.WriteString(fmt.Sprintf("%-40s: %7d\n", c.String(), r.counts[c])) + countsUpload += int(r.counts[c]) } - fmt.Println(sb.String()) - lines := strings.Split(sb.String(), "\n") - for _, s := range lines { - r.log.Info(s) + if countsUpload > 0 { + sb.WriteString("Uploading:\n") + sb.WriteString("----------\n") + for _, c := range []Code{ + Uploaded, + UploadServerError, + UploadNotSelected, + UploadUpgraded, + UploadServerDuplicate, + UploadServerBetter, + } { + sb.WriteString(fmt.Sprintf("%-40s: %7d\n", c.String(), r.counts[c])) + } + fmt.Println(sb.String()) + } + + if countsUpload > 0 || countAnalysis > 0 { + lines := strings.Split(sb.String(), "\n") + for _, s := range lines { + r.log.Info(s) + } } }