From 6f6ff12a788110a4a38cdee1cd443442e3ef5dd5 Mon Sep 17 00:00:00 2001 From: Morgan Helton Date: Sat, 23 Sep 2023 14:53:06 -0500 Subject: [PATCH 1/2] add ChildCount to Metadata model --- models.go | 1 + 1 file changed, 1 insertion(+) diff --git a/models.go b/models.go index c8d4d90..3e73bb7 100644 --- a/models.go +++ b/models.go @@ -47,6 +47,7 @@ type Metadata struct { User User `json:"User"` AddedAt int `json:"addedAt"` Art string `json:"art"` + ChildCount int `json:"childCount"` ContentRating string `json:"contentRating"` Duration int `json:"duration"` GrandparentArt string `json:"grandparentArt"` From 5f8e634f38d49b655dbf93004d5144d9ef2d97de Mon Sep 17 00:00:00 2001 From: Morgan Helton Date: Sat, 23 Sep 2023 14:53:18 -0500 Subject: [PATCH 2/2] add season downloading to cli --- cmd/commands.go | 45 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/cmd/commands.go b/cmd/commands.go index e8e853e..fc83d2b 100644 --- a/cmd/commands.go +++ b/cmd/commands.go @@ -931,12 +931,47 @@ func downloadMedia(c *cli.Context) error { selectedMedia := results.MediaContainer.Metadata[selection] - // download media - if err := plexConn.Download(selectedMedia, downloadPath, createFolders, skipIfExists); err != nil { - return cli.NewExitError(err, 1) - } + if selectedMedia.ChildCount > 0 { + selection = -1 + selectedMediaChildren, err := plexConn.GetMetadataChildren(selectedMedia.RatingKey) + if err != nil { + return cli.NewExitError(err, 1) + } + children := selectedMediaChildren.MediaContainer.Metadata + + for i, result := range children { + fmt.Printf("\t[%d] %s\n", i, result.Title) + } + + fmt.Printf("choose media to download:") + fmt.Scanln(&selection) + + if selection < 0 || selection > len(children)-1 { + return cli.NewExitError("invalid selection", 1) + } - fmt.Printf("successfully downloaded %s\n", selectedMedia.Title) + selectedSeason := children[selection] + selectedSeasonChildren, err := plexConn.GetMetadataChildren(selectedSeason.RatingKey) + if err != nil { + return cli.NewExitError(err, 1) + } + + // download all episodes from a season + for _, result := range selectedSeasonChildren.MediaContainer.Metadata { + fmt.Printf("downloading %s\n", result.Title) + if err := plexConn.Download(result, downloadPath, createFolders, skipIfExists); err != nil { + return cli.NewExitError(err, 1) + } + } + fmt.Printf("successfully downloaded %s %s\n", selectedSeason.ParentTitle, selectedSeason.Title) + } else { + // download media + if err := plexConn.Download(selectedMedia, downloadPath, createFolders, skipIfExists); err != nil { + return cli.NewExitError(err, 1) + } + + fmt.Printf("successfully downloaded %s\n", selectedMedia.Title) + } return nil }