App-Followme

 view release on metacpan or  search on metacpan

lib/App/Followme/ConvertPage.pm  view on Meta::CPAN


sub parameters {
    my ($pkg) = @_;

    return (
            template_file => 'convert_page.htm',
            data_pkg => 'App::Followme::TextData',
    );
}

#----------------------------------------------------------------------
# Convert files to html

sub run {
    my ($self, $folder) = @_;

    $self->update_folder($folder);
    return;
}

#----------------------------------------------------------------------
# Set the date format to iso date format, overriding user

sub setup {
    my ($self) = @_;

    $self->{data}{date_format} = 'yyyy-mm-ddThh:mm:ss';
    return;
}

#----------------------------------------------------------------------
# Construct a filename that represents the title

sub title_to_filename {
    my ($self, $filename) = @_;

    my ($dir, $base) = fio_split_filename($filename);
    return $filename if $base =~ /^index\./;

    my @parts = split(/\./, $base);
    my $ext = pop(@parts);

    my $new_filename = ${$self->{data}->build('title', $filename)};
    return $filename unless $new_filename;

    $new_filename = lc($new_filename);
    $new_filename =~ s/[^\w\-\_]+/ /g;

    $new_filename =~ s/^ +//;
    $new_filename =~ s/ +$//;
    $new_filename =~ s/ +/\-/g;

    $new_filename = catfile($dir, join('.', $new_filename, $ext));

    return $new_filename;
}

#----------------------------------------------------------------------
# Convert a single file

sub update_file {
    my ($self, $folder, $prototype, $file) = @_;

    my $new_file = $self->{data}->convert_filename($file);
    my $page = $self->render_file($self->{template_file}, $file);
    $page = $self->reformat_file($prototype, $new_file, $page);

    $self->write_file($new_file, $page);
    return;
}

#----------------------------------------------------------------------
# Find files in directory to convert and do that

sub update_folder {
    my ($self, $folder) = @_;

    my $index_file = $self->to_file($folder);
    my $source_folder = $self->{data}->convert_source_directory($folder);
    return unless $source_folder;

    my $same_directory = fio_same_file($folder, $source_folder, 
                                       $self->{case_sensitivity});
 
    $index_file = $self->to_file($source_folder);
    my $files = $self->{data}->build('files', $index_file);

    my $prototype;
    foreach my $file (@$files) {
        my $prototype ||= $self->find_prototype($folder, 0);
        eval {$self->update_file($folder, $prototype, $file)};
        if ($self->check_error($@, $file)) {
            unlink($file) if $same_directory;
        }
    }

    my $folders = $self->{data}->build('folders', $index_file);

    foreach my $subfolder (@$folders) {
        $self->update_folder($subfolder);
    }

    return;
}

#----------------------------------------------------------------------
# Write a file, setting folder level metadata

sub write_file {
    my ($self, $filename, $page, $binmode) = @_;

    my $time = ${$self->{data}->build('mdate', $filename)};
    my $new_filename = $self->title_to_filename($filename);

    fio_write_page($new_filename, $page, $binmode);

    unlink($filename) if -e $filename && 
        ! fio_same_file($filename, $new_filename, $self->{case_sensitivity});

    fio_set_date($new_filename, $time);

    return;
}

1;
__END__

=encoding utf-8

=head1 NAME

App::Followme::ConvertPage - Convert text files to html

=head1 SYNOPSIS



( run in 0.593 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )