# 시스템 트레이 구현 가이드 ## 개요 Proton Drive처럼 시스템 트레이 아이콘을 표시하고, 로그인 상태에 따라 아이콘 색상과 툴팁을 변경하는 기능을 구현하는 방법입니다. ## 구조 설명 ### 1. 파일 구조 ``` src-tauri/src/ ├── lib.rs # 메인 앱 설정 (트레이 초기화) ├── tray.rs # 트레이 관련 로직 (별도 모듈) └── commands/ └── tray_commands.rs # 프론트엔드에서 호출할 트레이 커맨드 ``` ### 2. 모듈 분리 이유 **`tray.rs` (별도 파일로 분리)** - ✅ **유지보수성**: 트레이 관련 코드가 한 곳에 모여있어 수정이 쉬움 - ✅ **확장성**: 새로운 트레이 기능 추가 시 해당 파일만 수정 - ✅ **가독성**: 메인 코드(`lib.rs`)가 간결해짐 - ✅ **테스트 용이**: 트레이 로직을 독립적으로 테스트 가능 ### 3. 구현 방법 #### Tauri 2.x에서 시스템 트레이 사용 Tauri 2.x에서는 시스템 트레이 기능이 변경되었을 수 있습니다. 다음 중 하나의 방법을 사용해야 합니다: **방법 1: Tauri 플러그인 사용 (권장)** ```toml # Cargo.toml에 추가 [dependencies] tauri-plugin-system-tray = "2.0" ``` **방법 2: 직접 구현** - `tray-icon` 크레이트 사용 - 또는 Tauri 2.x의 새로운 API 사용 ### 4. 현재 구현된 구조 #### `src-tauri/src/tray.rs` - `TrayStatus` 열거형: 로그인 상태 정의 - `create_system_tray()`: 트레이 생성 - `handle_tray_event()`: 트레이 이벤트 처리 - `update_tray_status()`: 상태에 따른 아이콘/툴팁 업데이트 #### `src-tauri/src/commands/tray_commands.rs` - `update_tray_icon()`: 프론트엔드에서 호출 가능한 커맨드 ### 5. 사용 예시 **프론트엔드에서 호출:** ```javascript import { invoke } from '@tauri-apps/api/core'; // 로그인 상태로 변경 await invoke('update_tray_icon', { status: 'logged_in' }); // 동기화 중 상태로 변경 await invoke('update_tray_icon', { status: 'syncing' }); ``` ### 6. 아이콘 색상 변경 방법 Proton Drive처럼 아이콘 색상을 변경하려면: **옵션 1: 상태별 아이콘 파일 준비** ``` src-tauri/icons/ ├── icon_logged_out.png (회색) ├── icon_logged_in.png (녹색) ├── icon_syncing.png (파란색) └── icon_error.png (빨간색) ``` **옵션 2: 런타임 아이콘 생성** - `image` 크레이트를 사용하여 런타임에 아이콘 색상 변경 - Cargo.toml에 추가: `image = "0.24"` ### 7. 다음 단계 1. **Tauri 2.x API 확인**: 정확한 시스템 트레이 API 확인 필요 2. **플러그인 설치**: `tauri-plugin-system-tray` 플러그인 사용 여부 확인 3. **아이콘 준비**: 상태별 아이콘 파일 생성 4. **테스트**: 각 상태에서 트레이 동작 확인 ## 참고사항 - Tauri 2.x의 시스템 트레이 API는 1.x와 다를 수 있습니다 - 실제 구현 전에 Tauri 2.x 공식 문서를 확인하세요 - OS별로 트레이 동작이 다를 수 있습니다 (Windows, macOS, Linux)