| File was renamed from VoiceSnapGo/services/engine_service.go |
| | |
| | | package services |
| | | |
| | | import ( |
| | | "sync" |
| | | "voicesnap/internal/engine" |
| | | "voicesnap/internal/model" |
| | | "voicesnap/internal/paths" |
| | |
| | | type EngineService struct { |
| | | app *application.App |
| | | initCallback func() |
| | | mu sync.RWMutex |
| | | status string |
| | | hardwareInfo string |
| | | lastError string |
| | | } |
| | | |
| | | func NewEngineService() *EngineService { |
| | | return &EngineService{} |
| | | return &EngineService{status: "loading"} |
| | | } |
| | | |
| | | // ModelExists returns true if the ASR model files are present. |
| | |
| | | return engine.ModelExists() |
| | | } |
| | | |
| | | func (s *EngineService) GetStatus() map[string]interface{} { |
| | | s.mu.RLock() |
| | | defer s.mu.RUnlock() |
| | | return map[string]interface{}{ |
| | | "status": s.status, |
| | | "hardwareInfo": s.hardwareInfo, |
| | | "error": s.lastError, |
| | | } |
| | | } |
| | | |
| | | func (s *EngineService) SetStatus(status, hardwareInfo, lastError string) { |
| | | s.mu.Lock() |
| | | defer s.mu.Unlock() |
| | | s.status = status |
| | | s.hardwareInfo = hardwareInfo |
| | | s.lastError = lastError |
| | | } |
| | | |
| | | // DownloadModel downloads the ASR model with progress events. |
| | | func (s *EngineService) DownloadModel(primaryURL, fallbackURL string) error { |
| | | err := model.Download(primaryURL, fallbackURL, paths.ModelsRoot(), func(percent float64, downloaded, total int64) { |