Entendi os dois pontos. Ajustei o algoritmo assim:
Dados de entrada (atualizados)
Da live: duração total da transmissão.
De cada usuário: uma lista de sessões de conexão, cada uma com seu horário de entrada e horário de saída (um usuário pode ter mais de uma sessão, caso tenha se desconectado e reconectado durante a live).
Verificação da presença completa
Para cada usuário, somamos a duração de todas as suas sessões de conexão, obtendo o tempo total que ele ficou conectado à live. Em seguida, comparamos esse tempo total com uma margem de tolerância de 90% da duração total da live. Se o tempo conectado for igual ou superior a essa margem, o usuário é considerado presente. Essa margem evita penalizar quem perdeu poucos minutos por oscilação de conexão, sem abrir mão de um critério rigoroso.
Algoritmo final
1- Obter a duração total da live.
2- Calcular o valor da margem mínima de presença (90% da duração total da live).
3- Para cada participante da lista de participantes, repetir os passos 4 e 5.
4- Somar a duração de todas as sessões de conexão desse participante, obtendo o tempo total conectado.
5- Verificar a condição: o tempo total conectado é igual ou superior à margem mínima de presença?
- Se sim, enviar o e-mail de agradecimento.
- Se não, não enviar o e-mail.
6- Repetir os passos 4 e 5 até que todos os participantes tenham sido verificados.
Só para explicar, coloquei uma margem de 90% porque antes estava colocando de 95% mas percebi que ficaria muito rigida, por exemplo, se a live fosse de 60 minutos, 95% daria 57 minutos e imagine que somando todas as sessões do usuário desse 55 minutos, não se enquadrava para receber o e-mail, colocando 90% da em torno de 54 minutos.
Agradeço o retorno, ajudou a enxergar algo em que não estava percebendo, e com essa visão conseguimos deixar o algoritmo mais realista para um cenário com oscilação de conexão!