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.

User.kt 1.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package com.dmdirc.ktirc.model
  2. /**
  3. * Describes a user on IRC.
  4. */
  5. data class User(
  6. var nickname: String,
  7. var ident: String? = null,
  8. var hostname: String? = null,
  9. var account: String? = null,
  10. var realName: String? = null,
  11. var awayMessage: String? = null
  12. ) {
  13. internal fun updateFrom(other: User) {
  14. nickname = other.nickname
  15. other.ident?.let { ident = it }
  16. other.hostname?.let { hostname = it }
  17. other.account?.let { account = it }
  18. other.realName?.let { realName = it }
  19. other.awayMessage?.let { awayMessage = it }
  20. }
  21. internal fun reset(newNickname: String) {
  22. nickname = newNickname
  23. ident = null
  24. hostname = null
  25. account = null
  26. realName = null
  27. awayMessage = null
  28. }
  29. }
  30. internal fun ByteArray.asUser() = String(this).asUser()
  31. internal fun String.asUser(): User {
  32. val identOffset = indexOf('!')
  33. return if (identOffset >= 0) {
  34. val hostOffset = indexOf('@', identOffset)
  35. if (hostOffset >= 0) {
  36. User(substring(0 until identOffset), substring(identOffset + 1 until hostOffset), substring(hostOffset + 1))
  37. } else {
  38. User(substring(0 until identOffset), substring(identOffset + 1))
  39. }
  40. } else {
  41. User(this)
  42. }
  43. }