From 975eba4183aa9007cce2a0d0a124b4fe0c602cb5 Mon Sep 17 00:00:00 2001 From: Rogee Date: Wed, 4 Dec 2024 20:02:30 +0800 Subject: [PATCH] feat: complete generate --- .../service/{task/cmd.go => tasks/tasks.go} | 12 ++++++++---- backend/main.go | 2 ++ backend/modules/tasks/discover_medias.go | 16 ++++++++++++++-- 3 files changed, 24 insertions(+), 6 deletions(-) rename backend/common/service/{task/cmd.go => tasks/tasks.go} (82%) diff --git a/backend/common/service/task/cmd.go b/backend/common/service/tasks/tasks.go similarity index 82% rename from backend/common/service/task/cmd.go rename to backend/common/service/tasks/tasks.go index 75f2845..37045d7 100644 --- a/backend/common/service/task/cmd.go +++ b/backend/common/service/tasks/tasks.go @@ -1,8 +1,10 @@ -package task +package tasks import ( + "backend/modules/medias" "backend/modules/tasks" "backend/providers/app" + "backend/providers/postgres" "git.ipao.vip/rogeecn/atom" "git.ipao.vip/rogeecn/atom/container" @@ -12,6 +14,7 @@ import ( func defaultProviders(providers ...container.ProviderContainer) container.Providers { return append(container.Providers{ app.DefaultProvider(), + postgres.DefaultProvider(), }, providers...) } @@ -19,15 +22,16 @@ func Command() atom.Option { return atom.Command( atom.Name("tasks"), atom.Short("run tasks"), - atom.Providers(defaultProviders().With( - tasks.Provide, - )), atom.Command( atom.Name("discover"), atom.Arguments(func(cmd *cobra.Command) { cmd.Flags().String("from", "", "from path") cmd.Flags().String("to", "", "to path") }), + atom.Providers(defaultProviders().With( + tasks.Provide, + medias.Provide, + )), atom.RunE(func(cmd *cobra.Command, args []string) error { return container.Container.Invoke(func(task *tasks.DiscoverMedias) error { from, to := cmd.Flag("from").Value.String(), cmd.Flag("to").Value.String() diff --git a/backend/main.go b/backend/main.go index 05d64d2..f8decc9 100755 --- a/backend/main.go +++ b/backend/main.go @@ -7,6 +7,7 @@ import ( "backend/common/service/http" "backend/common/service/migrate" "backend/common/service/model" + "backend/common/service/tasks" "git.ipao.vip/rogeecn/atom" log "github.com/sirupsen/logrus" @@ -18,6 +19,7 @@ func main() { http.Command(), migrate.Command(), model.Command(), + tasks.Command(), } if err := atom.Serve(opts...); err != nil { diff --git a/backend/modules/tasks/discover_medias.go b/backend/modules/tasks/discover_medias.go index be9b4cd..efebc90 100644 --- a/backend/modules/tasks/discover_medias.go +++ b/backend/modules/tasks/discover_medias.go @@ -28,9 +28,19 @@ func (d *DiscoverMedias) Prepare() error { func (d *DiscoverMedias) RunE(from, to string) error { d.log.Infof("Discover medias from: %s to: %s", from, to) + if from == "" || to == "" { + return errors.New("from or to is empty") + } mapFile := filepath.Join(to, "map.json") d.log.Infof("read in from: %s", mapFile) + if _, err := os.Stat(mapFile); err != nil { + if os.IsNotExist(err) { + if err := os.WriteFile(mapFile, []byte("[]"), os.ModePerm); err != nil { + return errors.Wrapf(err, "write file: %s", mapFile) + } + } + } b, err := os.ReadFile(mapFile) if err != nil { @@ -74,6 +84,7 @@ func (d *DiscoverMedias) RunE(from, to string) error { videos := d.globVideo(dirPath) if len(videos) > 0 { video := videos[0] + d.log.Infof("video: %s", video) if err := d.ffmpegVideoToM3U8(video, to); err != nil { return errors.Wrapf(err, "ffmpeg video to m3u8: %s", video) } @@ -82,6 +93,7 @@ func (d *DiscoverMedias) RunE(from, to string) error { audios := d.globAudio(dirPath) if len(audios) > 0 { audio := audios[0] + d.log.Infof("audio: %s", audio) if err := d.ffmpegAudioToM3U8(audio, to); err != nil { return errors.Wrapf(err, "ffmpeg audio to m3u8: %s", audio) } @@ -194,7 +206,7 @@ func (d *DiscoverMedias) ffmpegVideoToM3U8(input string, output string) error { } log.Infof("cmd: ffmpeg %s", strings.Join(args, " ")) - logs, err := exec.Command("ffmpeg", args...).Output() + logs, err := exec.Command("ffmpeg", args...).CombinedOutput() if err != nil { return errors.Wrapf(err, "ffmpeg video to m3u8: %s", input) } @@ -222,7 +234,7 @@ func (d *DiscoverMedias) ffmpegAudioToM3U8(input string, output string) error { } log.Infof("cmd: ffmpeg %s", strings.Join(args, " ")) - logs, err := exec.Command("ffmpeg", args...).Output() + logs, err := exec.Command("ffmpeg", args...).CombinedOutput() if err != nil { return errors.Wrapf(err, "ffmpeg audio to m3u8: %s", input) }