feat: enhance CallWindow with error handling and track management

- Added error handling logic to manage Jitsi connection and track creation errors, providing user-friendly feedback through the new ErrorModal.
- Introduced functionality to dynamically create and manage local audio and video tracks during calls.
- Updated Jitsi configuration to separate host and port for improved connection handling.
- Refactored call initiation logic to ensure robust error reporting and user guidance during connection issues.
This commit is contained in:
2025-11-21 19:52:50 -03:00
parent 1f48247493
commit 5122eacddd
4 changed files with 686 additions and 77 deletions

View File

@@ -74,19 +74,17 @@ export const criarChamada = mutation({
throw new Error('Você não participa desta conversa');
}
// Verificar se já existe chamada ativa
const chamadasAtivas = await ctx.db
// Verificar se já existe chamada ativa (aguardando ou em_andamento)
const todasAtivas = await ctx.db
.query('chamadas')
.withIndex('by_conversa', (q) => q.eq('conversaId', args.conversaId).eq('status', 'aguardando'))
.withIndex('by_conversa', (q) => q.eq('conversaId', args.conversaId))
.filter((q) =>
q.or(
q.eq(q.field('status'), 'aguardando'),
q.eq(q.field('status'), 'em_andamento')
)
)
.collect();
// Também verificar chamadas em andamento
const chamadasEmAndamento = await ctx.db
.query('chamadas')
.withIndex('by_conversa', (q) => q.eq('conversaId', args.conversaId).eq('status', 'em_andamento'))
.collect();
const todasAtivas = [...chamadasAtivas, ...chamadasEmAndamento];
if (todasAtivas.length > 0) {
// Retornar chamada ativa existente
@@ -492,18 +490,17 @@ export const obterChamadaAtiva = query({
const participa = await verificarParticipanteConversa(ctx, args.conversaId, usuarioAtual._id);
if (!participa) return null;
// Buscar chamada ativa
const chamadasAguardando = await ctx.db
// Buscar chamada ativa (aguardando ou em_andamento)
const todasAtivas = await ctx.db
.query('chamadas')
.withIndex('by_conversa', (q) => q.eq('conversaId', args.conversaId).eq('status', 'aguardando'))
.withIndex('by_conversa', (q) => q.eq('conversaId', args.conversaId))
.filter((q) =>
q.or(
q.eq(q.field('status'), 'aguardando'),
q.eq(q.field('status'), 'em_andamento')
)
)
.collect();
const chamadasEmAndamento = await ctx.db
.query('chamadas')
.withIndex('by_conversa', (q) => q.eq('conversaId', args.conversaId).eq('status', 'em_andamento'))
.collect();
const todasAtivas = [...chamadasAguardando, ...chamadasEmAndamento];
if (todasAtivas.length === 0) {
return null;