diff --git a/lib/Text/Playlist/XSPF.pm b/lib/Text/Playlist/XSPF.pm deleted file mode 100644 index 9adaae7..0000000 --- a/lib/Text/Playlist/XSPF.pm +++ /dev/null @@ -1,113 +0,0 @@ -package Text::Playlist::XSPF; - -use strict; -use warnings; -use feature qw(switch); -use utf8; - -use base 'Text::Playlist'; -use XML::XPath; - -our $VERSION = '0.02'; - -sub new { - my ($class) = @_; - - return bless({ version => 0 }, $class); -} - -sub parse { - my ($self, $text) = @_; - my @items = (); - - my $xp = XML::XPath->new(xml => $text); - if (my $vers = $xp->find('/playlist/@version')) { - $self->{version} = $vers; - } else { - return "Can't find playlist version"; - } - - my $tracks = $xp->find('/playlist/trackList/track'); - foreach my $track ($tracks->get_nodelist) { - my $item = {}; - foreach my $child ($track->getChildNodes) { - next unless (ref $child eq 'XML::XPath::Node::Element'); - my $value = $child->string_value(); - given ($child->getName()) { - when (m/title/oi) { $item->{title} = $value; } - when (m/location/oi) { $item->{location} = $value; } - default { warn "garbage inside element: $_ -> $value\n"; } - } - } - unless ($item->{title} and $item->{location}) { - warn "Missing mandatory 'title' or 'location' field\n"; - next; - } - push @items, $item; - } - - return wantarray ? @items : [ @items ]; -} - -sub dump { die("dump() unimplemented for XSPF format\n"); } - -1; - -__END__ - -=pod - -=head1 NAME - -Text::Playlist::XSPF - parser for 'xspf' format - -=head1 SYNOPSIS - - my $xspf = Text::Playlist::XSPF->new; - my @items = $xspf->load('/path/to/playlist.xspf'); - - foreach my $item (@items) { - - } - -=head1 DESCRIPTION - -Fast-and-dirty parser for xspf playlist. -Will be usefull if you're just want to read playlist or simple want -to convert such playlist to more common alternative. - -=head2 C -=head2 C -=head2 C -=head2 C - -For description of these methods see description in base class L - -=head1 Item format - -Each parsed item has the following keys in hashref: - -* location -- path or url, required. Following formats acceptable: - - Windows Path : file:///C:/music/foo.mp3 - - Linux Path : file:///media/music/foo.mp3 - - Relative Path : music/foo.mp3 - - External URL : http://www.example.com/music/bar.ogg -* title -- title for given item, required - -=head1 TODO - -C method still not implemented - -=head1 SEE ALSO - - L -- contains complete implementation for work with XSPF format - -=head1 LINKS - - L - -=head1 AUTHORS - - Alex 'AdUser' Z - -=cut diff --git a/t/xspf.t b/t/xspf.t deleted file mode 100644 index 08ca66e..0000000 --- a/t/xspf.t +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/perl - -use strict; -use warnings; -use lib 'lib'; - -use POSIX qw(tmpnam); -use Test::More tests => 3; - -require_ok('Text::Playlist::XSPF'); - -my $xspf = new_ok('Text::Playlist::XSPF' => []); - -my $path = tmpnam(); -open my $FH, ">", $path; -print $FH < - - - - Windows Path - file:///C:/music/foo.mp3 - - - Linux Path - file:///media/music/foo.mp3 - - - Relative Path - music/foo.mp3 - - - External Example - http://www.example.com/music/bar.ogg - - - -EOF -close $FH; - -my $out = [{ - location => 'file:///C:/music/foo.mp3', - title => 'Windows Path', -}, { - title => 'Linux Path', - location => 'file:///media/music/foo.mp3', -}, { - title => 'Relative Path', - location => 'music/foo.mp3', -}, { - title => 'External Example', - location => 'http://www.example.com/music/bar.ogg', -}]; -is_deeply(scalar $xspf->load($path), $out, "Loading test playlist"); - -unlink $path; - -exit 0;