IMViewModel.swift 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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. private 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 updateConversationTitle(id: String, title: String) -> Promise<IMConversationInfo> {
  39. return Promise { fulfill, reject in
  40. self.communicateAPI.request(.updateConversationTitle(id, title), completion: { result in
  41. let response = OOResult<BaseModelClass<IMConversationInfo>>(result)
  42. if response.isResultSuccess() {
  43. if let info = response.model?.data {
  44. fulfill(info)
  45. } else {
  46. reject(OOAppError.apiEmptyResultError)
  47. }
  48. } else {
  49. reject(response.error!)
  50. }
  51. })
  52. }
  53. }
  54. //修改成员列表
  55. func updateConversationPeople(id: String, users: [String]) -> Promise<IMConversationInfo> {
  56. return Promise { fulfill, reject in
  57. self.communicateAPI.request(.updateConversationPeople(id, users), completion: { result in
  58. let response = OOResult<BaseModelClass<IMConversationInfo>>(result)
  59. if response.isResultSuccess() {
  60. if let info = response.model?.data {
  61. fulfill(info)
  62. } else {
  63. reject(OOAppError.apiEmptyResultError)
  64. }
  65. } else {
  66. reject(response.error!)
  67. }
  68. })
  69. }
  70. }
  71. //阅读会话
  72. func readConversation(conversationId: String?) {
  73. guard let id = conversationId else {
  74. DDLogError("阅读会话失败, 传入id为空")
  75. return
  76. }
  77. self.communicateAPI.request(.readConversation(id), completion: {result in
  78. let response = OOResult<BaseModelClass<OOCommonIdModel>>(result)
  79. if response.isResultSuccess() {
  80. DDLogDebug("阅读当前会话成功!")
  81. }else {
  82. DDLogError("阅读会话失败!")
  83. }
  84. })
  85. }
  86. //发送消息
  87. func sendMsg(msg: IMMessageInfo) -> Promise<Bool> {
  88. return Promise { fulfill, reject in
  89. self.communicateAPI.request(.sendMsg(msg), completion: { result in
  90. let response = OOResult<BaseModelClass<OOCommonIdModel>>(result)
  91. if response.isResultSuccess() {
  92. if let _ = response.model?.data {
  93. fulfill(true)
  94. } else {
  95. reject(OOAppError.apiEmptyResultError)
  96. }
  97. } else {
  98. reject(response.error!)
  99. }
  100. })
  101. }
  102. }
  103. //上传文件
  104. func uploadFile(conversationId: String, type: String, fileName: String, file: Data) -> Promise<IMUploadBackModel> {
  105. return Promise { fulfill, reject in
  106. self.communicateAPI.request(.imUploadFile(conversationId, type, fileName, file), completion: { (result) in
  107. let response = OOResult<BaseModelClass<IMUploadBackModel>>(result)
  108. if response.isResultSuccess() {
  109. if let back = response.model?.data {
  110. fulfill(back)
  111. }else {
  112. reject(OOAppError.apiEmptyResultError)
  113. }
  114. }else {
  115. reject(response.error!)
  116. }
  117. })
  118. }
  119. }
  120. //查询会话列表
  121. func myConversationList() -> Promise<[IMConversationInfo]> {
  122. return Promise { fulfill, reject in
  123. self.communicateAPI.request(.myConversationList, completion: { result in
  124. let response = OOResult<BaseModelClass<[IMConversationInfo]>>(result)
  125. if response.isResultSuccess() {
  126. if let list = response.model?.data {
  127. let rList = list.sorted { (f, s) -> Bool in
  128. let ft = f.lastMessage?.createTime ?? ""
  129. let st = s.lastMessage?.createTime ?? ""
  130. if ft == "" {
  131. return true
  132. }
  133. if st == "" {
  134. return false
  135. }
  136. return ft.toDate(formatter: "yyyy-MM-dd HH:mm:ss") > st.toDate(formatter: "yyyy-MM-dd HH:mm:ss")
  137. }
  138. fulfill(rList)
  139. } else {
  140. reject(OOAppError.apiEmptyResultError)
  141. }
  142. } else {
  143. reject(response.error!)
  144. }
  145. })
  146. }
  147. }
  148. //查询消息列表
  149. func myMsgPageList(page: Int, conversationId: String) -> Promise<[IMMessageInfo]> {
  150. return Promise { fulfill, reject in
  151. self.communicateAPI.request(.msgListByPaging(page, 15, conversationId), completion: { result in
  152. let response = OOResult<BaseModelClass<[IMMessageInfo]>>(result)
  153. if response.isResultSuccess() {
  154. if let list = response.model?.data {
  155. //列表翻转
  156. let rList = list.sorted { (f, s) -> Bool in
  157. if let ft = f.createTime, let st = s.createTime {
  158. return ft.toDate(formatter: "yyyy-MM-dd HH:mm:ss") < st.toDate(formatter: "yyyy-MM-dd HH:mm:ss")
  159. }
  160. return true
  161. }
  162. fulfill(rList)
  163. } else {
  164. reject(OOAppError.apiEmptyResultError)
  165. }
  166. } else {
  167. reject(response.error!)
  168. }
  169. })
  170. }
  171. }
  172. func getInstantMsgList() -> Promise<[InstantMessage]> {
  173. return Promise { fulfill, reject in
  174. self.communicateAPI.request(.instantMessageList(50), completion: { result in
  175. let response = OOResult<BaseModelClass<[InstantMessage]>>(result)
  176. if response.isResultSuccess() {
  177. if let list = response.model?.data {
  178. //列表翻转
  179. let rList = list.sorted { (f, s) -> Bool in
  180. if let ft = f.createTime, let st = s.createTime {
  181. return ft.toDate(formatter: "yyyy-MM-dd HH:mm:ss") < st.toDate(formatter: "yyyy-MM-dd HH:mm:ss")
  182. }
  183. return true
  184. }
  185. fulfill(rList)
  186. } else {
  187. reject(OOAppError.apiEmptyResultError)
  188. }
  189. } else {
  190. reject(response.error!)
  191. }
  192. })
  193. }
  194. }
  195. }