Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

IrcMessage.kt 1.1KB

1234567891011121314151617181920212223242526272829303132333435
  1. package com.dmdirc.ktirc.model
  2. import java.time.Instant
  3. import java.time.LocalDateTime
  4. import java.time.ZoneId
  5. class IrcMessage(val tags: Map<MessageTag, String>, val prefix: ByteArray?, val command: String, val params: List<ByteArray>) {
  6. companion object {
  7. internal var currentTimeZoneProvider = { ZoneId.systemDefault() }
  8. internal var currentTimeProvider = { LocalDateTime.now(currentTimeZoneProvider()) }
  9. }
  10. val time: LocalDateTime = if (MessageTag.ServerTime in tags) {
  11. LocalDateTime.ofInstant(Instant.parse(tags[MessageTag.ServerTime]), currentTimeZoneProvider())
  12. } else {
  13. currentTimeProvider()
  14. }
  15. val sourceUser by lazy {
  16. prefix?.asUser()?.apply {
  17. tags[MessageTag.AccountName]?.let { account = it }
  18. }
  19. }
  20. }
  21. sealed class MessageTag(val name: String) {
  22. object AccountName : MessageTag("account")
  23. object ServerTime : MessageTag("time")
  24. }
  25. val messageTags: Map<String, MessageTag> by lazy {
  26. MessageTag::class.nestedClasses.map { it.objectInstance as MessageTag }.associateBy { it.name }
  27. }