Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,41 @@ plex library clean 1

# Show active activities/background tasks
plex library status

# Show details for a section
plex library section show 1

# Create or edit a section
plex library section create "Movies" --type movie --agent tv.plex.agents.movie --location /srv/media/movies
plex library section edit 1 --language en-AU --pref languageOverride=en-AU

# Cancel one section refresh or stop all refreshes
plex library refresh cancel 1
plex library refresh stop-all --yes

# Update item metadata and preferences
plex library item edit 12345 --set title="New Title" --lock title
plex library item prefs set 12345 --pref introDetection=1
plex library section prefs defaults --type movie --agent tv.plex.agents.movie

# Run advanced detectors
plex library detect intros 27018 --force
plex library detect status 999

# Use discovery helpers
plex library discover collections 1
plex library discover autocomplete 1 --query sta

# Download binary helpers
plex library artwork get 12345 --element poster --output /tmp/poster.jpg
plex library media file --url /library/metadata/27017/theme/1771256497 --output /tmp/theme.mp3
plex library media part 38540 1704960287 file.mkv --output /tmp/episode.mkv
plex library media part-index 77 sd --interval 1000 --output /tmp/index.bif
plex library media stream get 77 srt --output /tmp/subtitle.srt

# Attach subtitles from a URL or local file
plex library subtitle add 12345 --url https://example.com/subs/en.srt --language eng
plex library subtitle add 12345 --file ./subs/en.srt --language eng --format srt
```

#### Authenticate
Expand Down
53 changes: 53 additions & 0 deletions cmd/plex/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,59 @@ func applyOutputFormat(cli *CLI, format string) {
cli.Library.Update.Output = format
cli.Library.Clean.Output = format
cli.Library.Status.Output = format
cli.Library.Section.Show.Output = format
cli.Library.Section.Create.Output = format
cli.Library.Section.Edit.Output = format
cli.Library.Section.Delete.Output = format
cli.Library.Section.Prefs.List.Output = format
cli.Library.Section.Prefs.Set.Output = format
cli.Library.Section.Prefs.Defaults.Output = format
cli.Library.Section.Filters.Output = format
cli.Library.Section.Sorts.Output = format
cli.Library.Section.Letters.Output = format
cli.Library.Refresh.Cancel.Output = format
cli.Library.Refresh.StopAll.Output = format
cli.Library.Item.Delete.Output = format
cli.Library.Item.Edit.Output = format
cli.Library.Item.Refresh.Output = format
cli.Library.Item.Analyze.Output = format
cli.Library.Item.Unmatch.Output = format
cli.Library.Item.Split.Output = format
cli.Library.Item.Merge.Output = format
cli.Library.Item.Prefs.List.Output = format
cli.Library.Item.Prefs.Set.Output = format
cli.Library.Item.BulkUpdate.Output = format
cli.Library.Subtitle.Add.Output = format
cli.Library.Artwork.Set.Output = format
cli.Library.Artwork.Update.Output = format
cli.Library.Detect.Ads.Output = format
cli.Library.Detect.Credits.Output = format
cli.Library.Detect.Intros.Output = format
cli.Library.Detect.DeleteIntros.Output = format
cli.Library.Detect.Voice.Output = format
cli.Library.Detect.BIF.Output = format
cli.Library.Detect.Status.Output = format
cli.Library.Discover.Tags.Output = format
cli.Library.Discover.Collections.Output = format
cli.Library.Discover.Common.Output = format
cli.Library.Discover.Related.Output = format
cli.Library.Discover.Similar.Output = format
cli.Library.Discover.SonicSimilar.Output = format
cli.Library.Discover.Autocomplete.Output = format
cli.Library.Discover.Matches.Output = format
cli.Library.Discover.RandomArt.Output = format
cli.Library.Person.Show.Output = format
cli.Library.Person.Media.Output = format
cli.Library.Media.Extras.Output = format
cli.Library.Media.Tree.Output = format
cli.Library.Media.Leaves.Output = format
cli.Library.Media.Stream.Delete.Output = format
cli.Library.Media.Stream.Offset.Output = format
cli.Library.Media.Levels.Output = format
cli.Library.Media.Loudness.Output = format
cli.Library.Media.Marker.Create.Output = format
cli.Library.Media.Marker.Edit.Output = format
cli.Library.Media.Marker.Delete.Output = format
cli.ServerInfo.Output = format
cli.Playlist.List.Output = format
cli.Playlist.Create.Output = format
Expand Down
30 changes: 30 additions & 0 deletions cmd/plex/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import (
"path/filepath"
"testing"

"github.com/alecthomas/kong"

"github.com/dogbertdev/plexcli/internal/config"
)

Expand Down Expand Up @@ -74,3 +76,31 @@ func TestLoadConfigAppliesCacheFlagsWhenSet(t *testing.T) {
t.Fatalf("expected CacheRefresh=true")
}
}

func TestApplyOutputFormatDoesNotOverwritePartIndexPath(t *testing.T) {
cli := &CLI{}
cli.Library.Media.PartIndex.Output = "/tmp/index.bif"

applyOutputFormat(cli, "json")

if cli.Library.Media.PartIndex.Output != "/tmp/index.bif" {
t.Fatalf("expected part-index output path to be preserved, got %q", cli.Library.Media.PartIndex.Output)
}
}

func TestLibraryMediaFileParsesDirectLibraryPathWithoutIDs(t *testing.T) {
var cli CLI
parser, err := kong.New(&cli)
if err != nil {
t.Fatalf("kong.New() error = %v", err)
}

_, err = parser.Parse([]string{
"library", "media", "file",
"--url", "/library/metadata/27017/theme/1771256497",
"--output", "/tmp/theme.mp3",
})
if err != nil {
t.Fatalf("parser.Parse() error = %v", err)
}
}
Loading
Loading