From b2aebe37345ab689204c165a3537076993f82303 Mon Sep 17 00:00:00 2001 From: Dan Audne Date: Fri, 3 Nov 2023 18:02:49 +0100 Subject: [PATCH] feature: cli and bump go version --- README.md | 30 ++++++++++++++++++++++++++++-- cmd/tnp/main.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ docs/cli.png | Bin 0 -> 37726 bytes go.mod | 7 ++----- go.sum | 13 ++----------- misc.go | 3 +-- parser.go | 2 -- parser_test.go | 4 ++++ 8 files changed, 81 insertions(+), 22 deletions(-) create mode 100644 cmd/tnp/main.go create mode 100644 docs/cli.png diff --git a/README.md b/README.md index 3445d2d..de41436 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Torrent name parser in Go Do feel free to create issues with sane names that fail to parse properly -Have done a little clean up and increased the test coverage to ~95% +I've done a little clean up and increased the test coverage to ~95% ## Usage @@ -36,6 +36,32 @@ func main() { Output: ```sh -torrentparser.Torrent{Title:"blade runner 2049", AlternativeTitle:"", ContentType:1, Year:2017, Resolution:"4k", Extended:false, Unrated:false, Proper:false, Repack:false, Convert:false, Hardcoded:false, Retail:false, Remastered:false, Region:"", Container:"mkv", Source:"bluray", Codec:"x265", Audio:"", Group:"terminal", Season:-1, Episode:0, Language:"", Hdr:false, ColorDepth:"", Date:""} +torrentparser.Torrent{Title:"blade runner 2049", AlternativeTitle:"", ContentType:1, Year:2017, Resolution:"4k", Extended:false, Unrated:false, Proper:false, Repack:false, Convert:false, Hardcoded:false, Retail:false, Remastered:false, Region:"", Container:"mkv", Source:"bluray", Codec:"x265", Audio:"", Group:"terminal", Season:-1, Seasons:[]int(nil), Episode:0, Languages:[]string(nil), Hdr:false, HdrTypes:[]string(nil), ColorDepth:"", Date:""} blade runner 2049 ``` + +### Binary + +```bash +go install github.com/ProfChaos/torrent-name-parser/cmd/tnp@latest +``` + +```bash +tnp blade.runner.2049.2017.2160p.uhd.bluray.x265-terminal.mkv +``` + +```json +{"title":"blade runner 2049","alternativeTitle":"","contentType":1,"year":2017,"resolution":"4k","extended":false,"unrated":false,"proper":false,"repack":false,"convert":false,"hardcoded":false,"retail":false,"remastered":false,"region":"","container":"mkv","source":"bluray","codec":"x265","audio":"","group":"terminal","season":-1,"seasons":null,"episode":0,"languages":null,"hdr":false,"hdrTypes":null,"colorDepth":"","date":""} +``` + +#### Debug + +If you want to check where in the name the parser found a certain value you can use the debug flag. This will highlight the text for each property. + +```bash +tnp blade.runner.2049.2017.2160p.uhd.bluray.x265-terminal.mkv -debug +``` + +Output: + +![cli](docs/cli.png) diff --git a/cmd/tnp/main.go b/cmd/tnp/main.go new file mode 100644 index 0000000..07a3064 --- /dev/null +++ b/cmd/tnp/main.go @@ -0,0 +1,44 @@ +package main + +import ( + "encoding/json" + "flag" + "fmt" + "os" + + tnp "github.com/ProfChaos/torrent-name-parser" +) + +var ( + flags = flag.NewFlagSet("tnp", flag.ExitOnError) + debug = flags.Bool("debug", false, "Debug the parser") +) + +func main() { + if len(os.Args) < 2 { + fmt.Println("Usage: tnp [-debug]") + return + } + + err := flags.Parse(os.Args[2:]) + if err != nil { + panic(err) + } + + if debug != nil && *debug { + tnp.DebugParser(os.Args[1]) + return + } + + torrent, err := tnp.ParseName(os.Args[1]) + if err != nil { + panic(err) + } + + b, err := json.Marshal(torrent) + if err != nil { + panic(err) + } + + fmt.Println(string(b)) +} diff --git a/docs/cli.png b/docs/cli.png new file mode 100644 index 0000000000000000000000000000000000000000..630f2f15e6183c85bb63022b0188f3cf4b0c310a GIT binary patch literal 37726 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