diff --git a/release_fixed.sh b/release_fixed.sh old mode 100644 new mode 100755 index e69de29..5c99a93 --- a/release_fixed.sh +++ b/release_fixed.sh @@ -0,0 +1,212 @@ +#!/bin/bash +# release_fixed.sh +# ---------------- +# 用途:创建 Gitea Release v1.2 +# 功能:自动提交代码、推送、创建标签和Release + +set -e # 遇到错误立即退出 + +VERSION="1.2" +RELEASE_NAME="v1.2 CFI排序与优化版本" +GITEA_URL="https://biboer.cn/gitea" +REPO_OWNER="gavin" +REPO_NAME="iBook" + +echo "🚀 开始创建 iBooks 笔记专家 v${VERSION} Release" +echo "================================================" + +# 1. 检查工作目录状态 +echo "📋 1. 检查工作目录状态..." +if [ -n "$(git status --porcelain)" ]; then + echo " 发现未提交的更改,准备提交..." + git add . + git status --short +else + echo " ✅ 工作目录干净" +fi + +# 2. 提交所有更改 +echo "" +echo "💾 2. 提交v${VERSION}更改..." +COMMIT_MSG="🎉 Release v${VERSION}: CFI排序系统与界面优化 + +🎯 主要更新: +- ✅ EPUB CFI 排序: 完整实现 IDPF 规范,笔记按真实位置排序 +- ✅ 阅读统计修复: 修复数据结构变更导致的计算错误 +- ✅ 界面优化: 清理 CSS 警告,改进按钮交互效果 +- ✅ 测试覆盖: CFI 解析、排序、导出全面验证 +- ✅ 文档更新: todolist.md, readme.md, release.md + +📊 验证数据: +- 书籍处理: 660+ 本 +- 笔记排序: 232 条按 CFI 正确排序 +- 阅读统计: 7天70分钟,30天159分钟,年度12313分钟 + +🔧 技术改进: +- 新增 epub_cfi_parser.py 核心模块 +- 数据结构优化: 嵌套字典 → CFI排序列表 +- 向后兼容: 平滑升级,不破坏现有功能" + +if [ -n "$(git status --porcelain)" ]; then + git commit -m "$COMMIT_MSG" + echo " ✅ 代码已提交" +else + echo " ℹ️ 无新更改需要提交" +fi + +# 3. 推送到远程仓库 +echo "" +echo "🌐 3. 推送到远程仓库..." +git push origin main +echo " ✅ 代码已推送" + +# 4. 创建并推送标签 +echo "" +echo "🏷️ 4. 创建版本标签..." +TAG_NAME="v${VERSION}" +if git tag -l | grep -q "^${TAG_NAME}$"; then + echo " ⚠️ 标签 ${TAG_NAME} 已存在,删除旧标签..." + git tag -d "${TAG_NAME}" || true + git push origin ":refs/tags/${TAG_NAME}" || true +fi + +git tag -a "${TAG_NAME}" -m "${RELEASE_NAME} + +🎯 重大更新 - EPUB CFI 排序系统 +=============================== + +v1.2 是一个重大功能更新版本,实现了完整的 EPUB CFI 排序系统, +确保笔记按真实阅读位置排序,同时修复了多个界面和统计问题。 + +主要特性: +- EPUB CFI 排序: 符合 IDPF 标准的位置排序 +- 阅读统计修复: 准确的时长统计和可视化 +- 界面优化: 清洁的用户体验 +- 全面测试: 真实数据验证 + +技术栈: +- Python 3.12+ +- PyQt6 GUI +- SQLite 数据库 +- EPUB CFI 解析 +- Matplotlib 可视化 + +升级说明: +从 v1.1 升级到 v1.2 完全向后兼容,无需额外配置。" + +git push origin "${TAG_NAME}" +echo " ✅ 标签 ${TAG_NAME} 已创建并推送" + +# 5. 生成 Release Notes +echo "" +echo "📝 5. 生成 Release Notes..." +RELEASE_NOTES="## 🎉 iBooks 笔记专家 v${VERSION} 发布 + +**发布时间**: $(date '+%Y-%m-%d') +**版本代号**: CFI 排序与优化版本 + +### 🎯 重大更新 + +#### 1. EPUB CFI 排序系统 +- **完整实现 IDPF EPUB CFI 规范**: 按真实文档位置排序笔记,解决之前字符串排序的错误 +- **智能章节识别**: 自动提取章节信息,支持复杂的 CFI 格式 +- **降级处理机制**: CFI 解析失败时自动使用物理位置和创建时间排序 +- **测试覆盖**: 全面的 CFI 解析、排序、导出验证测试 + +#### 2. 阅读统计修复 +- **数据结构适配**: 修复 CFI 实现后的数据兼容性问题 +- **统计准确性**: 7天/30天/年度阅读时长计算恢复正常 +- **图表显示**: 阅读统计图表数据源修复 + +#### 3. 界面与体验优化 +- **样式修复**: 清理 4 个 \"Unknown property filter\" CSS 警告 +- **按钮交互**: 使用原生 Qt 渐变替代不支持的 CSS3 属性 +- **调试信息**: 禁用冗余的控制台输出,保持界面清洁 + +#### 4. 技术架构 +- **新增模块**: \`epub_cfi_parser.py\` - 专门的 CFI 解析引擎 +- **向后兼容**: 保持所有现有功能的完整性 +- **性能优化**: 优化数据处理流程,减少不必要的计算 + +### 📊 验证数据 + +- **书籍处理**: 660+ 本书籍元数据正常 +- **笔记排序**: 232 条笔记按 CFI 位置正确排序 +- **阅读统计**: 7天70分钟,30天159分钟,年度12313分钟 +- **功能验证**: 所有核心功能测试通过 + +### 🔧 技术细节 + +\`\`\`python +# CFI 排序示例 +原始顺序: [\"/6/22\", \"/6/18\", \"/6/22\", \"/6/18\"] +CFI 排序: [\"/6/18\", \"/6/18\", \"/6/22\", \"/6/22\"] ✅ +字符串排序: [\"/6/18\", \"/6/2\", \"/6/22\"] ❌ 错误 +\`\`\` + +### 🚀 升级指南 + +v1.1 → v1.2 升级自动兼容,无需额外配置: +1. 笔记排序自动切换到 CFI 模式 +2. 阅读统计自动修复数据获取 +3. 界面样式自动更新 + +### 🔗 相关链接 + +- [详细技术文档](readme.md) +- [CFI 实现总结](CFI_IMPLEMENTATION_SUMMARY.md) +- [修复总结](FIX_SUMMARY.md) +- [版本变更](release.md) + +--- + +**下载**: 克隆此仓库或下载源码包 +**运行**: \`python ibook_export_app.py\` +**要求**: Python 3.12+, PyQt6, beautifulsoup4" + +echo "$RELEASE_NOTES" > release_notes_v${VERSION}.md + +# 6. 创建 Gitea Release (如果有API访问) +echo "" +echo "🌐 6. 尝试创建 Gitea Release..." + +# 检查是否有 Gitea API Token +if [ -n "$GITEA_TOKEN" ]; then + echo " 发现 API Token,尝试自动创建 Release..." + + curl -X POST \ + -H "Authorization: token $GITEA_TOKEN" \ + -H "Content-Type: application/json" \ + "${GITEA_URL}/api/v1/repos/${REPO_OWNER}/${REPO_NAME}/releases" \ + -d "{ + \"tag_name\": \"${TAG_NAME}\", + \"name\": \"${RELEASE_NAME}\", + \"body\": $(echo "$RELEASE_NOTES" | jq -Rs .), + \"draft\": false, + \"prerelease\": false + }" && echo " ✅ Release 创建成功!" || echo " ❌ Release 创建失败" +else + echo " ⚠️ 未设置 GITEA_TOKEN 环境变量" + echo " 📋 请手动在 Gitea 中创建 Release:" + echo " 1. 访问: ${GITEA_URL}/${REPO_OWNER}/${REPO_NAME}/releases" + echo " 2. 点击 'New Release'" + echo " 3. 选择标签: ${TAG_NAME}" + echo " 4. 设置标题: ${RELEASE_NAME}" + echo " 5. 复制 release_notes_v${VERSION}.md 的内容到描述" +fi + +echo "" +echo "🎉 v${VERSION} Release 流程完成!" +echo "================================================" +echo "📋 已完成的操作:" +echo " ✅ 代码提交和推送" +echo " ✅ 版本标签创建 (${TAG_NAME})" +echo " ✅ Release Notes 生成" +echo "" +echo "📂 生成的文件:" +echo " - release_notes_v${VERSION}.md" +echo "" +echo "🔗 仓库地址: ${GITEA_URL}/${REPO_OWNER}/${REPO_NAME}" +echo "🏷️ 标签地址: ${GITEA_URL}/${REPO_OWNER}/${REPO_NAME}/releases/tag/${TAG_NAME}" +echo "" +echo "💡 提示: 如需自动创建 Release,请设置 GITEA_TOKEN 环境变量"