From ac01362ae560631b41bb753873d8cf98fe23026a Mon Sep 17 00:00:00 2001 From: milarin Date: Mon, 16 Jan 2023 09:58:33 +0100 Subject: [PATCH] refactored AnalyzeFile --- analyze_file.go | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ file_props.go | 3 +-- go.mod | 2 +- 3 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 analyze_file.go diff --git a/analyze_file.go b/analyze_file.go new file mode 100644 index 0000000..c9d5820 --- /dev/null +++ b/analyze_file.go @@ -0,0 +1,53 @@ +package logic + +import ( + "context" + "os" + + "git.milar.in/nyaanime/model" + "git.milar.in/nyaanime/parsers" + "gopkg.in/vansante/go-ffprobe.v2" +) + +// TODO cache +func AnalyzeFile(path string) (*model.ParsedFile, error) { + props := &model.ParsedFile{File: path} + + file, err := os.Open(path) + if err != nil { + return nil, err + } + defer file.Close() + + data, err := ffprobe.ProbeReader(context.Background(), file) + if err != nil { + return nil, err + } + + defaultVideoLang := "" + for _, s := range data.StreamType(ffprobe.StreamVideo) { + if s.Disposition.Default > 0 { + props.Resolution = model.Resolution(s.Height) + defaultVideoLang = parsers.ParseLanguage(s.Tags.Language) + break + } + } + + for _, s := range data.StreamType(ffprobe.StreamAudio) { + if s.Tags.Language != "" { + props.Languages = append(props.Languages, parsers.ParseLanguage(s.Tags.Language)) + } else if s.Disposition.Default > 0 { + props.Languages = append(props.Languages, defaultVideoLang) + } + } + + for _, s := range data.StreamType(ffprobe.StreamSubtitle) { + if s.Tags.Language != "" { + props.Subtitles = append(props.Subtitles, parsers.ParseLanguage(s.Tags.Language)) + } else if s.Disposition.Default > 0 { + props.Subtitles = append(props.Subtitles, defaultVideoLang) + } + } + + return props, nil +} diff --git a/file_props.go b/file_props.go index 3e48bf2..7e9a83f 100644 --- a/file_props.go +++ b/file_props.go @@ -5,7 +5,6 @@ import ( "git.milar.in/milarin/slices" "git.milar.in/nyaanime/model" - "git.milar.in/nyaanime/parsers" ) func GetAnimeEpProps(animeEp model.AnimeEpisode) (*FilePriority, bool) { @@ -18,7 +17,7 @@ func GetAnimeEpProps(animeEp model.AnimeEpisode) (*FilePriority, bool) { var mostPrio *FilePriority for _, file := range files { - props, err := parsers.AnalyzeFile(file) + props, err := AnalyzeFile(file) if err != nil { continue } diff --git a/go.mod b/go.mod index 851595e..c3b3099 100644 --- a/go.mod +++ b/go.mod @@ -12,10 +12,10 @@ require ( git.milar.in/milarin/tprint v0.0.7 git.milar.in/nyaanime/model v0.0.0-20230113095840-5eb2822653c3 git.milar.in/nyaanime/parsers v0.0.0-20221207192513-e7bce7c418d8 + gopkg.in/vansante/go-ffprobe.v2 v2.1.1 ) require ( github.com/mattn/go-runewidth v0.0.13 // indirect github.com/rivo/uniseg v0.3.4 // indirect - gopkg.in/vansante/go-ffprobe.v2 v2.1.1 // indirect )