IMViewModel.swift 8.6 KB

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