Sembra che sulla versione mobile si possa solo creare una stanza, ma cliccando direttamente su una stanza già creata non si riesce ad entrarci. Se si accede direttamente a /resenha/r/topic, invece, si può aprire. È un bug?
Funziona perfettamente sul mio telefono. Hai aggiornato la tua istanza Discourse questa settimana?
I plugin sperimentali richiedono aggiornamenti frequenti
Molti aggiornamenti questo mese, ma il principale è il supporto facoltativo e per stanza per SFU tramite LiveKit.
Il WebRTC P2P completo rimane il trasporto principale e predefinito supportato, ma ora SFU è supportato anche per chi deve gestire centinaia di partecipanti in una singola stanza.
Abbiamo anche apportato molti miglioramenti, come i selettori di dispositivi audio e video nei controlli della stanza e del widget, la possibilità di menzionare le stanze Resenha tramite il completamento automatico con # nelle chat e nei post, le opzioni di layout della stanza e altro ancora.
Grazie per questo, l’SFU era davvero il pezzo mancante. È stato quello che mi ha inizialmente spinto a mantenere un fork separato; ora che è supportato a monte, posso ritirare il fork e seguire direttamente resenha.
Avevo evitato di chiedere riguardo a LiveKit perché non sapevo se volevate andare in quella direzione. Ora che sì: siete aperti a PR per nuove funzionalità e piccoli miglioramenti?
@Falco Ciao, ho riscontrato alcuni problemi riproducibili durante i test della versione aggiornata di resenha. Condivido i risultati e le patch che sto applicando localmente, nel caso possano essere utili upstream.
1. L’interfaccia di amministrazione scarta silenziosamente room_type: le stanze non possono mai mantenere lo stage
app/controllers/resenha/admin_rooms_controller.rb:65 (room_params) omette :room_type dall’elenco dei parametri consentiti (permit list), e admin_room_serializer.rb non lo serializza mai.
Ogni assegnazione di stage effettuata tramite l’interfaccia di amministrazione viene scartata; le stanze vengono create come “aperte” e “tornano” allo stato aperto con qualsiasi modifica successiva da parte dell’amministratore. Confermato tramite i log di produzione; il controller lato utente lo accetta, ma il percorso di amministrazione lo perde.
# admin_rooms_controller.rb — aggiungere :room_type all'elenco dei parametri consentiti, quindi:
if permitted.key?(:room_type)
value = Resenha::Room::ROOM_TYPES[permitted[:room_type].to_s]
raise Discourse::InvalidParameters.new(:room_type) if value.nil?
permitted[:room_type] = value
end
# admin_room_serializer.rb — serializzare room_type in modo che il modulo venga inizializzato correttamente
2. Un room_type non valido torna silenziosamente a “aperto”
app/controllers/resenha/rooms_controller.rb:575 — ROOM_TYPES[...] || ROOM_TYPE_OPEN.
Qualsiasi room_type malformato o obsoleto in una modifica di stanza altrimenti valida trasforma in modo silenzioso una stanza di stage in una stanza aperta. Un errore 400 renderebbe visibile il chiamante che si comporta in modo errato, invece di corrompere la stanza.
value = Resenha::Room::ROOM_TYPES[permitted[:room_type].to_s]
raise Discourse::InvalidParameters.new(:room_type) if value.nil?
permitted[:room_type] = value
3. Il heartbeat risuscita un utente che è appena uscito (presenza fantasma)
rooms_controller.rb:234 (heartbeat) riaggiunge incondizionatamente la presenza, quindi un heartbeat in volo quando leave (:220) viene elaborato per secondo, ricrea l’utente che se n’è andato.
Il fantasma persiste fino alla scadenza del TTL, che non viene broadcastata: i client mostrano l’utente “nella stanza” per fino a un minuto.
Riprodotto su dispositivo; il kick ha la stessa esposizione.
# ParticipantTracker: tombstone di 15s
def mark_left(room_id, user_id) = redis.setex(left_key(room_id, user_id), 15, "1")
def recently_left?(room_id, user_id) = redis.exists?(left_key(room_id, user_id))
# leave/kick → mark_left; join/livekit_token → clear_left; heartbeat:
return head :no_content if Resenha::ParticipantTracker.recently_left?(@room.id, current_user.id)
4. Un webhook participant_left obsoleto espelle fantasma una sessione appena creata
livekit_webhooks_controller.rb:37/57 — le partenze vengono abbinate solo in base all’identità dell’utente.
In caso di disconnessione/ricollegamento rapido, il participant_left della sessione soppiantata arriva in ritardo e fa scadere la presenza della nuova sessione (l’utente viene “espulso” ~3 secondi dopo il ricollegamento, tornando ~15 secondi dopo).
Riprodotto su dispositivo; l’euristica gone_at non può distinguere le sessioni quando il ricollegamento precede la disconnessione della vecchia sessione.
# participant_joined → registrare il SID live attivo
Resenha::ParticipantTracker.set_livekit_sid(room.id, user_id, event.dig("participant", "sid"))
# expire_participant → ignorare la partenza di una sessione soppiantata
known = Resenha::ParticipantTracker.livekit_sid(room.id, user_id)
return if sid.present? && known.present? && sid != known
5. DeleteRoom 404 dopo l’ultima uscita inonda i log
lib/resenha/livekit/room_service_client.rb:84 segnala un avviso per qualsiasi risposta non 200.
L’SFU chiude automaticamente una stanza nel momento in cui si svuota, quindi la DeleteRoom dell’ultima uscita entra spesso in competizione con essa — “la stanza richiesta non esiste” è lo stato finale desiderato, non un errore.
Appare su Logster ad ogni ultima uscita.
elsif method == "DeleteRoom" && response.status == 404
Rails.logger.debug("[resenha-livekit] DeleteRoom no-op per la stanza #{room.id}: già eliminata")
true
Posso inviare una pull request se lo desideri.
Come detto in precedenza, non conosco appieno la vostra direzione, ma puoi dare un’occhiata alla mia, dato che ho pubblicato un post qui → Discourse Desktop Mac App - #10 by nicolsdennis
Sarebbe assolutamente fantastico: avrebbe senso farlo integrare con il meccanismo di Livestream, che fornirebbe il canale di chat associato come parte di un’esperienza integrata e curata
Ciao, quando cambio il nome della stanza, lo slug non viene aggiornato. Inoltre, non mi permette di eliminare le stanze: ricevo un errore del server.
Sarebbe anche utile poter modificare visivamente l’ordine delle stanze e il modo in cui vengono visualizzate.
Grazie per il rapporto dettagliato, ho appena unito una PR per quelli:
Ho un paio di piccole questioni relative all’UI/UX legate alle stanze vocali private:
1. La micro-icona del lucchetto/privato è troppo piccola.
È fantastico avere un’icona che indica lo stato di privacy di una stanza; purtroppo, però, è troppo piccola e si sovrappone molto all’icona principale. Inoltre, è incoerente con il resto della barra laterale:
![]()
2. L’elenco dei partecipanti è difficile da trovare
È possibile accedere all’elenco dei partecipanti in una stanza vocale privata solo dall’interno della chiamata stessa.
Questo non è molto intuitivo. Mi aspetto di poter modificare i partecipanti/invitati dalle impostazioni disponibili anche quando la stanza vocale è inattiva. Quando è inattiva, ci sono abbastanza impostazioni disponibili (incluso pubblico vs privato, numero massimo di partecipanti, ecc.), ma non l’elenco effettivo dei partecipanti.
Ho apportato correzioni per entrambi i problemi, grazie per la segnalazione @nathank!
Mi chiedo se sia possibile collegare una stanza specifica tramite link href. Vorrei aggiungere una scorciatoia verso una singola stanza di test per semplificare la nostra UX.
Sì, ora è possibile in questo formato
Vale inoltre la pena sottolineare i recenti miglioramenti:
Supporto per STUN/TURN privati tramite autenticazione coturn
Ciò ti consente di mantenere la tua istanza coturn riservata esclusivamente a te, ed è molto facile da configurare con un segreto condiviso tra Discourse e Coturn.
Supporto per la registrazione delle sessioni quando si utilizza LiveKit
Tutto tramite l’interfaccia utente delle chiamate, un clic per avviare la registrazione, un clic per arrestarla.
Supporto per i contrassegni per i partecipanti alla chiamata
Sebbene il contrassegno manchi di contesto, gli utenti possono fornirlo tramite l’area di testo
Menu a clic destro sulle tessere video
Facile regolare il volume di un peer, espellerlo, ecc.
Opzione per qualità superiore per voce, video e condivisione dello schermo
La mia funzionalità preferita della settimana, questa consente agli utenti di optare per limiti di bitrate molto più elevati e ottenere un audio/video molto migliore.
È un problema della mia istanza o probabilmente qualcosa da investigare? Ricevo un errore 500 quando provo a rimuovere le stanze vocali dal pannello di amministrazione:
ActiveRecord::InvalidForeignKey (PG::ForeignKeyViolation: ERROR: update or delete on table "resenha_rooms" violates foreign key constraint "fk_rails_ID" on table "resenha_sessions" DETAIL: Key (id)=(1) is still referenced from table "resenha_sessions".
Grazie per il report, la correzione è stata integrata
Grazie per questa correzione ultra-rapida; ha funzionato come previsto.
Solo una piccola nota, a titolo di aggiornamento: la modifica del nome predefinito della stanza non ha aggiornato il percorso /resenha/r/watercooler, ma ora sono riuscito a rimuovere la stanza predefinita precedente e ad aggiungerne una nuova.
Ho reso lo slug esplicitamente modificabile, quindi funziona come le categorie
Puoi anche aggiungere alcuni parametri URL per aprire in un modo specifico:
https://discourse-on-a-pi5.falco.dev/resenha/r/watercooler?join, entra direttamente nella stanza, senza pulsante “entra”
https://discourse-on-a-pi5.falco.dev/resenha/r/watercooler?join&widget (aggiunto all’inizio di questa settimana), si apre e passa in modalità widget
https://discourse-on-a-pi5.falco.dev/resenha/r/watercooler?join&chat si apre in modalità chat

