From d26d9442a0969f7a20264b13d0fdba060461c8a1 Mon Sep 17 00:00:00 2001 From: Dmitry Sergeev Date: Thu, 17 Sep 2026 20:37:37 +0300 Subject: [PATCH] app run in app.go --- cmd/mxl-pattern/main.go | 51 +++++-------------------------- internal/app/app.go | 66 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 43 deletions(-) create mode 100644 internal/app/app.go diff --git a/cmd/mxl-pattern/main.go b/cmd/mxl-pattern/main.go index 04eb502..973ad40 100644 --- a/cmd/mxl-pattern/main.go +++ b/cmd/mxl-pattern/main.go @@ -5,7 +5,6 @@ package main import ( "context" - "errors" "fmt" "io" "log" @@ -26,8 +25,8 @@ import ( ) const ( - APP_NAME = "MXL pattern generator" - APP_VER = "0.1.0" + APP_NAME = app.Name + APP_VER = app.Version ) type appArgs struct { @@ -424,7 +423,7 @@ func main() { } } -func run(ctx context.Context, args appArgs) (runErr error) { +func run(ctx context.Context, args appArgs) error { videoCfg, err := buildVideoConfig(args) if err != nil { return fmt.Errorf("video configuration: %w", err) @@ -434,43 +433,9 @@ func run(ctx context.Context, args appArgs) (runErr error) { return fmt.Errorf("audio configuration: %w", err) } - log.Printf("%s %s", APP_NAME, APP_VER) - log.Printf("Domain: %s", args.domain) - log.Printf("Video: %dx%d %d/%d", - videoCfg.Width(), videoCfg.Height(), videoCfg.Rate().Num, videoCfg.Rate().Den) - log.Printf("Video ID: %s", videoCfg.ID()) - if audioCfg != nil { - log.Printf("Audio: %d channels %d/%d Hz %.0f dBFS", - audioCfg.Channels(), audioCfg.Rate().Num, audioCfg.Rate().Den, audioCfg.LevelDBFS) - log.Printf("Audio ID: %s", audioCfg.ID()) - } - - inst, err := mxl.NewInstance(args.domain, "") - if err != nil { - return fmt.Errorf("initialize MXL domain %q: %w", args.domain, err) - } - defer func() { - if err := inst.Close(); err != nil { - runErr = errors.Join(runErr, fmt.Errorf("close MXL instance: %w", err)) - } - }() - - runners := []app.Runner{ - { - Name: "video", - Run: func(ctx context.Context) error { - return video.Run(ctx, inst, videoCfg) - }, - }, - } - if audioCfg != nil { - runners = append(runners, app.Runner{ - Name: "audio", - Run: func(ctx context.Context) error { - return audio.Run(ctx, inst, *audioCfg) - }, - }) - } - - return app.RunConcurrent(ctx, runners...) + return app.Run(ctx, app.Config{ + Domain: args.domain, + Video: videoCfg, + Audio: audioCfg, + }) } diff --git a/internal/app/app.go b/internal/app/app.go new file mode 100644 index 0000000..e0fea40 --- /dev/null +++ b/internal/app/app.go @@ -0,0 +1,66 @@ +package app + +import ( + "context" + "errors" + "fmt" + "log" + + "mxl-pattern-generator/internal/audio" + "mxl-pattern-generator/internal/video" + + "github.com/qvest-digital/go-mxl/mxl" +) + +const ( + Name = "MXL pattern generator" + Version = "0.1.0" +) + +type Config struct { + Domain string + Video video.Config + Audio *audio.Config +} + +func Run(ctx context.Context, cfg Config) (runErr error) { + log.Printf("%s %s", Name, Version) + log.Printf("Domain: %s", cfg.Domain) + log.Printf("Video: %dx%d %d/%d", + cfg.Video.Width(), cfg.Video.Height(), cfg.Video.Rate().Num, cfg.Video.Rate().Den) + log.Printf("Video ID: %s", cfg.Video.ID()) + if cfg.Audio != nil { + log.Printf("Audio: %d channels %d/%d Hz %.0f dBFS", + cfg.Audio.Channels(), cfg.Audio.Rate().Num, cfg.Audio.Rate().Den, cfg.Audio.LevelDBFS) + log.Printf("Audio ID: %s", cfg.Audio.ID()) + } + + inst, err := mxl.NewInstance(cfg.Domain, "") + if err != nil { + return fmt.Errorf("initialize MXL domain %q: %w", cfg.Domain, err) + } + defer func() { + if err := inst.Close(); err != nil { + runErr = errors.Join(runErr, fmt.Errorf("close MXL instance: %w", err)) + } + }() + + runners := []Runner{ + { + Name: "video", + Run: func(ctx context.Context) error { + return video.Run(ctx, inst, cfg.Video) + }, + }, + } + if cfg.Audio != nil { + runners = append(runners, Runner{ + Name: "audio", + Run: func(ctx context.Context) error { + return audio.Run(ctx, inst, *cfg.Audio) + }, + }) + } + + return RunConcurrent(ctx, runners...) +}