Пример #1
0
 private void SendPresenceIfChanged(XmppPresenceStatus status, string message)
 {
     if (UserSetting.PresenceMessage != message || UserSetting.PresenceStatus != status)
     {
         SendPresence(status, message);
     }
 }
Пример #2
0
        ///////////////////////////////////////////////////////////////////////////////
        public void SetPresence(XmppPresenceStatus newStatus, string customMessage, string photoHash)
        {
            if (newStatus == XmppPresenceStatus.Unavailable)
            {
                sendStream("<presence type=\"unavailable\"></presence>");
            }
            else
            {
                StringBuilder stream = new StringBuilder();
                if (!string.IsNullOrEmpty(customMessage))
                {
                    customMessage = string.Format("<status>{0}</status>", customMessage);
                }

                stream.Append("<presence><priority>1</priority>");
                stream.Append(Caps.ToStream());
                stream.Append(customMessage);
                stream.AppendFormat("<show>{0}</show>", XmppIq.PresenceToStr(newStatus));
                stream.AppendFormat("<x xmlns=\"vcard-temp:x:update\">");
                if (!string.IsNullOrWhiteSpace(photoHash))
                {
                    stream.AppendFormat("<photo>{0}</photo>", photoHash);
                }
                stream.AppendFormat("</x>");

                stream.Append("</presence>");
                sendStream(stream.ToString());
            }

            statePresence = newStatus;
        }
Пример #3
0
 public static string Presence2Str(XmppPresenceStatus p)
 {
     if (p == XmppPresenceStatus.Away)
     {
         return("(Away)");
     }
     if (p == XmppPresenceStatus.Busy)
     {
         return("(Busy)");
     }
     return(string.Empty);
 }
Пример #4
0
 public static Brush Presence2Brush(XmppPresenceStatus p)
 {
     if (p == XmppPresenceStatus.Online)
     {
         return(UiEnhancer.GreenBrush);
     }
     if (p == XmppPresenceStatus.Away)
     {
         return(UiEnhancer.YellowBrush);
     }
     if (p == XmppPresenceStatus.Busy)
     {
         return(UiEnhancer.RedBrush);
     }
     return(UiEnhancer.LightGrayBrush);
 }
Пример #5
0
 public static ImageSource Presence2Ico(XmppPresenceStatus p)
 {
     if (p == XmppPresenceStatus.Online)
     {
         return(Icons.UserOnlineSource);
     }
     if (p == XmppPresenceStatus.Away)
     {
         return(Icons.UserAwaySource);
     }
     if (p == XmppPresenceStatus.Busy)
     {
         return(Icons.UserBusySource);
     }
     return(Icons.UserUnavailableSource);
 }
Пример #6
0
        public static string PresenceToStr(XmppPresenceStatus prs)
        {
            switch (prs)
            {
            case XmppPresenceStatus.Busy:
                return("dnd");

            case XmppPresenceStatus.Away:
                return("away");

            case XmppPresenceStatus.Online:
            case XmppPresenceStatus.Unavailable:
            default:
                return(string.Empty);
            }
        }
Пример #7
0
        private void cmbSetPresence(ComboBox cmb, XmppPresenceStatus status)
        {
            for (int i = 0; i < cmb.Items.Count; i++)
            {
                ComboBoxItem cmbItem = cmb.Items[i] as ComboBoxItem;
                if (cmbItem == null || cmbItem.Tag == null || cmbItem.Tag.GetType() != typeof(XmppPresenceStatus))
                {
                    return;
                }

                if ((XmppPresenceStatus)cmbItem.Tag == status)
                {
                    cmb.SelectedIndex = i;
                    return;
                }
            }
        }
Пример #8
0
        private void SendPresence(XmppPresenceStatus status, string message)
        {
            if (client == null || !client.IsConnected)
            {
                return;
            }

            const int MaxMessageLength = 200;

            if (message.Length > MaxMessageLength)
            {
                message = message.Remove(MaxMessageLength);
            }
            message = System.Text.RegularExpressions.Regex.Replace(message, @"[\f\n\r\t\v<>&]", "");
            cmbSetPresence(cmbRosterPresence, status);
            txtPresenceMessage.Text = message;

            UserSetting.PresenceMessage = message;
            UserSetting.PresenceStatus  = status;
            client.SetPresence(UserSetting.PresenceStatus, UserSetting.PresenceMessage, UserSetting.VCardPhotoHash);

            //
            const int MaxResultToSave = 6;

            if (UserSetting.PastPresenceMessages == null)
            {
                UserSetting.PastPresenceMessages = new List <string>();
            }
            if (!string.IsNullOrWhiteSpace(UserSetting.PresenceMessage) && !UserSetting.PastPresenceMessages.Contains(UserSetting.PresenceMessage))
            {
                UserSetting.PastPresenceMessages.Add(UserSetting.PresenceMessage);
                while (UserSetting.PastPresenceMessages.Count > MaxResultToSave)
                {
                    UserSetting.PastPresenceMessages.RemoveAt(0);
                }
            }

            // save user presence setting
            UserSettingProvider.Save(UserSetting);

            //
            this.GotParentFocus(txtPresenceMessage);
            Log(string.Format("you're {1} {2}", client.Jid.Bare, UserSetting.PresenceStatus.ToString().ToLower(), UserSetting.PresenceMessage));
        }
Пример #9
0
        private ComboBoxItem cmbPresenceItem(XmppPresenceStatus status, string text, BitmapImage icon)
        {
            Image ico = new Image()
            {
                Source = icon, Margin = new Thickness(4, 0, 4, 0)
            };
            TextBlock label = new TextBlock()
            {
                Text = text
            };
            StackPanel sp = new StackPanel()
            {
                Orientation = Orientation.Horizontal, Tag = status
            };

            sp.Children.Add(ico);
            sp.Children.Add(label);
            return(new ComboBoxItem()
            {
                Tag = status, Content = sp
            });
        }