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.

TopicProcessor.kt 1.1KB

1234567891011121314151617181920212223242526272829
  1. package com.dmdirc.ktirc.messages
  2. import com.dmdirc.ktirc.events.ChannelTopicDiscovered
  3. import com.dmdirc.ktirc.events.ChannelTopicMetadataDiscovered
  4. import com.dmdirc.ktirc.model.IrcMessage
  5. import com.dmdirc.ktirc.model.asUser
  6. import com.dmdirc.ktirc.util.currentTimeZoneProvider
  7. import java.time.Instant
  8. import java.time.LocalDateTime
  9. internal class TopicProcessor : MessageProcessor {
  10. override val commands = arrayOf(RPL_TOPIC, RPL_TOPICWHOTIME)
  11. override fun process(message: IrcMessage) = sequence {
  12. when (message.command) {
  13. RPL_TOPIC -> yield(ChannelTopicDiscovered(message.time, message.channel, String(message.params[2])))
  14. RPL_TOPICWHOTIME -> yield(ChannelTopicMetadataDiscovered(
  15. message.time, message.channel, message.params[2].asUser(), message.topicSetTime))
  16. }
  17. }.toList()
  18. private val IrcMessage.channel
  19. get() = String(params[1])
  20. private val IrcMessage.topicSetTime
  21. get() = LocalDateTime.ofInstant(Instant.ofEpochSecond(String(params[3]).toLong()), currentTimeZoneProvider())
  22. }