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.2KB

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