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.

BatchMutator.kt 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package com.dmdirc.ktirc.events.mutators
  2. import com.dmdirc.ktirc.IrcClient
  3. import com.dmdirc.ktirc.events.BatchFinished
  4. import com.dmdirc.ktirc.events.BatchReceived
  5. import com.dmdirc.ktirc.events.BatchStarted
  6. import com.dmdirc.ktirc.events.IrcEvent
  7. import com.dmdirc.ktirc.io.MessageEmitter
  8. import com.dmdirc.ktirc.model.Batch
  9. internal class BatchMutator : EventMutator {
  10. override fun mutateEvent(client: IrcClient, messageEmitter: MessageEmitter, event: IrcEvent): List<IrcEvent> {
  11. when {
  12. event is BatchStarted -> startBatch(client, event)
  13. event is BatchFinished -> return finishBatch(client, event)
  14. event.metadata.batchId != null -> addToBatch(client, messageEmitter, event)
  15. else -> return listOf(event)
  16. }
  17. return emptyList()
  18. }
  19. private fun startBatch(client: IrcClient, event: BatchStarted) {
  20. client.serverState.batches[event.referenceId] =
  21. Batch(event.batchType, event.params.asList(), event.metadata.batchId, mutableListOf(event))
  22. }
  23. private fun finishBatch(client: IrcClient, event: BatchFinished): List<IrcEvent> {
  24. client.serverState.batches.remove(event.referenceId)?.let {
  25. it.events += event
  26. val batch = BatchReceived(it.events[0].metadata, it.type, it.arguments.toTypedArray(), it.events)
  27. if (it.parent == null) {
  28. return listOf(batch)
  29. } else {
  30. client.serverState.batches[it.parent]?.events?.add(batch)
  31. }
  32. }
  33. return emptyList()
  34. }
  35. private fun addToBatch(client: IrcClient, messageEmitter: MessageEmitter, event: IrcEvent) {
  36. client.serverState.batches[event.metadata.batchId]?.let {
  37. it.events += event
  38. messageEmitter.handleEvent(client, event, true)
  39. }
  40. }
  41. }