/// <summary>
        ///		Modifica el estado del usuario
        /// </summary>
        private void ChangeUserStatus(string newStatus)
        {
            JabberConnection connection = Tree.GetSelectedConnection();

            if (connection != null)
            {
                if (newStatus.EqualsIgnoreCase("Away"))
                {
                    connection.SetStatus(JabberContactStatus.Availability.Away, null);
                }
                else if (newStatus.EqualsIgnoreCase("Chat"))
                {
                    connection.SetStatus(JabberContactStatus.Availability.Chat, null);
                }
                else if (newStatus.EqualsIgnoreCase("Dnd"))
                {
                    connection.SetStatus(JabberContactStatus.Availability.Dnd, null);
                }
                else if (newStatus.EqualsIgnoreCase("Offline"))
                {
                    connection.SetStatus(JabberContactStatus.Availability.Offline, null);
                }
                else if (newStatus.EqualsIgnoreCase("Online"))
                {
                    connection.SetStatus(JabberContactStatus.Availability.Online, null);
                }
                else if (newStatus.EqualsIgnoreCase("Xa"))
                {
                    connection.SetStatus(JabberContactStatus.Availability.Xa, null);
                }
            }
        }
Пример #2
0
 /// <summary>
 ///		Cambia el estado del usuario
 /// </summary>
 private void SetUserStatus(JabberConnection connection, JabberContactStatus.Availability status, string message)
 {
     if (connection.Host.EqualsTo(Connection.Host) && connection.User.EqualsTo(Connection.User))
     {
         ShowStatus(Connection.User, status, null);
     }
 }
        /// <summary>
        ///		Comprueba si se puede ejecutar una acción
        /// </summary>
        protected override bool CanExecuteAction(string action, object parameter)
        {
            JabberConnection     connection  = Tree.GetSelectedConnection();
            ContactNodeViewModel nodeContact = Tree.GetSelectedContact();

            switch (action)
            {
            case nameof(NewContactCommand):
            case nameof(NewGroupCommand):
                return((connection != null && connection.IsConnected) || nodeContact != null || Tree.GetSelectedGroup() != null);

            case nameof(DeleteCommand):
                return(connection != null || nodeContact != null);

            case nameof(StartChatCommand):
                return(connection != null);

            case nameof(ConnectCommand):
                return(connection != null && !connection.IsConnected);

            case nameof(DisconnectCommand):
            case nameof(SetUserStatusCommand):
                return(connection != null && connection.IsConnected);

            case nameof(RefreshCommand):
                return(true);

            default:
                return(false);
            }
        }
 /// <summary>
 ///		Abre una ventana de chat
 /// </summary>
 private void OpenChatWindow(JabberConnection connection, JabberContact contact, string message)
 {
     if (XmppClient.ChatsOpen.Add(connection, contact))
     {
         BauMessengerViewModel.Instance.ViewsController.OpenChatView(new Chat.ChatViewModel(connection, contact, message));
     }
 }
 /// <summary>
 ///		Trata el cambio de estado del usuario
 /// </summary>
 private void SetUserStatus(JabberConnection connection, JabberContactStatus.Availability status, string message)
 {
     IsStatusAway   = status == JabberContactStatus.Availability.Away;
     IsStatusChat   = status == JabberContactStatus.Availability.Chat;
     IsStatusDnd    = status == JabberContactStatus.Availability.Dnd;
     IsStatusOnline = status == JabberContactStatus.Availability.Online;
     IsStatusXa     = status == JabberContactStatus.Availability.Xa;
 }
 public ConnectionNodeViewModel(JabberConnection connection)
     : base($"{connection.Host.Address}_{connection.User.FullJid}",
            $"{connection.User.FullJid} - {connection.Host.Address}", connection, null, true)
 {
     Connection  = connection;
     IsBold      = true;
     IsConnected = connection.IsConnected;
     SetImage(connection.IsConnected);
 }
        /// <summary>
        ///		Elimina un chat de la colección
        /// </summary>
        internal void Remove(JabberConnection connection, JabberContact contact)
        {
            int index = IndexOf(connection, contact);

            if (index >= 0)
            {
                Chats.RemoveAt(index);
            }
        }
Пример #8
0
 public ContactViewModel(JabberConnection connection, JabberContact contact)
 {
     // Guarda las propiedades
     Connection = connection;
     Contact    = contact;
     // Asigna las propiedades del contacto
     if (contact != null)
     {
         Jid      = contact.Jid;
         NickName = contact.Name;
     }
 }
        /// <summary>
        ///		Añade una conexión
        /// </summary>
        internal bool Add(JabberConnection connection, JabberContact contact)
        {
            bool added = false;

            // Añade el chat si no existía
            if (!Exists(connection, contact))
            {
                // Añade el chat
                Chats.Add(GetKey(connection, contact));
                // Indica que se ha añadido
                added = true;
            }
            // Devuelve el valor que indica si se ha añadido
            return(added);
        }
        /// <summary>
        ///		Obtiene el índice de una conexión
        /// </summary>
        internal int IndexOf(JabberConnection connection, JabberContact contact)
        {
            string key = GetKey(connection, contact);

            // Busca el índice
            for (int index = 0; index < Chats.Count; index++)
            {
                if (Chats[index].EqualsIgnoreCase(key))
                {
                    return(index);
                }
            }
            // Si ha llegado hasta aquí es porque no ha encontrado nada
            return(-1);
        }
        /// <summary>
        ///		Conecta
        /// </summary>
        private void Connect()
        {
            JabberConnection connection = Tree.GetSelectedConnection();

            if (connection != null)
            {
                try
                {
                    connection.Connect();
                }
                catch (Exception exception)
                {
                    BauMessengerViewModel.Instance.ControllerWindow.ShowMessage($"No se puede conectar al servidor.{Environment.NewLine}{exception.Message}");
                }
            }
        }
        /// <summary>
        ///		Elimina un contacto
        /// </summary>
        private void DeleteContact(ContactNodeViewModel nodeContact)
        {
            if (nodeContact != null &&
                BauMessengerViewModel.Instance.ControllerWindow.ShowQuestion($"¿Realmente desea eliminar el contacto {nodeContact.Contact.FullJid}?"))
            {
                JabberConnection connection = nodeContact.GetConnectionNode()?.Connection;

                if (connection == null)
                {
                    BauMessengerViewModel.Instance.ControllerWindow.ShowMessage("No se encuentra la conexión del contacto");
                }
                else
                {
                    connection.DeleteContact(nodeContact.Contact);
                }
            }
        }
 /// <summary>
 ///		Elimina una conexión
 /// </summary>
 private void DeleteConnection(JabberConnection connection)
 {
     if (connection != null &&
         BauMessengerViewModel.Instance.ControllerWindow.ShowQuestion
             ($"¿Realmente desea eliminar la conexión con el servidor {connection.Host.Address} del usuario {connection.User.FullJid}?"))
     {
         if (!XmppClient.ManagerJabber.Connections.Remove(connection))
         {
             BauMessengerViewModel.Instance.ControllerWindow.ShowMessage("No se ha podido eliminar la conexión");
         }
         else
         {
             // Graba la configuración
             SaveConfiguration();
             // ... y actualiza el árbol
             Tree.LoadNodes();
         }
     }
 }
Пример #14
0
 public ChatViewModel(JabberConnection connection, JabberContact contact, string message) : base(false)
 {
     // Inicializa las propiedades
     Connection = connection;
     Contact    = contact;
     // Inicializa los comandos
     SendMessageCommand = new BaseCommand("Enviar mensaje",
                                          parameter => ExecuteAction(nameof(SendMessageCommand), parameter),
                                          parameter => CanExecuteAction(nameof(SendMessageCommand), parameter))
                          .AddListener(this, nameof(MessageToSend));
     // Inicializa la variable que actúa como manager de XMPP en el árbol
     XmppClient = BauMessengerViewModel.Instance.BauMessenger;
     // Añade los manejadores de eventos
     XmppClient.ManagerJabber.MessageReceived   += (sender, evntArgs) => TreatMessageReceived(evntArgs.Contact, evntArgs.Body);
     XmppClient.ManagerJabber.ChangedStatus     += (sender, evntArgs) => TreatChangedStatus(evntArgs);
     XmppClient.ManagerJabber.ChangedUserStatus += (sender, evntArgs) => SetUserStatus(evntArgs.Connection, evntArgs.User.Status.Status, evntArgs.User.Status.Message);
     // Añade el mensaje inicial
     if (!message.IsEmpty())
     {
         ShowMessage(Contact, message);
     }
 }
        /// <summary>
        ///		Abre la ventana de propiedades de un contacto
        /// </summary>
        private void OpenPropertiesNewContact()
        {
            BaseNodeViewModel node = Tree.GetSelectedNode();

            if (node == null)
            {
                BauMessengerViewModel.Instance.ControllerWindow.ShowMessage("Seleccione una conexión en el árbol");
            }
            else
            {
                JabberConnection connection = node.GetConnectionNode()?.Connection;

                if (connection == null)
                {
                    BauMessengerViewModel.Instance.ControllerWindow.ShowMessage("Seleccione una conexión en el árbol");
                }
                else
                {
                    BauMessengerViewModel.Instance.ViewsController.OpenPropertiesContact
                        (new Contacts.ContactViewModel(connection, null));
                }
            }
        }
Пример #16
0
 /// <summary>
 ///		Obtiene el índice de la ficha con el chat de un contacto
 /// </summary>
 private int GetChatTabIndex(JabberConnection objConnection, JabberContact objContact)
 {
     return GetChatTabIndex(GetChatKey(objConnection, objContact));
 }
Пример #17
0
 /// <summary>
 ///		Elimina un contacto
 /// </summary>
 private void RemoveContact(JabberConnection objConnection, JabberContact objContact)
 {
     if (objConnection != null)
         { if (objContact != null)
                 { if (Bau.Controls.Forms.Helper.ShowQuestion(ParentForm, $"¿Realmente desea eliminar al contacto {objContact.FullName}?"))
                         objConnection.DeleteContact(objContact);
                 }
             else if (Bau.Controls.Forms.Helper.ShowQuestion(ParentForm, $"¿Realmente desea eliminar la conexión {objConnection.Host.Address} - usuario {objConnection.User.Login}"))
                 { // Desconecta la conexión
                         objConnection.Disconnect();
                     // Elimina la conexión
                         Manager.Connections.Remove(objConnection);
                     // Actualiza el árbol
                         LoadContacts(Manager);
                 }
         }
 }
Пример #18
0
 /// <summary>
 ///		Obtiene la imagen asociada a una conexión
 /// </summary>
 private ImageKey GetImage(JabberConnection objConnection)
 {
     if (objConnection.IsConnected)
         return ImageKey.Connection;
     else
         return ImageKey.ServerDisconnected;
 }
 /// <summary>
 ///		Obtiene la clave del chat
 /// </summary>
 private string GetKey(JabberConnection connection, JabberContact contact)
 {
     return($"{connection.Host.Address}_{connection.User.Jid}_{contact.Jid}");
 }
Пример #20
0
 /// <summary>
 ///		Modifica el estado del usuario
 /// </summary>
 private void SetUserStatus(JabberConnection objConnection, JabberContactStatus.Availability intNewStatus, string strText)
 {
     if (objConnection != null)
         try
             { // Envía el nuevo estado
                     if (objConnection.User.Status.Status != intNewStatus)
                         { // Si no está conectado, conecta
                                 if (!objConnection.IsConnected)
                                     objConnection.Connect();
                             // Envía el estado
                                 objConnection.SetStatus(intNewStatus, strText);
                             // Actualiza el árbol de contactos
                                 LoadListContacts();
                             // Muestra el mensaje
                                 LogContact(objConnection.User);
                                 LogMessage($">> Cambio de estado del usuario {objConnection.User.FullName} --> {intNewStatus} [{strText}]");
                                 LogEnd();
                         }
             }
         catch (Exception objException)
             { LogContact(objConnection.User);
                 LogMessage($">> Error en la conexión {objException.Message}");
                 LogEnd();
                 Bau.Controls.Forms.Helper.ShowMessage(this, $"Error en la conexión {objException.Message}");
             }
 }
 /// <summary>
 ///		Comprueba si existe una conexión
 /// </summary>
 internal bool Exists(JabberConnection connection, JabberContact contact)
 {
     return(IndexOf(connection, contact) >= 0);
 }
Пример #22
0
 /// <summary>
 ///		Inicializa el control
 /// </summary>
 public void InitControl(JabberConnection objConnection, JabberContact objContact)
 {
     Connection = objConnection;
     Contact = objContact;
 }
Пример #23
0
        /// <summary>
        ///		Prepara el formulario para enviar un mensaje de chat
        /// </summary>
        private UC.Chat PrepareChat(JabberConnection objConnection, JabberContact objContact)
        {
            UC.Chat udtChat = null;

                // Añade u obtiene el control de chat adecuado
                    if (objConnection != null && objContact != null)
                        { int intIndex = GetChatTabIndex(objConnection, objContact);

                                if (intIndex >= 0)
                                    { // Selecciona el tab de chat
                                            tabChat.SelectedIndex = intIndex;
                                        // Obtiene el control
                                            foreach (Control ctlControl in tabChat.TabPages[intIndex].Controls)
                                                if (ctlControl is UC.Chat)
                                                    udtChat = ctlControl as UC.Chat;
                                    }
                                else
                                    { string strKey = GetChatKey(objConnection, objContact);

                                            // Crea un nuevo control de chat
                                                udtChat = new UC.Chat();
                                            // Inicaliza el control
                                                udtChat.InitControl(objConnection, objContact);
                                                udtChat.CloseRequest += (objSender, objEventArgs) =>
                                                                                                            { CloseChat(strKey);
                                                                                                            };
                                            // Lo añade a la ficha
                                                tabChat.TabPages.Add(objContact.Login);
                                                tabChat.TabPages[tabChat.TabPages.Count - 1].Controls.Add(udtChat);
                                                tabChat.TabPages[tabChat.TabPages.Count - 1].Tag = strKey;
                                                tabChat.SelectedIndex = tabChat.TabPages.Count - 1;
                                            // y por último ocupa toda la ficha
                                                udtChat.Dock = DockStyle.Fill;
                                    }
                        }
                // Devuelve el control
                    return udtChat;
        }
Пример #24
0
 /// <summary>
 ///		Obtiene la clave de una ficha de chat
 /// </summary>
 private string GetChatKey(JabberConnection objConnection, JabberContact objContact)
 {
     return $"{objConnection.Host.Address}_{objContact.FullJid}";
 }