feat: Implement full blog index content caching
- Store complete blog index HTML in .blogindex.cache - Add _load_blog_cache function to retrieve cached content - Improve cache invalidation logic - Add detailed debug logging - Bump version to 0.5.1
This commit is contained in:
102
qsgen2
102
qsgen2
@ -16,7 +16,7 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
VERSION="0.5.0" # Sun-2025-05-18
|
VERSION="0.5.1" # Sun-2025-05-18
|
||||||
QSGEN="Quick Site Generator 2"
|
QSGEN="Quick Site Generator 2"
|
||||||
|
|
||||||
# Set to true or false
|
# Set to true or false
|
||||||
@ -312,15 +312,32 @@ function _list_blogs() {
|
|||||||
blog_cache_file="${config[project_root]}/.blogindex.cache"
|
blog_cache_file="${config[project_root]}/.blogindex.cache"
|
||||||
|
|
||||||
function _update_blog_cache() {
|
function _update_blog_cache() {
|
||||||
# This function updates the blog cache with the current timestamp
|
# This function updates the blog cache with the current blog index content
|
||||||
if [[ ${globaldebug} == "true" ]]; then
|
if [[ ${globaldebug} == "true" ]]; then
|
||||||
local debug=true
|
local debug=true
|
||||||
else
|
else
|
||||||
local debug=false
|
local debug=false
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if (${debug}) _msg debug "${0:t}_msg_1" " ${blog_cache_file}"
|
if (${debug}) _msg debug "Updating blog cache at ${blog_cache_file}"
|
||||||
date +%s > "${blog_cache_file}"
|
|
||||||
|
# Get the current blog index content
|
||||||
|
local blog_index_content="$(<${config[project_root]}/blog/index.tmp.html)"
|
||||||
|
|
||||||
|
# Store the content in the cache file
|
||||||
|
echo "${blog_index_content}" > "${blog_cache_file}"
|
||||||
|
|
||||||
|
if (${debug}) _msg debug "Blog cache updated with ${#blog_index_content} bytes"
|
||||||
|
}
|
||||||
|
|
||||||
|
function _load_blog_cache() {
|
||||||
|
# Loads the blog index from cache if it exists
|
||||||
|
if [[ -f "${blog_cache_file}" ]]; then
|
||||||
|
if (${debug}) _msg debug "Loading blog index from cache"
|
||||||
|
cat "${blog_cache_file}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
function _is_blog_cache_stale() {
|
function _is_blog_cache_stale() {
|
||||||
@ -331,19 +348,28 @@ function _is_blog_cache_stale() {
|
|||||||
local debug=false
|
local debug=false
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# If we have new or updated blogs, cache is considered stale
|
||||||
|
if [[ ${new_updated_blogs} == "true" ]]; then
|
||||||
|
if (${debug}) _msg debug "Blog cache stale: New or updated blogs detected"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# If cache file doesn't exist, it's stale
|
||||||
if [[ ! -f "${blog_cache_file}" ]]; then
|
if [[ ! -f "${blog_cache_file}" ]]; then
|
||||||
if (${debug}) _msg debug "${0:t}_msg_2" " ${blog_cache_file}"
|
if (${debug}) _msg debug "Blog cache stale: Cache file does not exist"
|
||||||
return 0
|
return 0
|
||||||
fi
|
}
|
||||||
|
|
||||||
local cache_time=$(<"${blog_cache_file}")
|
# Check if cache is older than 1 hour (3600 seconds)
|
||||||
|
local cache_mtime=$(stat -c %Y "${blog_cache_file}" 2>/dev/null || echo 0)
|
||||||
local current_time=$(date +%s)
|
local current_time=$(date +%s)
|
||||||
# Consider cache stale if it's older than 1 hour (3600 seconds)
|
|
||||||
if (( current_time - cache_time > 3600 )); then
|
if (( current_time - cache_mtime > 3600 )); then
|
||||||
if (${debug}) _msg debug "${0:t}_msg_3" " ${blog_cache_file}"
|
if (${debug}) _msg debug "Blog cache stale: Cache is older than 1 hour"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if (${debug}) _msg debug "Blog cache is fresh"
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -958,45 +984,63 @@ function _blog_idx_for_index() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function _blog_index() {
|
function _blog_index() {
|
||||||
|
|
||||||
if [[ ${globaldebug} == "true" ]]; then
|
if [[ ${globaldebug} == "true" ]]; then
|
||||||
local debug=true
|
local debug=true
|
||||||
else
|
else
|
||||||
local debug=false
|
local debug=false
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Always update if we have new/updated blogs or cache is stale
|
# Check if we need to update the blog index
|
||||||
if [[ ${new_updated_blogs} == "true" ]] || _is_blog_cache_stale; then
|
if [[ ${new_updated_blogs} == "true" ]] || _is_blog_cache_stale; then
|
||||||
if (${debug}) _msg debug "${0:t}_msg_1" "${config[site_blog]}"
|
if (${debug}) _msg debug "Generating new blog index"
|
||||||
if (${debug}) _msg debug "${0:t}_msg_2" "${new_updated_blogs}"
|
|
||||||
|
|
||||||
_msg std "${0:t}_msg_5" " ${config[site_root]}/blog/index.html"
|
|
||||||
|
|
||||||
local blog_index_tpl=$(<${config[project_root]}/themes/${config[site_theme]}/blog_index.tpl)
|
|
||||||
local blog_index_list=$(<${config[project_root]}/blog/index.tmp.html)
|
|
||||||
|
|
||||||
if (${debug}) _msg debug "${0:t}_msg_6"
|
# Get the template
|
||||||
local blog_index_content=$(echo "${blog_index_tpl}" | perl -pe "s|#sitename|${config[site_name]}|gs; s|#tagline|${config[site_tagline]}|gs")
|
local blog_index_tpl=$(<${config[project_root]}/themes/${config[site_theme]}/blog_index.tpl)
|
||||||
if (${debug}) _msg debug "${0:t}_msg_7" " ${config[project_root]}/blog/index.tmp.html"
|
|
||||||
blog_index_content=$( awk -v new_body="$blog_index_list" '{sub(/BODY/, new_body)} 1' <(echo "${blog_index_content}") )
|
# Get the blog list content
|
||||||
|
local blog_index_list
|
||||||
if (${debug}); then
|
if [[ ${new_updated_blogs} == "true" ]]; then
|
||||||
_msg debug "${0:t}_msg_8" " ${config[site_root]}/blog/index.html"
|
# If we have new/updated blogs, use the fresh content
|
||||||
_msg debug "${0:t}_msg_9" " ${#blog_index_content}"
|
blog_index_list=$(<${config[project_root]}/blog/index.tmp.html)
|
||||||
|
else
|
||||||
|
# Otherwise try to load from cache
|
||||||
|
blog_index_list=$(_load_blog_cache) || {
|
||||||
|
# If cache load fails, use the fresh content
|
||||||
|
blog_index_list=$(<${config[project_root]}/blog/index.tmp.html)
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create blog directory if it doesn't exist
|
# Generate the final content
|
||||||
|
local blog_index_content=$(echo "${blog_index_tpl}" | \
|
||||||
|
perl -pe "s|#sitename|${config[site_name]}|gs; s|#tagline|${config[site_tagline]}|gs")
|
||||||
|
blog_index_content=$(awk -v new_body="$blog_index_list" '{sub(/BODY/, new_body)} 1' <(echo "${blog_index_content}"))
|
||||||
|
|
||||||
|
# Create output directory if it doesn't exist
|
||||||
mkdir -p "${config[site_root]}/blog"
|
mkdir -p "${config[site_root]}/blog"
|
||||||
|
|
||||||
|
# Write the index file
|
||||||
echo "$blog_index_content" > "${config[site_root]}/blog/index.html"
|
echo "$blog_index_content" > "${config[site_root]}/blog/index.html"
|
||||||
_f_last_updated "${config[site_root]}/blog/index.html"
|
_f_last_updated "${config[site_root]}/blog/index.html"
|
||||||
|
|
||||||
# Update the cache
|
# Update the cache with the new content
|
||||||
_update_blog_cache
|
_update_blog_cache
|
||||||
|
|
||||||
|
if (${debug}); then
|
||||||
|
_msg debug "Generated new blog index at ${config[site_root]}/blog/index.html"
|
||||||
|
_msg debug "Blog index size: ${#blog_index_content} bytes"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Use cached content
|
||||||
|
if (${debug}) _msg debug "Using cached blog index"
|
||||||
|
local cached_content=$(_load_blog_cache)
|
||||||
|
mkdir -p "${config[site_root]}/blog"
|
||||||
|
echo "$cached_content" > "${config[site_root]}/blog/index.html"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function _add_blog_list_to_index() {
|
function _add_blog_list_to_index() {
|
||||||
|
|
||||||
|
{{ ... }}
|
||||||
if [[ ${globaldebug} == "true" ]]; then
|
if [[ ${globaldebug} == "true" ]]; then
|
||||||
local debug=true
|
local debug=true
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user