Files
iBook/release_fixed.sh
douboer 30e7d37719 🎉 Release v1.2: 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排序列表
- 向后兼容: 平滑升级,不破坏现有功能
2025-10-21 10:55:18 +08:00

213 lines
6.9 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

#!/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 环境变量"