/// <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); } } }
/// <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); } }
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(); } } }
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)); } } }
/// <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)); }
/// <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); } } }
/// <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}"); }
/// <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); }
/// <summary> /// Inicializa el control /// </summary> public void InitControl(JabberConnection objConnection, JabberContact objContact) { Connection = objConnection; Contact = objContact; }
/// <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; }
/// <summary> /// Obtiene la clave de una ficha de chat /// </summary> private string GetChatKey(JabberConnection objConnection, JabberContact objContact) { return $"{objConnection.Host.Address}_{objContact.FullJid}"; }