Files
MediaOrganizer/build.sh
T
Shuery d978a13a83 refactor: 拆分 media_organizer.sh 为多模块源码并新增构建脚本
- src/ 下 18 个模块按职责拆分(常量/日志/配置/缓存/TMDB/识别/AI/链接等)
- 新增 build.sh:按依赖顺序拼接模块生成单文件分发脚本
  - 含 bash -n 语法检查与重复函数检查
  - --check 模式可校验产物与源码同步(可接 CI)
- media_organizer.sh 改为构建产物(除 6 行生成说明外与原文件逐字节一致)
- README 新增「构建与开发(源码结构)」章节
- .gitignore 忽略运行时缓存 mo_cache/ 与参考仓库 3rd-party/
2026-08-14 09:25:08 +08:00

107 lines
3.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# ============================================================================
# 构建脚本:将 src/ 下的模块拼接为单个自包含分发脚本 media_organizer.sh
#
# 用法:
# ./build.sh 构建 media_organizer.sh(覆盖根目录文件)
# ./build.sh --check 仅校验根目录 media_organizer.sh 是否与最新源码一致
#
# 模块清单(顺序 = 依赖顺序,不可随意调整):
# src/main.sh 文件头注释 + 常量 + 全局变量
# src/lib/log.sh 日志与色彩(最先加载,保证全脚本日志输出一致)
# src/lib/config.sh 配置加载与认证
# src/lib/maps.sh 特典映射与季偏移
# src/lib/strings.sh 字符串工具
# src/lib/cache.sh 缓存管理(cache_* 系列)
# src/lib/tmdb.sh TMDB API(tmdb_api 统一缓存封装)
# src/lib/filename.sh 媒体文件名解析
# src/lib/registry.sh 识别登记与并发池(register_* / emit / pool_run)
# src/lib/identify.sh 媒体识别(电影/电视剧)
# src/lib/ai.sh AI 批处理(请求构造/调用/特典学习)
# src/lib/link.sh 硬链接基础工具(inode 判断/链接/错误处理)
# src/lib/args.sh 帮助与参数解析
# src/lib/process.sh 目录校验/扫描/识别流水线
# src/lib/ai_resolve.sh AI 结果消费(重搜/匹配/回退命名)
# src/lib/link_media.sh 创建硬链接及伴随文件
# src/lib/report.sh 对照表导出与运行汇总
# src/lib/entry.sh main() 唯一入口(文件末尾调用)
# ============================================================================
set -euo pipefail
cd "$(dirname "$0")"
OUT="media_organizer.sh"
MODULES=(
src/main.sh
src/lib/log.sh
src/lib/config.sh
src/lib/maps.sh
src/lib/strings.sh
src/lib/cache.sh
src/lib/tmdb.sh
src/lib/filename.sh
src/lib/registry.sh
src/lib/identify.sh
src/lib/ai.sh
src/lib/link.sh
src/lib/args.sh
src/lib/process.sh
src/lib/ai_resolve.sh
src/lib/link_media.sh
src/lib/report.sh
src/lib/entry.sh
)
# 预检:所有模块存在
for m in "${MODULES[@]}"; do
if [[ ! -f "$m" ]]; then
echo "错误:缺失模块 $m(请先拆分源码或检查模块清单)" >&2
exit 1
fi
done
tmp="$(mktemp)"
trap 'rm -f "$tmp"' EXIT
# 生成:shebang + 生成说明 + 按序拼接全部模块
{
printf '#!/bin/bash\n'
printf '%s\n' \
'################################################################################' \
'# 本文件由 build.sh 从 src/ 自动生成,请勿直接编辑。' \
'# 修改源码请编辑 src/ 下的模块文件(模块清单见 build.sh),然后运行 ./build.sh。' \
'################################################################################'
printf '\n'
for m in "${MODULES[@]}"; do
cat "$m"
done
} >"$tmp"
# 语法检查
if ! bash -n "$tmp"; then
echo "错误:构建产物语法检查未通过" >&2
exit 1
fi
# 重复函数定义检查(防止模块合并后命名冲突)
dups="$(grep -oE '^[A-Za-z_][A-Za-z0-9_]*\(\) \{' "$tmp" | sort | uniq -d || true)"
if [[ -n "$dups" ]]; then
echo "错误:存在重复函数定义:$dups" >&2
exit 1
fi
if [[ "${1:-}" == "--check" ]]; then
if cmp -s "$tmp" "$OUT"; then
echo "OK:$OUT 与最新源码一致"
else
echo "DIFF:$OUT 已过期,请运行 ./build.sh 重新生成" >&2
diff "$OUT" "$tmp" | head -50 >&2 || true
exit 1
fi
else
chmod +x "$tmp"
mv "$tmp" "$OUT"
trap - EXIT
echo "构建完成:$OUT($(wc -l <"$OUT") 行,$(wc -c <"$OUT") 字节)"
fi