# 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$SUBTITLEgemini://$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_titlegemini://$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
}