Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class QuickBoxService:NSObject {
- fileprivate static var instance:QuickBoxService!;
- var users : [QBUUser] = [];
- class func getInstance() -> QuickBoxService {
- if(instance == nil){
- instance = QuickBoxService();
- }
- return instance;
- }
- fileprivate override init(){
- super.init();
- }
- //MARK: AUtenticar
- func autenticar(_ delegado:NotificationServiceDelegate, pass:String, onComplete:@escaping (_ exito:Bool, _ mensaje:String)->() ){
- guard let currentUser = ServicesManager.instance().currentUser() else {
- onComplete(true, "");
- return
- }
- currentUser.password = pass
- //SVProgressHUD.showWithStatus("SA_STR_LOGGING_IN_AS".localized + currentUser.login!, maskType: SVProgressHUDMaskType.Clear)
- // Logging to Quickblox REST API and chat.
- ServicesManager.instance().logIn(with: currentUser, completion: {
- [weak self] (success:Bool, errorMessage: String?) -> Void in
- guard let strongSelf = self else { onComplete(false, ""); return }
- /*
- guard success else {
- //SVProgressHUD.showErrorWithStatus(errorMessage)
- return
- }*/
- strongSelf.registerForRemoteNotification()
- //QuickBoxService.getInstance().registerForRemoteNotification();
- //SVProgressHUD.showSuccessWithStatus("SA_STR_LOGGED_IN".localized)
- if (ServicesManager.instance().notificationService.pushDialogID != nil) {
- //ServicesManager.instance().notificationService.handlePushNotificationWithDelegate(strongSelf)
- ServicesManager.instance().notificationService.handlePushNotificationWithDelegate(delegado);
- }
- onComplete(success, (errorMessage==nil ? "" : errorMessage!) );
- /*
- else {
- strongSelf.performSegueWithIdentifier("SA_STR_SEGUE_GO_TO_DIALOGS".localized, sender: nil)
- }*/
- })
- }
- func registerForRemoteNotification() {
- // Register for push in iOS 8
- if #available(iOS 8.0, *) {
- let settings = UIUserNotificationSettings(types: [UIUserNotificationType.alert, UIUserNotificationType.badge, UIUserNotificationType.sound], categories: nil)
- UIApplication.shared.registerUserNotificationSettings(settings)
- UIApplication.shared.registerForRemoteNotifications()
- } else {
- // Register for push in iOS 7
- UIApplication.shared.registerForRemoteNotifications(matching: [UIRemoteNotificationType.badge, UIRemoteNotificationType.sound, UIRemoteNotificationType.alert])
- }
- }
- // MARK: Carga de usuarios
- func loadUsers(_ onComplete:@escaping (_ exito:Bool,_ mensaje:String)->()){
- // Fetching users from cache.
- ServicesManager.instance().usersService.loadFromCache().continue({ [weak self] (task : BFTask!) -> AnyObject! in
- if task.result?.count > 0 {
- guard let users = ServicesManager.instance().sortedUsers() else {
- print("No cached users")
- onComplete(false, "sin usuarios locales");
- return nil
- }
- self!.users = users;
- onComplete(true, "");
- } else {
- //SpringLoadingUtil.addLoading(self.view);
- // Downloading users from Quickblox.
- ServicesManager.instance().downloadCurrentEnvironmentUsers({ (users: [QBUUser]?) -> Void in
- guard let unwrappedUsers = users else {
- //SVProgressHUD.showErrorWithStatus("Sin usuarios")
- print("Sin usuarios");
- onComplete(false, "sin usuarios");
- return
- }
- //SpringLoadingUtil.hideLoading(vista);
- self!.users = unwrappedUsers;
- onComplete(true, "");
- }, errorBlock: { (error: NSError!) -> Void in
- onComplete(false, error.localizedDescription);
- //SVProgressHUD.showErrorWithStatus(error.localizedDescription)
- print("Error (error.localizedDescription)");
- })
- }
- return nil;
- })
- }
- // MARK: Crear Usuario
- func crearUsuario(_ usuario:String,pass:String, _ nombreCompleto:String , onComplete:@escaping (_ exito:Bool, _ mensaje:String, _ user:QBUUser?)->()){
- let user = QBUUser();
- user.login = usuario;
- user.password = pass;
- user.fullName = nombreCompleto;
- user.tags = [Constants.QB_USERS_ENVIROMENT];
- print("Creando usuario (user)");
- ServicesManager.instance().authService.signUpAndLogin(with: user) { (response,user )in
- if(response.error != nil || user == nil){
- print("USUARIO NO CREADO :::: (user)");
- onComplete(false, "(response.error)", user);
- return;
- }
- print("USUARIO CREADO EXITOSAMENTE:::: (user)");
- onComplete(true, "", user);
- }
- }
- // MARK: Actions
- /**
- Login in chat with user and register for remote notifications
- - parameter user: QBUUser instance
- */
- func logInChatWithUser(_ user: QBUUser, pass:String, onComplete:@escaping (_ exito:Bool, _ mensaje:String)->() ) {
- user.password = pass;
- // Logging to Quickblox REST API and chat.
- ServicesManager.instance().logIn(with: user, completion:{
- [unowned self] (success:Bool, errorMessage: String?) -> Void in
- self.registerForRemoteNotification()
- onComplete(success, (errorMessage==nil ? "" : errorMessage!) );
- //self.performSegueWithIdentifier("SA_STR_SEGUE_GO_TO_DIALOGS".localized, sender: nil)
- //SVProgressHUD.showSuccessWithStatus("SA_STR_LOGGED_IN".localized)
- print("Exito envir a sala.");
- })
- }
- //MARK: Remove sala
- func eliminarSalaAhora(_ dialog:QBChatDialog ,onComplete:@escaping (_ exito:Bool, _ mensaje:String)->() ){
- let deleteDialogBlock = { (dialog: QBChatDialog!) -> Void in
- // Deletes dialog from server and cache.
- ServicesManager.instance().chatService.deleteDialog(withID: dialog.id!, completion: { (response: QBResponse!) -> Void in
- guard response.isSuccess else {
- print(response.error?.error as Any)
- if(response.error?.error == nil){
- onComplete(false, "");
- }
- onComplete(false, "(String(describing: response.error?.error))" );
- return
- }
- onComplete(true, "");
- })
- }
- if dialog.type == QBChatDialogType.private {
- deleteDialogBlock(dialog)
- } else {
- // group
- //let occupantIDs = dialog.occupantIDs!.filter( {_ in 0 != ServicesManager.instance().currentUser()?.id} )
- let occupantIDs = dialog.occupantIDs!.filter({ (number) -> Bool in
- return number.uintValue != ServicesManager.instance().currentUser()?.id
- })
- //dialog.occupantIDs!.filter(<#T##isIncluded: (NSNumber) throws -> Bool##(NSNumber) throws -> Bool#>)
- dialog.occupantIDs = occupantIDs
- let userLogin = ServicesManager.instance().currentUser()?.login ?? ""
- let notificationMessage = "Usuario (userLogin) " + " Dejo la conversación"
- // Notifies occupants that user left the dialog.
- /*ServicesManager.instance().chatService.sendNotificationMessageAboutLeaving(dialog, withNotificationText: notificationMessage, completion: { (error : NSError?) -> Void in
- deleteDialogBlock(dialog)
- })*/
- ServicesManager.instance().chatService.sendNotificationMessageAboutLeaving(dialog, withNotificationText: notificationMessage, completion: { (error) -> Void in
- deleteDialogBlock(dialog)
- })
- }
- }
- func eliminarSala(_ dialog:QBChatDialog ,onComplete:@escaping (_ exito:Bool, _ mensaje:String)->() ) {
- _ = AlertView(title:"Cuidado" , message:"Eliminar conversación?" , cancelButtonTitle: "No", otherButtonTitle: ["Eliminar"], didClick:{ (buttonIndex) -> Void in
- guard buttonIndex == 1 else {
- return
- }
- let deleteDialogBlock = { (dialog: QBChatDialog!) -> Void in
- // Deletes dialog from server and cache.
- ServicesManager.instance().chatService.deleteDialog(withID: dialog.id!, completion: { (response: QBResponse!) -> Void in
- guard response.isSuccess else {
- print(response.error?.error)
- if(response.error?.error == nil){
- onComplete(false, "");
- }
- onComplete(false, "(response.error?.error)" );
- return
- }
- onComplete(true, "");
- })
- }
- if dialog.type == QBChatDialogType.private {
- deleteDialogBlock(dialog)
- } else {
- // group
- //let occupantIDs = dialog.occupantIDs!.filter( {$0 != ServicesManager.instance().currentUser()?.id} )
- let occupantIDs = dialog.occupantIDs!.filter({ (number) -> Bool in
- return number.uintValue != ServicesManager.instance().currentUser()?.id
- })
- dialog.occupantIDs = occupantIDs
- let userLogin = ServicesManager.instance().currentUser()?.login ?? ""
- let notificationMessage = "Usuario (userLogin) " + " Dejo la conversación"
- // Notifies occupants that user left the dialog.
- ServicesManager.instance().chatService.sendNotificationMessageAboutLeaving(dialog, withNotificationText: notificationMessage, completion: { (error ) -> Void in
- deleteDialogBlock(dialog)
- })
- }
- })
- }
- // MARK: Abrir SALA
- func abrirNuevaSala(_ salaName:String, users:[QBUUser], onComplete:@escaping (_ exito:Bool, _ mensaje:String, _ sala:QBChatDialog?)->() ) {
- let completion = {(response: QBResponse?, createdDialog: QBChatDialog?) -> Void in
- print("createdDialog: (createdDialog) ");
- if createdDialog == nil {
- onComplete(false, "Respuesta vacia", nil);
- return;
- }
- guard let unwrappedResponse = response else {
- onComplete(false, "Respuesta vacia", nil);
- return
- }
- if let error = unwrappedResponse.error {
- print(error.error)
- //SVProgressHUD.showErrorWithStatus(error.error?.localizedDescription)
- onComplete(false, "(error.error)", nil);
- }else {
- onComplete(true, "", createdDialog! );
- //SVProgressHUD.showSuccessWithStatus("STR_DIALOG_CREATED".localized)
- }
- }
- createChat(salaName, users: users, completion:completion);
- }
- func createChat(_ name: String?, users:[QBUUser], completion: ((_ response: QBResponse?, _ createdDialog: QBChatDialog?) -> Void)?) {
- print("Creando chat (users.count) -- (name)");
- //SVProgressHUD.showWithStatus("SA_STR_LOADING".localized, maskType: SVProgressHUDMaskType.Clear)
- if users.count == 1 {
- // Creating private chat.
- ServicesManager.instance().chatService.createPrivateChatDialog(withOpponent: users.first!, completion: { (response: QBResponse?, chatDialog: QBChatDialog?) -> Void in
- completion?(response, chatDialog)
- })
- } else {
- // Creating group chat.
- ServicesManager.instance().chatService.createGroupChatDialog(withName: name, photo: nil, occupants: users) { [weak self] (response: QBResponse, chatDialog: QBChatDialog?) -> Void in
- guard response.error == nil else {
- //SVProgressHUD.showErrorWithStatus(response.error?.error?.localizedDescription)
- return
- }
- guard let unwrappedDialog = chatDialog else {
- return
- }
- guard let dialogOccupants = chatDialog?.occupantIDs else {
- print("Chat dialog has not occupants")
- return
- }
- guard let strongSelf = self else { return }
- let notificationText = strongSelf.updatedMessageWithUsers(users, isNewDialog: true)
- /*ServicesManager.instance().chatService.sendSystemMessageAboutAdding(to: unwrappedDialog, toUsersIDs: dialogOccupants, withText:notificationText, completion: { (error: NSError?) -> Void in
- ServicesManager.instance().chatService.sendNotificationMessageAboutAddingOccupants(dialogOccupants, to: unwrappedDialog, withNotificationText: notificationText)
- completion?(response: response, createdDialog: unwrappedDialog)
- })*/
- ServicesManager.instance().chatService.sendSystemMessageAboutAdding(to: unwrappedDialog, toUsersIDs: dialogOccupants, withText: notificationText, completion: { (error) in
- ServicesManager.instance().chatService.sendNotificationMessageAboutAddingOccupants(dialogOccupants, to: unwrappedDialog, withNotificationText: notificationText)
- print(unwrappedDialog)
- completion?(response, unwrappedDialog)
- })
- }
- }
- }
- /**
- Creates string Login1 added login2, login3
- - parameter users: [QBUUser] instance
- - returns: String instance
- */
- func updatedMessageWithUsers(_ users: [QBUUser],isNewDialog:Bool) -> String {
- //let dialogMessage = isNewDialog ? "creo la sala ": "Agrego "
- let dialogMessage = "Inicia chat "
- //var message: String = "(QBSession.current().currentUser!.login!) " + dialogMessage + " "
- //var message: String = "(QBSession.current().currentUser!.customData!) " + dialogMessage + " "
- //var message: String = "(DatosSesion.getUsuarioSesion()) " + dialogMessage + " "
- var message: String = "(LoginController.usuario.nombre!) " + dialogMessage + " "
- QBSession.current().currentUser!.customData = DatosSesion.getUsuarioSesion()
- //var message = "(String(describing: QBSession.current().currentUser!.login)) " + dialogMessage + " "
- //var message = "(QBSession.current().currentUser!.login!) (dialogMessage) "
- print(message)
- //for user: QBUUser in users {
- //message = "(message)(String(describing: user.login)),"
- // message = ""+message+String(describing: user.login!)+"),"
- //}
- print(message)
- message = message.substring(to: message.characters.index(before: message.endIndex))
- print(message)
- return message
- }
- // MARK: - DataSource Action
- func consultaSalas(_ onComplete:@escaping (_ exito:Bool, _ mensaje:String)->() ) {
- if let lastActivityDate = ServicesManager.instance().lastActivityDate {
- ServicesManager.instance().chatService.fetchDialogsUpdated(from: lastActivityDate, andPageLimit: kDialogsPageLimit, iterationBlock: { (response: QBResponse?, dialogObjects: [QBChatDialog]?, dialogsUsersIDs: Set<NSNumber>?, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
- }, completionBlock: { (response: QBResponse?) -> Void in
- print("GET DIALOGS BLOCK !");
- //self.reloadTableViewIfNeeded();
- guard let unwrappedResponse = response else {
- print("fetchDialogsUpdatedFromDate error")
- onComplete(false, "Error en la fecha");
- return
- }
- guard unwrappedResponse.isSuccess else {
- print("fetchDialogsUpdatedFromDate error (response)")
- onComplete(false, "Error en la respuesta");
- return
- }
- ServicesManager.instance().lastActivityDate = Date()
- onComplete(true, "");
- })
- }
- else {
- ServicesManager.instance().chatService.allDialogs(withPageLimit: kDialogsPageLimit, extendedRequest: nil, iterationBlock: { (response: QBResponse?, dialogObjects: [QBChatDialog]?, dialogsUsersIDS: Set<NSNumber>?, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
- }, completion: { (response: QBResponse?) -> Void in
- guard response != nil && response!.isSuccess else {
- print("Error al obtener dialogos");
- onComplete(false, "Error al obtener dialogos");
- return
- }
- //SVProgressHUD.showSuccessWithStatus("SA_STR_COMPLETED".localized)
- print("EXITO al obtener dialogos");
- ServicesManager.instance().lastActivityDate = Date()
- onComplete(true, "");
- })
- }
- }
- open class NotificacionDelegate:NSObject, NotificationServiceDelegate {
- var vc:UIViewController!;
- init(vc:UIViewController){
- self.vc = vc;
- }
- // MARK: NotificationServiceDelegate protocol
- func notificationServiceDidStartLoadingDialogFromServer() {
- //SVProgressHUD.showWithStatus("SA_STR_LOADING_DIALOG".localized, maskType: SVProgressHUDMaskType.Clear)
- SpringLoadingUtil.addLoading(vc.view);
- }
- func notificationServiceDidFinishLoadingDialogFromServer() {
- //SVProgressHUD.dismiss()
- SpringLoadingUtil.hideLoading(vc.view);
- }
- func notificationServiceDidSucceedFetchingDialog(_ chatDialog: QBChatDialog!) {
- print("NotificacionDelegate Enviar a chat....");
- /*
- let dialogsController = vc.storyboard?.instantiateViewControllerWithIdentifier("DialogsViewController") as! DialogsViewController
- let chatController = vc.storyboard?.instantiateViewControllerWithIdentifier("CustomChatController") as! CustomChatController
- chatController.dialog = chatDialog
- vc.navigationController?.viewControllers = [dialogsController, chatController]
- */
- }
- func notificationServiceDidFailFetchingDialog() {
- print("notificationServiceDidFailFetchingDialog");
- //vc.performSegueWithIdentifier("SA_STR_SEGUE_GO_TO_DIALOGS".localized, sender: nil)
- }
Add Comment
Please, Sign In to add comment