StopThinkingAnimation para a animação de forma segura
()
| 144 | |
| 145 | // StopThinkingAnimation para a animação de forma segura |
| 146 | func (am *AnimationManager) StopThinkingAnimation() { |
| 147 | am.mu.Lock() |
| 148 | |
| 149 | // Se a animação não está rodando ou já solicitamos parada, apenas retorne |
| 150 | if !am.isRunning || am.stopRequested { |
| 151 | am.mu.Unlock() |
| 152 | return |
| 153 | } |
| 154 | |
| 155 | // Marca que solicitamos parada e sinaliza o encerramento |
| 156 | am.stopRequested = true |
| 157 | am.isRunning = false |
| 158 | |
| 159 | // Mantém referência local ao canal antes de desbloqueá-lo |
| 160 | done := am.done |
| 161 | am.mu.Unlock() |
| 162 | |
| 163 | // Fecha o canal fora do lock para evitar deadlock |
| 164 | close(done) |
| 165 | |
| 166 | // Aguarda a goroutine terminar |
| 167 | am.wg.Wait() |
| 168 | |
| 169 | // Garantir limpeza completa do terminal após parar |
| 170 | fmt.Print("\033[0m") // Reset de cores |
| 171 | _ = os.Stdout.Sync() |
| 172 | |
| 173 | // Adiciona uma nova linha para garantir espaçamento adequado |
| 174 | fmt.Println() |
| 175 | } |