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 )