Guest User

Untitled

a guest
Oct 18th, 2017
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.22 KB | None | 0 0
  1. class QuickBoxService:NSObject {
  2.  
  3. fileprivate static var instance:QuickBoxService!;
  4.  
  5. var users : [QBUUser] = [];
  6.  
  7.  
  8. class func getInstance() -> QuickBoxService {
  9. if(instance == nil){
  10. instance = QuickBoxService();
  11. }
  12. return instance;
  13. }
  14.  
  15. fileprivate override init(){
  16. super.init();
  17. }
  18.  
  19.  
  20. //MARK: AUtenticar
  21. func autenticar(_ delegado:NotificationServiceDelegate, pass:String, onComplete:@escaping (_ exito:Bool, _ mensaje:String)->() ){
  22. guard let currentUser = ServicesManager.instance().currentUser() else {
  23. onComplete(true, "");
  24. return
  25. }
  26.  
  27. currentUser.password = pass
  28.  
  29. //SVProgressHUD.showWithStatus("SA_STR_LOGGING_IN_AS".localized + currentUser.login!, maskType: SVProgressHUDMaskType.Clear)
  30.  
  31. // Logging to Quickblox REST API and chat.
  32. ServicesManager.instance().logIn(with: currentUser, completion: {
  33. [weak self] (success:Bool, errorMessage: String?) -> Void in
  34.  
  35. guard let strongSelf = self else { onComplete(false, ""); return }
  36.  
  37. /*
  38. guard success else {
  39. //SVProgressHUD.showErrorWithStatus(errorMessage)
  40. return
  41. }*/
  42.  
  43.  
  44. strongSelf.registerForRemoteNotification()
  45.  
  46. //QuickBoxService.getInstance().registerForRemoteNotification();
  47.  
  48. //SVProgressHUD.showSuccessWithStatus("SA_STR_LOGGED_IN".localized)
  49.  
  50. if (ServicesManager.instance().notificationService.pushDialogID != nil) {
  51. //ServicesManager.instance().notificationService.handlePushNotificationWithDelegate(strongSelf)
  52. ServicesManager.instance().notificationService.handlePushNotificationWithDelegate(delegado);
  53. }
  54.  
  55. onComplete(success, (errorMessage==nil ? "" : errorMessage!) );
  56.  
  57. /*
  58. else {
  59. strongSelf.performSegueWithIdentifier("SA_STR_SEGUE_GO_TO_DIALOGS".localized, sender: nil)
  60. }*/
  61. })
  62. }
  63.  
  64. func registerForRemoteNotification() {
  65. // Register for push in iOS 8
  66. if #available(iOS 8.0, *) {
  67. let settings = UIUserNotificationSettings(types: [UIUserNotificationType.alert, UIUserNotificationType.badge, UIUserNotificationType.sound], categories: nil)
  68. UIApplication.shared.registerUserNotificationSettings(settings)
  69. UIApplication.shared.registerForRemoteNotifications()
  70. } else {
  71. // Register for push in iOS 7
  72. UIApplication.shared.registerForRemoteNotifications(matching: [UIRemoteNotificationType.badge, UIRemoteNotificationType.sound, UIRemoteNotificationType.alert])
  73. }
  74. }
  75.  
  76.  
  77. // MARK: Carga de usuarios
  78. func loadUsers(_ onComplete:@escaping (_ exito:Bool,_ mensaje:String)->()){
  79. // Fetching users from cache.
  80. ServicesManager.instance().usersService.loadFromCache().continue({ [weak self] (task : BFTask!) -> AnyObject! in
  81.  
  82. if task.result?.count > 0 {
  83. guard let users = ServicesManager.instance().sortedUsers() else {
  84. print("No cached users")
  85.  
  86. onComplete(false, "sin usuarios locales");
  87.  
  88. return nil
  89. }
  90.  
  91. self!.users = users;
  92.  
  93. onComplete(true, "");
  94.  
  95. } else {
  96.  
  97. //SpringLoadingUtil.addLoading(self.view);
  98.  
  99. // Downloading users from Quickblox.
  100. ServicesManager.instance().downloadCurrentEnvironmentUsers({ (users: [QBUUser]?) -> Void in
  101.  
  102. guard let unwrappedUsers = users else {
  103. //SVProgressHUD.showErrorWithStatus("Sin usuarios")
  104. print("Sin usuarios");
  105.  
  106. onComplete(false, "sin usuarios");
  107. return
  108. }
  109.  
  110. //SpringLoadingUtil.hideLoading(vista);
  111.  
  112. self!.users = unwrappedUsers;
  113. onComplete(true, "");
  114.  
  115. }, errorBlock: { (error: NSError!) -> Void in
  116. onComplete(false, error.localizedDescription);
  117. //SVProgressHUD.showErrorWithStatus(error.localizedDescription)
  118. print("Error (error.localizedDescription)");
  119. })
  120. }
  121.  
  122. return nil;
  123. })
  124. }
  125.  
  126. // MARK: Crear Usuario
  127. func crearUsuario(_ usuario:String,pass:String, _ nombreCompleto:String , onComplete:@escaping (_ exito:Bool, _ mensaje:String, _ user:QBUUser?)->()){
  128.  
  129. let user = QBUUser();
  130. user.login = usuario;
  131. user.password = pass;
  132. user.fullName = nombreCompleto;
  133. user.tags = [Constants.QB_USERS_ENVIROMENT];
  134.  
  135. print("Creando usuario (user)");
  136.  
  137. ServicesManager.instance().authService.signUpAndLogin(with: user) { (response,user )in
  138. if(response.error != nil || user == nil){
  139. print("USUARIO NO CREADO :::: (user)");
  140. onComplete(false, "(response.error)", user);
  141. return;
  142. }
  143. print("USUARIO CREADO EXITOSAMENTE:::: (user)");
  144. onComplete(true, "", user);
  145. }
  146. }
  147.  
  148. // MARK: Actions
  149.  
  150. /**
  151. Login in chat with user and register for remote notifications
  152.  
  153. - parameter user: QBUUser instance
  154. */
  155. func logInChatWithUser(_ user: QBUUser, pass:String, onComplete:@escaping (_ exito:Bool, _ mensaje:String)->() ) {
  156. user.password = pass;
  157.  
  158. // Logging to Quickblox REST API and chat.
  159. ServicesManager.instance().logIn(with: user, completion:{
  160. [unowned self] (success:Bool, errorMessage: String?) -> Void in
  161.  
  162. self.registerForRemoteNotification()
  163.  
  164. onComplete(success, (errorMessage==nil ? "" : errorMessage!) );
  165.  
  166. //self.performSegueWithIdentifier("SA_STR_SEGUE_GO_TO_DIALOGS".localized, sender: nil)
  167. //SVProgressHUD.showSuccessWithStatus("SA_STR_LOGGED_IN".localized)
  168.  
  169. print("Exito envir a sala.");
  170.  
  171. })
  172. }
  173.  
  174.  
  175.  
  176. //MARK: Remove sala
  177.  
  178. func eliminarSalaAhora(_ dialog:QBChatDialog ,onComplete:@escaping (_ exito:Bool, _ mensaje:String)->() ){
  179. let deleteDialogBlock = { (dialog: QBChatDialog!) -> Void in
  180.  
  181. // Deletes dialog from server and cache.
  182. ServicesManager.instance().chatService.deleteDialog(withID: dialog.id!, completion: { (response: QBResponse!) -> Void in
  183.  
  184. guard response.isSuccess else {
  185. print(response.error?.error as Any)
  186.  
  187. if(response.error?.error == nil){
  188. onComplete(false, "");
  189. }
  190. onComplete(false, "(String(describing: response.error?.error))" );
  191.  
  192. return
  193. }
  194.  
  195. onComplete(true, "");
  196. })
  197. }
  198.  
  199. if dialog.type == QBChatDialogType.private {
  200.  
  201. deleteDialogBlock(dialog)
  202.  
  203. } else {
  204.  
  205. // group
  206.  
  207. //let occupantIDs = dialog.occupantIDs!.filter( {_ in 0 != ServicesManager.instance().currentUser()?.id} )
  208. let occupantIDs = dialog.occupantIDs!.filter({ (number) -> Bool in
  209.  
  210. return number.uintValue != ServicesManager.instance().currentUser()?.id
  211. })
  212.  
  213. //dialog.occupantIDs!.filter(<#T##isIncluded: (NSNumber) throws -> Bool##(NSNumber) throws -> Bool#>)
  214. dialog.occupantIDs = occupantIDs
  215. let userLogin = ServicesManager.instance().currentUser()?.login ?? ""
  216.  
  217. let notificationMessage = "Usuario (userLogin) " + " Dejo la conversación"
  218. // Notifies occupants that user left the dialog.
  219. /*ServicesManager.instance().chatService.sendNotificationMessageAboutLeaving(dialog, withNotificationText: notificationMessage, completion: { (error : NSError?) -> Void in
  220. deleteDialogBlock(dialog)
  221. })*/
  222.  
  223. ServicesManager.instance().chatService.sendNotificationMessageAboutLeaving(dialog, withNotificationText: notificationMessage, completion: { (error) -> Void in
  224. deleteDialogBlock(dialog)
  225. })
  226.  
  227. }
  228. }
  229.  
  230. func eliminarSala(_ dialog:QBChatDialog ,onComplete:@escaping (_ exito:Bool, _ mensaje:String)->() ) {
  231. _ = AlertView(title:"Cuidado" , message:"Eliminar conversación?" , cancelButtonTitle: "No", otherButtonTitle: ["Eliminar"], didClick:{ (buttonIndex) -> Void in
  232.  
  233. guard buttonIndex == 1 else {
  234. return
  235. }
  236.  
  237. let deleteDialogBlock = { (dialog: QBChatDialog!) -> Void in
  238.  
  239. // Deletes dialog from server and cache.
  240. ServicesManager.instance().chatService.deleteDialog(withID: dialog.id!, completion: { (response: QBResponse!) -> Void in
  241.  
  242. guard response.isSuccess else {
  243. print(response.error?.error)
  244.  
  245. if(response.error?.error == nil){
  246. onComplete(false, "");
  247. }
  248. onComplete(false, "(response.error?.error)" );
  249.  
  250. return
  251. }
  252.  
  253. onComplete(true, "");
  254. })
  255. }
  256.  
  257. if dialog.type == QBChatDialogType.private {
  258.  
  259. deleteDialogBlock(dialog)
  260.  
  261. } else {
  262.  
  263. // group
  264.  
  265. //let occupantIDs = dialog.occupantIDs!.filter( {$0 != ServicesManager.instance().currentUser()?.id} )
  266.  
  267. let occupantIDs = dialog.occupantIDs!.filter({ (number) -> Bool in
  268.  
  269. return number.uintValue != ServicesManager.instance().currentUser()?.id
  270. })
  271.  
  272. dialog.occupantIDs = occupantIDs
  273. let userLogin = ServicesManager.instance().currentUser()?.login ?? ""
  274.  
  275. let notificationMessage = "Usuario (userLogin) " + " Dejo la conversación"
  276. // Notifies occupants that user left the dialog.
  277. ServicesManager.instance().chatService.sendNotificationMessageAboutLeaving(dialog, withNotificationText: notificationMessage, completion: { (error ) -> Void in
  278. deleteDialogBlock(dialog)
  279. })
  280.  
  281. }
  282. })
  283. }
  284.  
  285.  
  286. // MARK: Abrir SALA
  287.  
  288. func abrirNuevaSala(_ salaName:String, users:[QBUUser], onComplete:@escaping (_ exito:Bool, _ mensaje:String, _ sala:QBChatDialog?)->() ) {
  289.  
  290.  
  291. let completion = {(response: QBResponse?, createdDialog: QBChatDialog?) -> Void in
  292.  
  293. print("createdDialog: (createdDialog) ");
  294.  
  295. if createdDialog == nil {
  296. onComplete(false, "Respuesta vacia", nil);
  297. return;
  298. }
  299.  
  300. guard let unwrappedResponse = response else {
  301. onComplete(false, "Respuesta vacia", nil);
  302. return
  303. }
  304.  
  305. if let error = unwrappedResponse.error {
  306. print(error.error)
  307. //SVProgressHUD.showErrorWithStatus(error.error?.localizedDescription)
  308. onComplete(false, "(error.error)", nil);
  309. }else {
  310. onComplete(true, "", createdDialog! );
  311. //SVProgressHUD.showSuccessWithStatus("STR_DIALOG_CREATED".localized)
  312. }
  313. }
  314.  
  315. createChat(salaName, users: users, completion:completion);
  316.  
  317.  
  318. }
  319.  
  320. func createChat(_ name: String?, users:[QBUUser], completion: ((_ response: QBResponse?, _ createdDialog: QBChatDialog?) -> Void)?) {
  321.  
  322. print("Creando chat (users.count) -- (name)");
  323.  
  324. //SVProgressHUD.showWithStatus("SA_STR_LOADING".localized, maskType: SVProgressHUDMaskType.Clear)
  325.  
  326. if users.count == 1 {
  327. // Creating private chat.
  328.  
  329. ServicesManager.instance().chatService.createPrivateChatDialog(withOpponent: users.first!, completion: { (response: QBResponse?, chatDialog: QBChatDialog?) -> Void in
  330.  
  331. completion?(response, chatDialog)
  332. })
  333.  
  334. } else {
  335. // Creating group chat.
  336.  
  337. ServicesManager.instance().chatService.createGroupChatDialog(withName: name, photo: nil, occupants: users) { [weak self] (response: QBResponse, chatDialog: QBChatDialog?) -> Void in
  338.  
  339.  
  340. guard response.error == nil else {
  341.  
  342. //SVProgressHUD.showErrorWithStatus(response.error?.error?.localizedDescription)
  343. return
  344. }
  345.  
  346. guard let unwrappedDialog = chatDialog else {
  347. return
  348. }
  349.  
  350. guard let dialogOccupants = chatDialog?.occupantIDs else {
  351. print("Chat dialog has not occupants")
  352. return
  353. }
  354.  
  355. guard let strongSelf = self else { return }
  356.  
  357. let notificationText = strongSelf.updatedMessageWithUsers(users, isNewDialog: true)
  358.  
  359. /*ServicesManager.instance().chatService.sendSystemMessageAboutAdding(to: unwrappedDialog, toUsersIDs: dialogOccupants, withText:notificationText, completion: { (error: NSError?) -> Void in
  360.  
  361. ServicesManager.instance().chatService.sendNotificationMessageAboutAddingOccupants(dialogOccupants, to: unwrappedDialog, withNotificationText: notificationText)
  362.  
  363. completion?(response: response, createdDialog: unwrappedDialog)
  364. })*/
  365.  
  366. ServicesManager.instance().chatService.sendSystemMessageAboutAdding(to: unwrappedDialog, toUsersIDs: dialogOccupants, withText: notificationText, completion: { (error) in
  367.  
  368. ServicesManager.instance().chatService.sendNotificationMessageAboutAddingOccupants(dialogOccupants, to: unwrappedDialog, withNotificationText: notificationText)
  369.  
  370. print(unwrappedDialog)
  371.  
  372. completion?(response, unwrappedDialog)
  373. })
  374.  
  375. }
  376. }
  377. }
  378.  
  379. /**
  380. Creates string Login1 added login2, login3
  381.  
  382. - parameter users: [QBUUser] instance
  383.  
  384. - returns: String instance
  385. */
  386. func updatedMessageWithUsers(_ users: [QBUUser],isNewDialog:Bool) -> String {
  387.  
  388. //let dialogMessage = isNewDialog ? "creo la sala ": "Agrego "
  389. let dialogMessage = "Inicia chat "
  390.  
  391. //var message: String = "(QBSession.current().currentUser!.login!) " + dialogMessage + " "
  392. //var message: String = "(QBSession.current().currentUser!.customData!) " + dialogMessage + " "
  393. //var message: String = "(DatosSesion.getUsuarioSesion()) " + dialogMessage + " "
  394.  
  395. var message: String = "(LoginController.usuario.nombre!) " + dialogMessage + " "
  396.  
  397. QBSession.current().currentUser!.customData = DatosSesion.getUsuarioSesion()
  398.  
  399. //var message = "(String(describing: QBSession.current().currentUser!.login)) " + dialogMessage + " "
  400. //var message = "(QBSession.current().currentUser!.login!) (dialogMessage) "
  401. print(message)
  402. //for user: QBUUser in users {
  403. //message = "(message)(String(describing: user.login)),"
  404. // message = ""+message+String(describing: user.login!)+"),"
  405. //}
  406. print(message)
  407. message = message.substring(to: message.characters.index(before: message.endIndex))
  408.  
  409. print(message)
  410. return message
  411. }
  412.  
  413. // MARK: - DataSource Action
  414.  
  415. func consultaSalas(_ onComplete:@escaping (_ exito:Bool, _ mensaje:String)->() ) {
  416.  
  417. if let lastActivityDate = ServicesManager.instance().lastActivityDate {
  418.  
  419.  
  420. ServicesManager.instance().chatService.fetchDialogsUpdated(from: lastActivityDate, andPageLimit: kDialogsPageLimit, iterationBlock: { (response: QBResponse?, dialogObjects: [QBChatDialog]?, dialogsUsersIDs: Set<NSNumber>?, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
  421.  
  422. }, completionBlock: { (response: QBResponse?) -> Void in
  423.  
  424. print("GET DIALOGS BLOCK !");
  425.  
  426. //self.reloadTableViewIfNeeded();
  427.  
  428. guard let unwrappedResponse = response else {
  429. print("fetchDialogsUpdatedFromDate error")
  430. onComplete(false, "Error en la fecha");
  431. return
  432. }
  433.  
  434. guard unwrappedResponse.isSuccess else {
  435. print("fetchDialogsUpdatedFromDate error (response)")
  436. onComplete(false, "Error en la respuesta");
  437. return
  438. }
  439.  
  440. ServicesManager.instance().lastActivityDate = Date()
  441.  
  442. onComplete(true, "");
  443. })
  444. }
  445. else {
  446.  
  447.  
  448. ServicesManager.instance().chatService.allDialogs(withPageLimit: kDialogsPageLimit, extendedRequest: nil, iterationBlock: { (response: QBResponse?, dialogObjects: [QBChatDialog]?, dialogsUsersIDS: Set<NSNumber>?, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
  449.  
  450. }, completion: { (response: QBResponse?) -> Void in
  451.  
  452. guard response != nil && response!.isSuccess else {
  453. print("Error al obtener dialogos");
  454.  
  455. onComplete(false, "Error al obtener dialogos");
  456. return
  457. }
  458.  
  459. //SVProgressHUD.showSuccessWithStatus("SA_STR_COMPLETED".localized)
  460. print("EXITO al obtener dialogos");
  461. ServicesManager.instance().lastActivityDate = Date()
  462.  
  463. onComplete(true, "");
  464. })
  465.  
  466. }
  467. }
  468.  
  469. open class NotificacionDelegate:NSObject, NotificationServiceDelegate {
  470. var vc:UIViewController!;
  471.  
  472. init(vc:UIViewController){
  473. self.vc = vc;
  474. }
  475.  
  476.  
  477. // MARK: NotificationServiceDelegate protocol
  478.  
  479. func notificationServiceDidStartLoadingDialogFromServer() {
  480. //SVProgressHUD.showWithStatus("SA_STR_LOADING_DIALOG".localized, maskType: SVProgressHUDMaskType.Clear)
  481. SpringLoadingUtil.addLoading(vc.view);
  482. }
  483.  
  484. func notificationServiceDidFinishLoadingDialogFromServer() {
  485. //SVProgressHUD.dismiss()
  486. SpringLoadingUtil.hideLoading(vc.view);
  487. }
  488.  
  489. func notificationServiceDidSucceedFetchingDialog(_ chatDialog: QBChatDialog!) {
  490.  
  491. print("NotificacionDelegate Enviar a chat....");
  492.  
  493. /*
  494. let dialogsController = vc.storyboard?.instantiateViewControllerWithIdentifier("DialogsViewController") as! DialogsViewController
  495.  
  496. let chatController = vc.storyboard?.instantiateViewControllerWithIdentifier("CustomChatController") as! CustomChatController
  497. chatController.dialog = chatDialog
  498.  
  499. vc.navigationController?.viewControllers = [dialogsController, chatController]
  500. */
  501. }
  502.  
  503. func notificationServiceDidFailFetchingDialog() {
  504. print("notificationServiceDidFailFetchingDialog");
  505. //vc.performSegueWithIdentifier("SA_STR_SEGUE_GO_TO_DIALOGS".localized, sender: nil)
  506. }
Add Comment
Please, Sign In to add comment