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:
Executable
+48
@@ -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 "=========================================="
|
||||
Executable
+56
@@ -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"
|
||||
Executable
+15
@@ -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"
|
||||
Reference in New Issue
Block a user