IMViewModel.swift 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. //
  2. // IMViewModel.swift
  3. // O2Platform
  4. //
  5. // Created by FancyLou on 2020/6/4.
  6. // Copyright © 2020 zoneland. All rights reserved.
  7. //
  8. import Promises
  9. import CocoaLumberjack
  10. class IMViewModel: NSObject {
  11. override init() {
  12. super.init()
  13. }
  14. let communicateAPI = OOMoyaProvider<CommunicateAPI>()
  15. }
  16. extension IMViewModel {
  17. //创建会话 @param type: single group
  18. func createConversation(type: String, users: [String]) -> Promise<IMConversationInfo> {
  19. let conversation = IMConversationInfo()
  20. conversation.type = type
  21. conversation.personList = users
  22. return Promise { fulfill, reject in
  23. self.communicateAPI.request(.createConversation(conversation), completion: { result in
  24. let response = OOResult<BaseModelClass<IMConversationInfo>>(result)
  25. if response.isResultSuccess() {
  26. if let info = response.model?.data {
  27. fulfill(info)
  28. } else {
  29. reject(OOAppError.apiEmptyResultError)
  30. }
  31. } else {
  32. reject(response.error!)
  33. }
  34. })
  35. }
  36. }
  37. //阅读会话
  38. func readConversation(conversationId: String?) {
  39. guard let id = conversationId else {
  40. DDLogError("阅读会话失败, 传入id为空")
  41. return
  42. }
  43. self.communicateAPI.request(.readConversation(id), completion: {result in
  44. let response = OOResult<BaseModelClass<OOCommonIdModel>>(result)
  45. if response.isResultSuccess() {
  46. DDLogDebug("阅读当前会话成功!")
  47. }else {
  48. DDLogError("阅读会话失败!")
  49. }
  50. })
  51. }
  52. //发送消息
  53. func sendMsg(msg: IMMessageInfo) -> Promise<Bool> {
  54. return Promise { fulfill, reject in
  55. self.communicateAPI.request(.sendMsg(msg), completion: { result in
  56. let response = OOResult<BaseModelClass<OOCommonIdModel>>(result)
  57. if response.isResultSuccess() {
  58. if let _ = response.model?.data {
  59. fulfill(true)
  60. } else {
  61. reject(OOAppError.apiEmptyResultError)
  62. }
  63. } else {
  64. reject(response.error!)
  65. }
  66. })
  67. }
  68. }
  69. //查询会话列表
  70. func myConversationList() -> Promise<[IMConversationInfo]> {
  71. return Promise { fulfill, reject in
  72. self.communicateAPI.request(.myConversationList, completion: { result in
  73. let response = OOResult<BaseModelClass<[IMConversationInfo]>>(result)
  74. if response.isResultSuccess() {
  75. if let list = response.model?.data {
  76. fulfill(list)
  77. } else {
  78. reject(OOAppError.apiEmptyResultError)
  79. }
  80. } else {
  81. reject(response.error!)
  82. }
  83. })
  84. }
  85. }
  86. //查询消息列表
  87. func myMsgPageList(page: Int, conversationId: String) -> Promise<[IMMessageInfo]> {
  88. return Promise { fulfill, reject in
  89. self.communicateAPI.request(.msgListByPaging(page, 40, conversationId), completion: { result in
  90. let response = OOResult<BaseModelClass<[IMMessageInfo]>>(result)
  91. if response.isResultSuccess() {
  92. if let list = response.model?.data {
  93. //列表翻转
  94. let rList = list.sorted { (f, s) -> Bool in
  95. if let ft = f.createTime, let st = s.createTime {
  96. return ft.toDate(formatter: "yyyy-MM-dd HH:mm:ss") < st.toDate(formatter: "yyyy-MM-dd HH:mm:ss")
  97. }
  98. return true
  99. }
  100. fulfill(rList)
  101. } else {
  102. reject(OOAppError.apiEmptyResultError)
  103. }
  104. } else {
  105. reject(response.error!)
  106. }
  107. })
  108. }
  109. }
  110. func getInstantMsgList() -> Promise<[InstantMessage]> {
  111. return Promise { fulfill, reject in
  112. self.communicateAPI.request(.instantMessageList(100), completion: { result in
  113. let response = OOResult<BaseModelClass<[InstantMessage]>>(result)
  114. if response.isResultSuccess() {
  115. if let list = response.model?.data {
  116. //列表翻转
  117. let rList = list.sorted { (f, s) -> Bool in
  118. if let ft = f.createTime, let st = s.createTime {
  119. return ft.toDate(formatter: "yyyy-MM-dd HH:mm:ss") < st.toDate(formatter: "yyyy-MM-dd HH:mm:ss")
  120. }
  121. return true
  122. }
  123. fulfill(rList)
  124. } else {
  125. reject(OOAppError.apiEmptyResultError)
  126. }
  127. } else {
  128. reject(response.error!)
  129. }
  130. })
  131. }
  132. }
  133. }