# Retrieve meta data of a given blog post. Generate new meta info if not yet exists. atomfeed::meta () { local -r gmi_file_path="$1"; shift local -r meta_file=$($SED 's|gemtext|meta|; s|.gmi$|.meta|;' <<< "$gmi_file_path") log VERBOSE "Generating meta info for post $gmi_file_path" local is_draft=no if $GREP -E -q '\.draft\.meta$' <<< "$meta_file"; then is_draft=yes fi local -r meta_dir=$(dirname "$meta_file") test ! -d "$meta_dir" && mkdir -p "$meta_dir" if [ ! -f "$meta_file" ]; then # Extract first heading as post title. local title=$($SED -n '/^# / { s/# //; p; q; }' "$gmi_file_path" | tr '"' "'") # Extract first paragraph from Gemtext local summary=$($SED -n '/^[A-Z]/ { p; q; }' "$gmi_file_path" | tr '"' "'") # Extract the date from the file name. local filename_date=$(basename "$gmi_file_path" | cut -d- -f1,2,3) local date=$($DATE --iso-8601=seconds --date "$filename_date $($DATE +%H:%M:%S)") cat < "$atom_file.tmp" $now $DOMAIN feed $SUBTITLE gemini://$DOMAIN/ ATOMHEADER while read -r gmi_file; do # Load cached meta information about the post. source <(atomfeed::meta "$gemfeed_dir/$gmi_file") # Get HTML content for the feed local content="$(atomfeed::content "$gemfeed_dir/$gmi_file")" assert::not_empty meta_title "$meta_title" assert::not_empty meta_date "$meta_date" assert::not_empty meta_author "$meta_author" assert::not_empty meta_email "$meta_email" assert::not_empty meta_summary "$meta_summary" assert::not_empty content "$content" cat <> "$atom_file.tmp" $meta_title gemini://$DOMAIN/gemfeed/$gmi_file $meta_date $meta_author $meta_email $meta_summary
$content
ATOMENTRY done < <(gemfeed::get_posts | head -n $ATOM_MAX_ENTRIES) cat <> "$atom_file.tmp"
ATOMFOOTER # Delete the 3rd line of the atom feeds (global feed update timestamp) if ! diff -u <($SED 3d "$atom_file") <($SED 3d "$atom_file.tmp"); then log INFO 'Feed got something new!' mv "$atom_file.tmp" "$atom_file" test "$ADD_GIT" == yes && git add "$atom_file" else log INFO 'Nothing really new in the feed' rm "$atom_file.tmp" fi }