You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ServerReadyMutator.kt 1.3KB

12345678910111213141516171819202122232425262728293031323334353637
  1. package com.dmdirc.ktirc.events.mutators
  2. import com.dmdirc.ktirc.IrcClient
  3. import com.dmdirc.ktirc.events.*
  4. import com.dmdirc.ktirc.io.MessageEmitter
  5. import com.dmdirc.ktirc.model.ServerStatus
  6. /**
  7. * Sends a [ServerReady] event once the first line has been received post 001/005/etc.
  8. */
  9. internal class ServerReadyMutator : EventMutator {
  10. /** Events that won't trigger a 'server ready' event to be sent. */
  11. private val excludedEvents = listOf(
  12. ServerConnecting::class,
  13. ServerConnected::class,
  14. ServerDisconnected::class,
  15. ServerWelcome::class,
  16. ServerReady::class,
  17. ServerFeaturesUpdated::class,
  18. PingReceived::class,
  19. ServerCapabilitiesReceived::class,
  20. ServerCapabilitiesAcknowledged::class,
  21. ServerCapabilitiesFinished::class
  22. )
  23. override fun mutateEvent(client: IrcClient, messageEmitter: MessageEmitter, event: IrcEvent): List<IrcEvent> = sequence {
  24. if (client.serverState.receivedWelcome
  25. && client.serverState.status == ServerStatus.Negotiating
  26. && event::class !in excludedEvents) {
  27. yield(ServerReady(event.metadata))
  28. }
  29. yield(event)
  30. }.toList()
  31. }