The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
package App::Zapzi::Publishers::MOBI;
# ABSTRACT: publishes articles to a MOBI eBook file


use utf8;
use strict;
use warnings;

our $VERSION = '0.017'; # VERSION

use Carp;
use Moo;
use App::Zapzi;
use EBook::MOBI 0.69;           # required to drop GD dependency

with 'App::Zapzi::Roles::Publisher';


has mobi => (is => 'rwp');


sub name
{
    return 'MOBI';
}


sub start_publication
{
    my $self = shift;

    # Default encoding is ISO-8859-1 as early Kindles have issues with
    # UTF-8. Characters that cannot be encoded will be replaced with
    # their HTML entity equivalents.
    $self->_set_encoding('ISO-8859-1') unless $self->encoding;

    my $book = EBook::MOBI->new();
    $book->set_filename($self->filename);
    $book->set_title($self->collection_title);
    $book->set_author('Zapzi');
    $book->set_encoding(':encoding(' . $self->encoding . ')');
    $book->add_toc_once();
    $book->add_mhtml_content("<hr>\n");

    $self->_set_mobi($book);
}


sub add_article
{
    my $self = shift;
    my ($article, $index) = @_;

    $self->mobi->add_pagebreak() unless $index == 0;
    $self->mobi->add_mhtml_content($article->{encoded_title});
    $self->mobi->add_mhtml_content($article->{encoded_text});
}


sub finish_publication
{
    my $self = shift;

    $self->mobi->make();
    $self->_set_collection_data($self->mobi->print_mhtml('noprint'));

    $self->mobi->save();
    return $self->filename;
}

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

App::Zapzi::Publishers::MOBI - publishes articles to a MOBI eBook file

=head1 VERSION

version 0.017

=head1 DESCRIPTION

This class creates a MOBI file from a collection of articles.

=head1 ATTRIBUTES

=head2 mobi

Returns the EBook::MOBI object created.

=head1 METHODS

=head2 name

Name of publisher visible to user.

=head2 start_publication($folder, $encoding)

Starts a new publication for the given folder in the given encoding.

=head2 add_article($article, $index)

Adds an article, sequence number index,  to the publication.

=head2 finish_publication()

Finishes publication and returns the filename created.

=head1 AUTHOR

Rupert Lane <rupert@rupert-lane.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2015 by Rupert Lane.

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

=cut