App-termpub
view release on metacpan or search on metacpan
lib/App/termpub/Epub.pm view on Meta::CPAN
href => $href,
$title ? ( title => $title ) : (),
);
}
return \@chapters;
};
has root_file => sub {
my $self = shift;
my $filename = $self->filename;
my $container = $self->archive->contents('META-INF/container.xml');
my $container_dom = Mojo::DOM->new($container);
my $root_file = $container_dom->at('rootfiles rootfile')->attr("full-path");
if ( !$root_file ) {
die "No root file defined for $filename\n";
}
return Mojo::File->new($root_file);
};
has root_dom => sub {
my $self = shift;
my $root = Mojo::Util::decode 'UTF-8',
$self->archive->contents( $self->root_file->to_string );
if ( !$root ) {
die "Missing root file "
. $self->root_file . " for "
. $self->filename . "\n";
}
return Mojo::DOM->new($root);
};
has language => sub {
my $self = shift;
return html_unescape(
eval { $self->root_dom->at('metadata')->at('dc\:language')->content } );
};
has creator => sub {
my $self = shift;
return html_unescape(
eval { $self->root_dom->at('metadata')->at('dc\:creator')->content }
|| 'Unknown' );
};
has title => sub {
my $self = shift;
return html_unescape(
eval { $self->root_dom->at('metadata')->at('dc\:title')->content }
|| 'Unknown' );
};
sub read_metadata {
my $self = shift;
my $content =
$self->archive->contents('META-INF/com.domgoergen.termpub.json')
|| '{}';
my $data = decode_json($content);
if ( $data->{version} == 1 ) {
$data->{position} = {
chapter => $data->{position}->[0],
percent => $data->{position}->[1]
};
}
return $data;
}
sub save_metadata {
my ( $self, $data ) = @_;
my ($tempfile) = tempfile;
$self->archive->removeMember('META-INF/com.domgoergen.termpub.json');
$self->archive->addString( encode_json($data),,
'META-INF/com.domgoergen.termpub.json' );
if ( $self->archive->writeToFileNamed( $tempfile->to_string ) != AZ_OK ) {
die 'write error';
}
$tempfile->move_to( $self->filename );
}
1;
( run in 1.273 second using v1.01-cache-2.11-cpan-98e64b0badf )