Apache2-EmbedMP3

 view release on metacpan or  search on metacpan

lib/Apache2/EmbedMP3.pm  view on Meta::CPAN

=head1 SEE IT IN ACTION

You can see it in action here: L<http://dev.axiombox.com/~david/mp3/>.

=head1 WORDPRESS AUDIO PLAYER

Find the WP Audio Player distribution on L<http://wpaudioplayer.com/>. It is a nice
little GPL audio player.

=head1 DOWNLOAD

Download it at CPAN: L<http://search.cpan.org/~damog>.

=head1 PROJECT

Code is hosted at L<http://github.com/damog/apache2-embedmp3>.

=head1 AUTHOR

David Moreno <david@axiombox.com>, L<http://damog.net/>.
Some other similar projects are announced on the Infinite Pig
Theorem blog: L<http://log.damog.net>.

=head1 SEE ALSO

L<Apache2::EmbedFLV>.

=head1 BUGS

Apparently, there's a bug if the filename of your MP3 contains spaces.
This will be tracked later.

=head1 THANKS

=over

=item * Raquel Hernandez, L<http://maggit.net>, who made the default template.

=back

=head1 COPYRIGHT

Copyright (C) 2009 by David Moreno.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

package Apache2::EmbedMP3;

our $VERSION = '0.1';

use Apache2::Request;
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::RequestUtil ();
use Apache2::Util ();
use Apache2::Const -compile => qw/OK :common DIR_MAGIC_TYPE/;
use Apache2::EmbedMP3::Template;
use Data::Dumper;
use Cwd;
use Music::Tag;
use Digest::MD5 qw/md5_hex/;

sub handler {
	my($r) = shift;

	if(! -e $r->filename) {
		return Apache2::Const::NOT_FOUND;
	} elsif(! -r $r->filename) {
		return Apache2::Const::FORBIDDEN;
	} else {
		my $req = Apache2::Request->new($r);

		if(
				# let's face it, this is why Perl sucks
				$req->param and
				scalar keys %{$req->param} == 1 and
				not $req->param( ${ [ keys %{$param} ] }[0] ) and
				length ${ [ keys %{$req->param} ] }[0] == 32
		) {
			my($md5) = keys %{$req->param}; # not too intuitive
			if($md5 eq md5_hex($r->filename)) {
				$r->content_type("audio/mpeg");
				$r->headers_out->set("Content-Length" => -s $r->filename);
				open my $fh, "<", $r->filename or die "Apache2::EmbedMP3 wrong $!!";
				while(<$fh>) {
					$r->print($_);
				}
				close $fh;
				return Apache2::Const::OK;
			} else {
				return Apache2::Const::FORBIDDEN;
			}
		} else {
			my $md5 = md5_hex($r->filename);
			$r->content_type("text/html; charset=utf-8");

			my $template = $r->dir_config('template');
			my $wpaudioplayer = $r->dir_config("wpaudioplayer");

			my $t = Apache2::EmbedMP3::Template->new($template);
			my $info = Music::Tag->new($r->filename);
			$info->add_plugin("Lyrics");
			$info->get_tag();

			$r->print(
				$t->process(
					uri => $r->uri,
					md5 => $md5,
					wpaudioplayer => $r->dir_config("wpaudioplayer"),
					js => $r->dir_config("wpaudioplayer_js"),
					template => $template,
					lyrics => $info->lyrics,
					title => $info->title,
					artist => $info->artist,
					year => $info->year,
					album => $info->album,
				)
			);



( run in 1.905 second using v1.01-cache-2.11-cpan-39bf76dae61 )