@@ -931,12 +931,47 @@ func downloadMedia(c *cli.Context) error {
931931
932932 selectedMedia := results .MediaContainer .Metadata [selection ]
933933
934- // download media
935- if err := plexConn .Download (selectedMedia , downloadPath , createFolders , skipIfExists ); err != nil {
936- return cli .NewExitError (err , 1 )
937- }
934+ if selectedMedia .ChildCount > 0 {
935+ selection = - 1
936+ selectedMediaChildren , err := plexConn .GetMetadataChildren (selectedMedia .RatingKey )
937+ if err != nil {
938+ return cli .NewExitError (err , 1 )
939+ }
940+ children := selectedMediaChildren .MediaContainer .Metadata
941+
942+ for i , result := range children {
943+ fmt .Printf ("\t [%d] %s\n " , i , result .Title )
944+ }
945+
946+ fmt .Printf ("choose media to download:" )
947+ fmt .Scanln (& selection )
948+
949+ if selection < 0 || selection > len (children )- 1 {
950+ return cli .NewExitError ("invalid selection" , 1 )
951+ }
938952
939- fmt .Printf ("successfully downloaded %s\n " , selectedMedia .Title )
953+ selectedSeason := children [selection ]
954+ selectedSeasonChildren , err := plexConn .GetMetadataChildren (selectedSeason .RatingKey )
955+ if err != nil {
956+ return cli .NewExitError (err , 1 )
957+ }
958+
959+ // download all episodes from a season
960+ for _ , result := range selectedSeasonChildren .MediaContainer .Metadata {
961+ fmt .Printf ("downloading %s\n " , result .Title )
962+ if err := plexConn .Download (result , downloadPath , createFolders , skipIfExists ); err != nil {
963+ return cli .NewExitError (err , 1 )
964+ }
965+ }
966+ fmt .Printf ("successfully downloaded %s %s\n " , selectedSeason .ParentTitle , selectedSeason .Title )
967+ } else {
968+ // download media
969+ if err := plexConn .Download (selectedMedia , downloadPath , createFolders , skipIfExists ); err != nil {
970+ return cli .NewExitError (err , 1 )
971+ }
972+
973+ fmt .Printf ("successfully downloaded %s\n " , selectedMedia .Title )
974+ }
940975
941976 return nil
942977}
0 commit comments