|
|
- #!/usr/bin/perl
-
- =pod
-
- =head1 NAME
-
- playlist.pl - Get file paths for rhythmbox playlists.
-
- =head1 SYNOPSIS
-
- ./playlist.pl [pattern]
- ./playlist.pl --list [pattern]
- ./playlist.pl --file path/to/playlists.xml
-
- =head1 OPTIONS
-
- =over
-
- =item B<--list [pattern]>
-
- Show available playlists, optionally restricted to those matching some regex.
-
- =item B<--song-pattern pattern>
-
- Restrict song URIs to those matching some pattern. Defaults to "file://".
-
- =item B<--raw-uri>
-
- Print a full URI, undecoded.
-
- =item B<--file filename>
-
- Specify a playlists.xml file.
-
- =back
-
- =head1 DESCRIPTION
-
- Worse is better, baby.
-
- This started at around 12 lines with a couple of regexen, and you could
- probably get most of it down to a one-liner without much trouble. I decided to
- add a couple of extra options instead.
-
- =head1 BUGS
-
- Are you kidding? I'd be shocked if this worked anywhere besides my laptop.
-
- =head1 AUTHOR
-
- Brennen Bearnes <bbearnes@gmail.com>
- http://p1k3.com/
- No Copyright
-
- =cut
-
- use strict;
- use warnings;
- use 5.10.00;
-
- use Rhythmbox::Playlist;
- use Getopt::Long qw(:config auto_help);
-
- # Set a few defaults:
- my %options = (
- file => "$ENV{HOME}/.gnome2/rhythmbox/playlists.xml",
- 'song_pattern' => 'file://',
- );
-
- my $list = undef;
- my $raw_uri = undef;
-
- GetOptions(
- 'file=s' => \$options{'file'},
- 'song-pattern=s' => \$options{'song_pattern'},
-
- 'list' => \$list,
- 'raw-uri' => \$raw_uri,
- );
-
- my $lists = Rhythmbox::Playlist->new(%options);
-
- # Take patterns from whatever's left in arguments:
- my @patterns = @ARGV;
- $patterns[0] //= '.*';
-
- for my $pattern (@patterns) {
- if ($list) {
- print join "\n", $lists->lists($pattern);
- } else {
- if ($raw_uri) {
- print join "\n", $lists->songs($pattern);
- } else {
- print join "\n", $lists->songs_decoded($pattern);
- }
- }
- }
|