#!/usr/bin/perl -w -I/opt/eprints3/perl_lib 

######################################################################
#
#
# Copyright 2000-2008 University of Southampton. All Rights Reserved.
# 
#  This file is part of GNU EPrints 3.
#  
#  Copyright (c) 2000-2008 University of Southampton, UK. SO17 1BJ.
#  
#  EPrints 3 is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#  
#  EPrints 3 is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#  
#  You should have received a copy of the GNU General Public License
#  along with EPrints 3; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
######################################################################

=pod

=head1 NAME

B<generate_video_previews> - Generate previews of videos

=head1 SYNOPSIS

B<generate_video_previews> I<repository_id> [B<options>] 

=head1 DESCRIPTION

=head1 ARGUMENTS

=over 8

=item B<repository_id> 

The ID of the eprint repository to use.

=back

=head1 OPTIONS

=over 8

=item B<--help>

Print a brief help message and exit.

=item B<--man>

Print the full manual page and then exit.

=item B<--quiet>

Be vewwy vewwy quiet. This option will supress all output unless an error occurs.

=item B<--verbose>

Explain in detail what is going on.
May be repeated for greater effect.

=item B<--version>

Output version information and exit.

=back   

=head1 AUTHOR

This is part of this EPrints 3 system. EPrints 3 is developed by Christopher Gutteridge.

=head1 VERSION

EPrints Version: eprints-3.2.0

=head1 CONTACT

For more information goto B<http://www.eprints.org/> which give information on mailing lists and the like.

Chris Gutteridge may be contacted at B<support@eprints.org>

Should you need a real world address for some reason, EPrints can be contacted in the real world at

 EPrints c/o Christopher Gutteridge
 Department of Electronics and Computer Science
 University of Southampton
 SO17 1BJ
 United Kingdom

=head1 COPYRIGHT

This file is part of GNU EPrints 3.

Copyright (c) 2000-2008 University of Southampton, UK. SO17 1BJ.

EPrints 3 is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

EPrints 3 is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with EPrints 3; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


=cut


use EPrints;

use File::Copy;
use strict;
use Getopt::Long;
use Pod::Usage;

my $version = 0;
my $verbose = 0;
my $quiet = 0;
my $help = 0;
my $man = 0;

Getopt::Long::Configure("permute");

GetOptions( 
	'help|?' => \$help,
	'man' => \$man,
	'version' => \$version,
	'verbose+' => \$verbose,
	'silent' => \$quiet,
	'quiet' => \$quiet,
) || pod2usage( 2 );
EPrints::Utils::cmd_version( "generate_video_previews" ) if $version;
pod2usage( 1 ) if $help;
pod2usage( -exitstatus => 0, -verbose => 2 ) if $man;
pod2usage( 2 ) if( scalar @ARGV != 1 ); 

my $noise = 1;
$noise = 0 if( $quiet );
$noise = 1+$verbose if( $verbose );

# Set STDOUT to auto flush (without needing a \n)
$|=1;


my $repoid = $ARGV[0];

my $session = new EPrints::Session( 1 , $repoid , $noise );
if( !defined $session )
{
	print STDERR "Failed to load repository: $repoid\n";
	exit 1;
}


my $dataset = $session->get_repository->get_dataset( "document" );

my $plugin = $session->plugin( "Convert::ThumbnailVideos" );
unless( $plugin )
{
	die "Convert::ThumbnailVideos not found\n";
}

$dataset->map($session, \&generate_preview, $plugin);

$session->terminate;

sub generate_preview
{
	my( $session, $dataset, $doc, $plugin ) = @_;

	if( !$doc->get_main )
	{
		return;
	}

	my %available = $plugin->can_convert( $doc );

	return unless $available{ "thumbnail_video" };

	my( $main_file ) = $doc->get_stored_files( "data", $doc->get_main );
	my( $video_preview ) = $doc->get_stored_files( "thumbnail", "video_preview.flv" );

	if( defined( $video_preview ) && $video_preview->get_datestamp gt $main_file->get_datestamp )
	{
		return;
	}

	my $tmpdir = EPrints::TempDir->new;

	if( $verbose )
	{
		print STDERR "Converting ".$main_file->get_value( "filename" )." in document ".$doc->get_id."\n";
	}

	my( $flv ) = $plugin->export( $tmpdir, $doc, "thumbnail_video" );
	unless( $flv )
	{
		$session->get_repository->log( "Error generating flash video from document ".$doc->get_id );
		return;
	}

	open(my $fh, "<", "$tmpdir/$flv" ) or die "Error opening $tmpdir/$flv: $!";

	$doc->add_stored_file( "thumbnail", $flv, $fh, -s "$tmpdir/$flv" );

	close($fh);

	$doc->get_parent->generate_static; # Regenerate the abstract page
}
