feat: 添加 Tauri Mac 原生应用支持

- 新增 mac-app/ 目录:Tauri 项目结构(Rust 外壳 + sidecar 进程管理)
- 前端添加 Tauri 环境检测,API 调用和 WebSocket 自动适配
- 后端支持 MEETING_DATA_DIR 环境变量指定数据目录
- 新增 /api/meetings/{id}/retranscribe 接口用于重新转录
- 修复轮询超时:2分钟→30分钟,适配长音频
- 添加 .gitignore 排除构建产物
This commit is contained in:
freedakgmail
2026-07-10 00:04:27 +08:00
parent 3ab8f22bae
commit 2752ea4e54
73 changed files with 5465 additions and 17 deletions
+48
View File
@@ -0,0 +1,48 @@
#!/bin/bash
# 一键构建 Mac App
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
APP_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
echo "=========================================="
echo " 智能会议记录系统 - Mac App 构建"
echo "=========================================="
# 检查 Rust
if ! command -v rustc &> /dev/null; then
echo "❌ Rust 未安装,请先安装: https://rustup.rs"
exit 1
fi
# 检查 PyInstaller
if ! command -v pyinstaller &> /dev/null && ! python3 -m PyInstaller --version &> /dev/null 2>&1; then
echo "❌ PyInstaller 未安装,请运行: pip3 install pyinstaller"
exit 1
fi
# 检查 Node.js
if ! command -v node &> /dev/null; then
echo "❌ Node.js 未安装"
exit 1
fi
echo ""
echo "步骤 1/3: 构建前端..."
bash "$SCRIPT_DIR/build_frontend.sh"
echo ""
echo "步骤 2/3: 构建后端 sidecar..."
bash "$SCRIPT_DIR/build_backend.sh"
echo ""
echo "步骤 3/3: 构建 Tauri App..."
cd "$APP_DIR"
npm install
npm run build
echo ""
echo "=========================================="
echo " ✅ 构建完成!"
echo " DMG 文件位于: $APP_DIR/src-tauri/target/release/bundle/dmg/"
echo "=========================================="
+56
View File
@@ -0,0 +1,56 @@
#!/bin/bash
# 构建后端 sidecar 二进制文件 (PyInstaller)
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
BUILD_DIR="$SCRIPT_DIR/../dist"
echo "=== 构建后端 sidecar (PyInstaller) ==="
echo "项目根目录: $PROJECT_ROOT"
echo "构建输出: $BUILD_DIR"
# 清理旧构建
rm -rf "$BUILD_DIR/backend"
mkdir -p "$BUILD_DIR/backend"
# 获取当前平台 target triple
TARGET_TRIPLE=$(rustc -vV 2>/dev/null | grep host | awk '{print $2}')
if [ -z "$TARGET_TRIPLE" ]; then
# 默认 Apple Silicon
TARGET_TRIPLE="aarch64-apple-darwin"
fi
echo "目标平台: $TARGET_TRIPLE"
# 使用 PyInstaller 打包
cd "$PROJECT_ROOT"
pyinstaller \
--onefile \
--name "meeting-backend" \
--distpath "$BUILD_DIR/backend" \
--workpath "$BUILD_DIR/backend/build" \
--specpath "$BUILD_DIR/backend" \
--add-data "database.py:." \
--add-data "processor.py:." \
--add-data "audio_utils.py:." \
--hidden-import funasr \
--hidden-import funasr.auto \
--hidden-import soundfile \
--hidden-import pydub \
--hidden-import sqlalchemy \
--hidden-import openai \
--collect-all funasr \
--collect-all torch \
--collect-all torchaudio \
--noconfirm \
main.py
# 复制到 Tauri sidecar 目录,加上 target triple 后缀
SIDECAR_DIR="$SCRIPT_DIR/../src-tauri/binaries"
mkdir -p "$SIDECAR_DIR"
cp "$BUILD_DIR/backend/meeting-backend" "$SIDECAR_DIR/meeting-backend-$TARGET_TRIPLE"
chmod +x "$SIDECAR_DIR/meeting-backend-$TARGET_TRIPLE"
echo "=== 后端构建完成 ==="
echo "Sidecar 二进制: $SIDECAR_DIR/meeting-backend-$TARGET_TRIPLE"
+15
View File
@@ -0,0 +1,15 @@
#!/bin/bash
# 构建前端 (Vite build)
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
FRONTEND_DIR="$(cd "$SCRIPT_DIR/../../frontend" && pwd)"
echo "=== 构建前端 (Vite) ==="
echo "前端目录: $FRONTEND_DIR"
cd "$FRONTEND_DIR"
npm run build
echo "=== 前端构建完成 ==="
echo "输出目录: $FRONTEND_DIR/dist"