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

1234567891011121314151617181920212223242526272829303132333435363738
  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. }
  22. internal fun ByteArray.asUser() = String(this).asUser()
  23. internal fun String.asUser(): User {
  24. val identOffset = indexOf('!')
  25. return if (identOffset >= 0) {
  26. val hostOffset = indexOf('@', identOffset)
  27. if (hostOffset >= 0) {
  28. User(substring(0 until identOffset), substring(identOffset + 1 until hostOffset), substring(hostOffset + 1))
  29. } else {
  30. User(substring(0 until identOffset), substring(identOffset + 1))
  31. }
  32. } else {
  33. User(this)
  34. }
  35. }