novel-doomsday-resurgence/books/末日重生-开局囤货十亿物资/auto_sync_manager.sh

339 lines
9.5 KiB
Bash
Raw Normal View History

#!/bin/bash
# 《末日重生:开局囤货十亿物资》自动同步管理器
# 作者:番茄小说创作助手
# 版本1.0.0
set -e
# 配置参数
NOVEL_DIR="/root/.openclaw/workspace/tomato-novel/books/末日重生-开局囤货十亿物资"
SUMMARY_DIR="${NOVEL_DIR}/consolidated_summaries"
GITEA_REPO="gitea"
LOGFILE="${NOVEL_DIR}/sync_manager.log"
QC_THRESHOLD=10 # 每10章同步一次
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log() {
local level=$1
local message=$2
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo -e "${timestamp} [${level}] ${message}" | tee -a "${LOGFILE}"
if [[ "${level}" == "ERROR" ]]; then
echo -e "${RED}${message}${NC}"
elif [[ "${level}" == "WARN" ]]; then
echo -e "${YELLOW}${message}${NC}"
elif [[ "${level}" == "INFO" ]]; then
echo -e "${GREEN}${message}${NC}"
fi
}
# 检查章节数量
check_chapter_count() {
local total_chapters=$(ls -1 "${NOVEL_DIR}/chapters"/*.md | wc -l)
local last_chapter=$(ls -1 "${NOVEL_DIR}/chapters"/*.md | tail -1 | grep -o '[0-9][0-9][0-9][0-9]' | head -1)
echo "章节统计:"
echo " - 总章节数: ${total_chapters}"
echo " - 最新章节: 第${last_chapter}"
# 计算是否需要同步每10章
local sync_needed=$(( (${total_chapters} % ${QC_THRESHOLD}) == 0 ? 1 : 0 ))
if [[ ${sync_needed} -eq 1 ]]; then
log "INFO" "检测到章节数量为10的倍数需要同步摘要报告"
return 0
else
log "INFO" "章节数量正常,未达到同步阈值"
return 1
fi
}
# 监控修复章节完整性
monitor_fixed_chapters() {
local fixed_chapters="0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014"
local damaged_count=0
log "INFO" "开始监控修复章节完整性..."
for chap in ${fixed_chapters}; do
local chapter_file="${NOVEL_DIR}/chapters/${chap}_*.md"
if [ -f "${chapter_file}" ]; then
local file_size=$(stat -c%s "${chapter_file}" 2>/dev/null || stat -f%z "${chapter_file}")
if [[ ${file_size} -lt 1024 ]]; then # 小于1KB
log "WARN" "章节 ${chap} 文件过小: ${file_size} 字节"
damaged_count=$((damaged_count+1))
elif [[ ${file_size} -eq 0 ]]; then
log "ERROR" "章节 ${chap} 文件为空!"
damaged_count=$((damaged_count+1))
fi
else
log "ERROR" "章节 ${chap} 文件丢失!"
damaged_count=$((damaged_count+1))
fi
done
if [[ ${damaged_count} -eq 0 ]]; then
log "INFO" "所有修复章节完整性检查通过!"
return 0
else
log "ERROR" "发现 ${damaged_count} 个修复章节存在问题!"
return 1
fi
}
# 生成摘要报告
generate_summary_report() {
log "INFO" "开始生成完整摘要报告..."
# 检查章节数量
local total_chapters=$(ls -1 "${NOVEL_DIR}/chapters"/*.md | wc -l)
local last_chapter=$(ls -1 "${NOVEL_DIR}/chapters"/*.md | tail -1 | grep -o '[0-9][0-9][0-9][0-9]' | head -1)
# 创建最新的摘要报告
local summary_file="${SUMMARY_DIR}/complete_chapter_summaries.md"
cat > "${summary_file}" << EOF
# 《末日重生:开局囤货十亿物资》完整章节剧情摘要
## 整合时间:$(date '+%Y-%m-%d %H:%M:%S')
## 总章节数:${total_chapters}章
## 📊 故事概述
**末世重生题材**主角陈末重生回到末日降临前30天利用先知先觉疯狂囤积十亿物资建立顶级安全屋在冰河末世中生存并崛起。
## 📚 章节详细摘要(基于最新快照)
**当前章节数量**: ${total_chapters}
**最新章节**: 第${last_chapter}
**统计时间**: $(date '+%Y-%m-%d %H:%M:%S')
### 章节状态总结
- **总章节数**: ${total_chapters}
- **已修复章节**: 2-14章
- **后续章节**: ${last_chapter}
- **总行数**: 章节正在统计中
- **同步状态: 待同步**
---
*摘要报告由番茄小说创作助手自动生成*
*同步时间: $(date '+%Y-%m-%d %H:%M:%S')*
EOF
log "INFO" "摘要报告生成完成:${summary_file}"
}
# 执行同步到Gitea
sync_to_gitea() {
log "INFO" "开始同步到Gitea仓库..."
# 切换到小说目录
cd "${NOVEL_DIR}"
# 检查git状态
if ! git status &>/dev/null; then
log "ERROR" "Git仓库未初始化"
return 1
fi
# 检查远程仓库
if ! git remote | grep -q "${GITEA_REPO}"; then
log "ERROR" "Gitea远程仓库未配置"
return 1
fi
# 添加所有更改
git add . 2>/dev/null || true
# 检查是否有更改
if git diff --cached --quiet; then
log "INFO" "没有更改需要提交"
return 0
fi
# 提交更改
local commit_message="自动同步:章节完整性检查和摘要报告更新
- 章节总数: $(ls -1 "chapters"/*.md | wc -l)
- 修复章节检查完成
- 摘要报告更新完成
- 同步时间: $(date '+%Y-%m-%d %H:%M:%S')"
git commit -m "${commit_message}" || {
log "ERROR" "提交失败"
return 1
}
# 推送到远程仓库
log "INFO" "正在推送到 Gitea 仓库..."
if git push "${GITEA_REPO}" master; then
log "INFO" "同步到Gitea仓库成功"
return 0
else
log "ERROR" "推送到Gitea仓库失败"
return 1
fi
}
# 创建本地备份
create_local_backup() {
local backup_dir="${NOVEL_DIR}/backups/$(date '+%Y%m%d_%H%M%S')"
log "INFO" "创建本地备份到: ${backup_dir}"
mkdir -p "${backup_dir}"
# 备份章节文件
cp -r "${NOVEL_DIR}/chapters" "${backup_dir}/"
# 备份摘要报告
cp -r "${SUMMARY_DIR}" "${backup_dir}/"
# 备份状态文件
cp "${NOVEL_DIR}/story/"*.md "${backup_dir}/" 2>/dev/null || true
# 创建备份报告
cat > "${backup_dir}/backup_report.md" << EOF
# 本地备份报告
## 备份信息
- **备份时间**: $(date '+%Y-%m-%d %H:%M:%S')
- **备份目录**: $(basename ${backup_dir})
- **备份类型**: 本地完整备份
## 备份内容
### 章节文件
- 数量: $(ls -1 "chapters"/*.md 2>/dev/null | wc -l)
- 路径: ${NOVEL_DIR}/chapters/
### 摘要报告
- 文件: complete_chapter_summaries.md
- 路径: ${SUMMARY_DIR}/
### 状态文件
- 路径: ${NOVEL_DIR}/story/
## 小说状态
- 总章节数: $(ls -1 "chapters"/*.md 2>/dev/null | wc -l)
- 最新章节: 第$(ls -1 "chapters"/*.md 2>/dev/null | tail -1 | grep -o '[0-9][0-9][0-9][0-9]' | head -1)
- 数据量: 章节文件总计
## 恢复指南
如需恢复备份,请执行:
\`\`\`bash
# 停止正在运行的小说相关进程
# 复制备份文件
cp -r ${backup_dir}/chapters ${NOVEL_DIR}/
cp -r ${backup_dir}/consolidated_summaries ${NOVEL_DIR}/
cp ${backup_dir}/story/*.md ${NOVEL_DIR}/story/ 2>/dev/null || true
\`\`\`
---
*备份时间: $(date '+%Y-%m-%d %H:%M:%S')*
*番茄小说创作助手*
EOF
# 压缩备份
tar -czf "${backup_dir}.tar.gz" -C "${NOVEL_DIR}/backups" "$(basename ${backup_dir})"
log "INFO" "本地备份完成:${backup_dir}.tar.gz"
}
# 主执行函数
main() {
log "INFO" "《末日重生:开局囤货十亿物资》同步管理器启动"
log "INFO" "=============================================="
# 创建日志目录
mkdir -p "$(dirname "${LOGFILE}")"
# 步骤1监控章节完整性
if check_chapter_count; then
log "INFO" "检测到需要同步,继续执行..."
# 步骤2监控修复章节
if monitor_fixed_chapters; then
log "INFO" "修复章节检查通过,继续执行..."
else
log "ERROR" "修复章节存在问题,需要检查!"
exit 1
fi
# 步骤3生成摘要报告
generate_summary_report
# 步骤4同步到Gitea
if sync_to_gitea; then
log "INFO" "Gitea同步成功"
else
log "ERROR" "Gitea同步失败"
exit 1
fi
# 步骤5创建本地备份每周执行一次
if [[ $(date '+%u') -eq 7 ]]; then # 周日执行
log "INFO" "周日自动创建本地备份..."
create_local_backup
fi
log "INFO" "所有同步任务完成!"
log "INFO" "访问 Gitea 仓库: https://gitea.nevadalice.top:226/liyuchen/novel-doomsday-resurgence"
else
log "INFO" "当前不需要同步,跳过主要同步任务"
# 只监控修复章节完整性
monitor_fixed_chapters
log "INFO" "快速完整性检查完成"
fi
log "INFO" "同步管理器执行完毕"
log "INFO" "=============================================="
}
# 检查执行模式
if [[ "$1" == "--manual" ]]; then
# 手动模式
log "INFO" "手动模式启动"
shift
case "$1" in
"sync")
generate_summary_report
sync_to_gitea
;;
"backup")
create_local_backup
;;
"check")
check_chapter_count
monitor_fixed_chapters
;;
"all")
generate_summary_report
sync_to_gitea
create_local_backup
;;
*)
echo "用法: $0 --manual {sync|backup|check|all}"
exit 1
;;
esac
else
# 自动模式
main
fi
exit 0