forked from HPR/hpr-tools
Various updates
Show_Submission/copy_shownotes: Changed the location of the function library Show_Submission/do_brave: Updates to the way local stand-alone HTML is generated for review purposes. Show_Submission/do_index: Changed the location of the function library Show_Submission/do_pandoc: Changed the location of the function library; now uses 'author_title.pl' to generate YAML for Pandoc Show_Submission/do_parse: Trivial change Show_Submission/do_pictures: Changed the location of the function library; better handling of the show specification Show_Submission/do_report: Changed the location of the function library Show_Submission/do_update_reservations: Changed the location of the function library Show_Submission/fix_relative_links: Added features 'say' and 'state' Show_Submission/parse_JSON: New checks: notes too short, trailing spaces on title, summary and tags (needing JSON changes). Check for Markdown in the assets (see 'do_pandoc_assets'). New 'trim' function.
This commit is contained in:
@@ -21,14 +21,17 @@
|
||||
# BUGS: ---
|
||||
# NOTES: ---
|
||||
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
|
||||
# VERSION: 0.0.14
|
||||
# VERSION: 0.0.17
|
||||
# CREATED: 2020-11-28 10:52:02
|
||||
# REVISION: 2024-03-09 20:34:54
|
||||
# REVISION: 2024-10-04 18:37:29
|
||||
#
|
||||
#===============================================================================
|
||||
|
||||
use 5.30.0;
|
||||
use v5.36;
|
||||
use utf8;
|
||||
use feature qw{ postderef say signatures state try };
|
||||
no warnings
|
||||
qw{ experimental::postderef experimental::signatures experimental::try };
|
||||
|
||||
use Getopt::Long;
|
||||
use Pod::Usage;
|
||||
@@ -57,7 +60,7 @@ use Data::Dumper;
|
||||
#
|
||||
# Version number (manually incremented)
|
||||
#
|
||||
our $VERSION = '0.0.14';
|
||||
our $VERSION = '0.0.17';
|
||||
|
||||
#
|
||||
# Script and directory names
|
||||
@@ -79,7 +82,12 @@ my $logfile = "$logdir/${PROG}.log";
|
||||
my ( $snlevel, $showno, $summarylength, $notelength );
|
||||
|
||||
our $MARKUP_DETECTED = 0;
|
||||
|
||||
#
|
||||
# Maximum and minimum number of characters (bytes)
|
||||
#
|
||||
my $MAXNOTELEN = 4000;
|
||||
my $MINNOTELEN = 10;
|
||||
|
||||
#
|
||||
# Printing: general output format
|
||||
@@ -223,13 +231,14 @@ my @markup_types = (
|
||||
my @markup_found;
|
||||
my $markup_choice;
|
||||
|
||||
my ( $showdir, $assetdir , $statusfile );
|
||||
my ( $showdir, $assetdir, $statusfile );
|
||||
my ( %media_files, $media_files );
|
||||
my ( %assets, @assets, @audio, $sanitised );
|
||||
my ( $has_audio, $has_extra, $has_archives );
|
||||
my ( @archives, @extracted );
|
||||
my ( $astate, $has_pictures, @pictures, $pictures );
|
||||
my ( %spellchecks );
|
||||
my ( $has_markup, @markup, $markup );
|
||||
my ( $json_change, @json_changes, %spellchecks );
|
||||
my @pstates = (
|
||||
'No pictures found', # 0
|
||||
'Pictures that need management', # 1
|
||||
@@ -347,8 +356,13 @@ open( my $fh, '<:encoding(UTF-8)', $infile );
|
||||
my $json_text = <$fh>;
|
||||
close($fh);
|
||||
|
||||
# TODO: bad JSON can crash the script here!
|
||||
my $content = decode_json($json_text);
|
||||
my $content;
|
||||
try {
|
||||
$content = decode_json($json_text);
|
||||
}
|
||||
catch ($e) {
|
||||
die colored( "Failed to decode the JSON in $infile", 'red' ) . "\n"
|
||||
}
|
||||
|
||||
$log->info( $showno, "[$VERSION] Processing $infile" );
|
||||
|
||||
@@ -372,6 +386,19 @@ print STDERR '-' x 80, "\n";
|
||||
printf STDERR $ofmt, "Show:", $content->{metadata}{Episode_Number};
|
||||
printf STDERR $ofmt, "Date:", $content->{metadata}{Episode_Date};
|
||||
|
||||
#
|
||||
# Trim off leading and trailing spaces in these fields
|
||||
#
|
||||
$json_change = 0;
|
||||
for my $key ( 'Title', 'Summary', 'Tags' ) {
|
||||
my $str = trim($content->{episode}{$key});
|
||||
if ($str ne $content->{episode}{$key}) {
|
||||
$content->{episode}{$key} = $str;
|
||||
$json_change = 1;
|
||||
push(@json_changes,$key);
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Detect Unicode in the Title, Summary or Tags and flag their presence.
|
||||
#
|
||||
@@ -386,6 +413,9 @@ for my $key ( 'Title', 'Summary', 'Tags' ) {
|
||||
);
|
||||
}
|
||||
|
||||
alert( $ofmt, "JSON to be updated; changes to: " .
|
||||
join(',',@json_changes) ) if $json_change;
|
||||
|
||||
#
|
||||
# Check summary length. The field might be filled and something might have
|
||||
# been lost.
|
||||
@@ -429,7 +459,12 @@ printf STDERR $ofmt, "Notes:", $snlevel . " HTML start/end tags found";
|
||||
$notelength = length( $content->{episode}{Show_Notes} );
|
||||
if ( $notelength > $MAXNOTELEN ) {
|
||||
printf STDERR $ofmt, "Notes:",
|
||||
colored( "Notes are longer than $MAXNOTELEN ($notelength)",
|
||||
colored( "Notes are longer than $MAXNOTELEN bytes ($notelength)",
|
||||
'bold yellow on_magenta' );
|
||||
}
|
||||
elsif ( $notelength <= $MINNOTELEN ) {
|
||||
printf STDERR $ofmt, "Notes:",
|
||||
colored( "Notes are shorter than $MINNOTELEN bytes ($notelength)",
|
||||
'bold yellow on_magenta' );
|
||||
}
|
||||
|
||||
@@ -651,6 +686,17 @@ if (%media_files) {
|
||||
_debug( $DEBUG > 2, '@assets: ' . Dumper( \@assets ) );
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Look for un-processed markup in the assets hash. For the moment we
|
||||
# only look for Markdown.
|
||||
#-------------------------------------------------------------------------------
|
||||
$has_markup = @markup
|
||||
= grep { $assets{$_}->{type} =~ m{^text/markdown$} } keys(%assets);
|
||||
$markup = join( ', ', @markup );
|
||||
if (@markup) {
|
||||
_debug( $DEBUG > 2, '@markup ' . Dumper( \@markup ) );
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Look for archive files in the assets
|
||||
#-------------------------------------------------------------------------------
|
||||
@@ -690,6 +736,11 @@ if (%media_files) {
|
||||
@assets = array_difference(\@assets,\@archives);
|
||||
push(@assets, @extracted);
|
||||
|
||||
#
|
||||
# Remove markup files from the assets so we don't upload them
|
||||
#
|
||||
@assets = array_difference(\@assets,\@markup);
|
||||
|
||||
#
|
||||
# Remove directory stuff from @assets elements and %assets keys
|
||||
#
|
||||
@@ -745,6 +796,8 @@ if (%media_files) {
|
||||
$log->info( $showno, "Media files: $media_files" ) if ($media_files);
|
||||
$log->info( $showno, "Pictures: " . join( ', ', @pictures ) )
|
||||
if (@pictures);
|
||||
$log->info( $showno, "Markup " . join( ', ', @markup ) )
|
||||
if (@markup);
|
||||
$log->info( $showno, "Assets: " . join( ', ', @assets ) )
|
||||
if (@assets);
|
||||
|
||||
@@ -849,7 +902,6 @@ if ( $snlevel > 0 && $content->{metadata}{Shownotes_Format} =~ /html5/i ) {
|
||||
"Apparently incorrect URLs detected in the notes", 'red'
|
||||
), "\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#
|
||||
@@ -866,6 +918,15 @@ if ( $markup_choice eq 'html5'
|
||||
"Declared format 'plain_text' but notes seem to be HTML5!" );
|
||||
}
|
||||
|
||||
#
|
||||
# 7. The host has sent in markup version(s) of their external notes, so we
|
||||
# need to take special action.
|
||||
#
|
||||
if ($markup) {
|
||||
printf STDERR "%s\n",
|
||||
textFormat( $markup, 'Markup files:', 'L', 18, 80 );
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Determine the picture asset state
|
||||
#-------------------------------------------------------------------------------
|
||||
@@ -1709,6 +1770,23 @@ sub find_Unicode {
|
||||
return ( $string =~ /[^\x{00}-\x{7F}]/ );
|
||||
}
|
||||
|
||||
#=== FUNCTION ================================================================
|
||||
# NAME: trim
|
||||
# PURPOSE: Trims leading and trailing spaces from a string
|
||||
# PARAMETERS: string string to trim
|
||||
# RETURNS: Trimmed string
|
||||
# DESCRIPTION:
|
||||
# THROWS: No exceptions
|
||||
# COMMENTS: None
|
||||
# SEE ALSO: N/A
|
||||
#===============================================================================
|
||||
sub trim {
|
||||
my ($str) = @_;
|
||||
|
||||
$str =~ s/^\s+|\s+$//g;
|
||||
return $str;
|
||||
}
|
||||
|
||||
#=== FUNCTION ================================================================
|
||||
# NAME: output_file_name
|
||||
# PURPOSE: Generate an output file name with three choices
|
||||
@@ -1969,7 +2047,6 @@ sub alert {
|
||||
my ( $fmt, $message ) = @_;
|
||||
|
||||
$fmt = "%-16s %s\n" unless $fmt;
|
||||
# print STDERR "$bold$red", sprintf( $fmt, "** ALERT **:", $message ), "$reset";
|
||||
print STDERR colored( sprintf( $fmt, "** ALERT **:", $message ),
|
||||
'bold red' );
|
||||
}
|
||||
@@ -2082,7 +2159,7 @@ parse_JSON - parse the JSON output file from the HPR show submission form
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
This documentation refers to parse_JSON version 0.0.14
|
||||
This documentation refers to parse_JSON version 0.0.17
|
||||
|
||||
|
||||
=head1 USAGE
|
||||
|
Reference in New Issue
Block a user