Example #1
0
        void HandleOnAuthenticate(object sender)
        {
            ConnectionState = AccountConnectionState.Connected;

            // FIXME: Don't send presence until we have our roster.

            if (m_PendingStatus != null)
            {
                Status = m_PendingStatus;
            }
            else
            {
                Status = new ClientStatus(ClientAvailability.Available, null);
            }

            m_ConnectedAt = DateTime.Now;

            // Request own vcard.
            RequestVCard(Jid, delegate(object o, IQ iq, object data) {
                VCard vcard = null;

                if (iq != null && iq.Type != IQType.error)
                {
                    vcard = iq["vCard"] as VCard;
                    if (vcard != null)
                    {
                        if (vcard.ChildNodes == null || vcard.ChildNodes.Count == 0)
                        {
                            vcard = null;
                        }
                    }
                }

                m_MyVCard = vcard;

                if (vcard == null)
                {
                    // FIXME: Raise an event telling user to fill out profile!
                    Console.WriteLine("No VCard!");
                }
                else
                {
                    if (MyVCardUpdated != null)
                    {
                        MyVCardUpdated(this, EventArgs.Empty);
                    }
                }
            }, null);
        }
Example #2
0
        void HandleOnPresence(object sender, Presence pres)
        {
            Presence oldPresence = m_UserPresenceCache.ContainsKey(pres.From) ? m_UserPresenceCache[pres.From] : null;

            m_UserPresenceCache[pres.From] = pres;

            if (pres.To == Jid && pres.From == Jid)
            {
                m_Status = new ClientStatus(pres.Show, pres.Status);
                if (StatusChanged != null)
                {
                    StatusChanged(this);
                }
            }

            var feed = ServiceManager.Get <ActivityFeedService>();

            if (pres.Type == PresenceType.error)
            {
                // Display MUC errors.
                if (pres.GetElementsByTagName("x", "http://jabber.org/protocol/muc").Count > 0)
                {
                    var error = pres["error"];
                    if (error != null)
                    {
                        string message = (error["text"] != null) ? error["text"].InnerText : error.FirstChild.Name;
                        Application.Client.ShowErrorWindow("Error with conference: " + pres.From.Bare, message, null);
                    }
                }
                else
                {
                    // FIXME: Show error
                }
            }
            else if (pres.Type == PresenceType.probe)
            {
                // FIXME: Do anything here?
            }
            else if (pres.Type == PresenceType.subscribe)
            {
                feed.PostItem(this, pres.From, "subscribe", null, pres.Status);
            }
            else if (pres.Type == PresenceType.subscribed)
            {
                feed.PostItem(this, pres.From, "subscribed", null, pres.Status);
            }
            else if (pres.Type == PresenceType.unsubscribe)
            {
                feed.PostItem(this, pres.From, "unsubscribe", null, pres.Status);
            }
            else if (pres.Type == PresenceType.unsubscribed)
            {
                feed.PostItem(this, pres.From, "unsubscribed", null, pres.Status);
            }
            else if (pres.Type == PresenceType.available || pres.Type == PresenceType.unavailable || pres.Type == PresenceType.invisible)
            {
                if (m_Roster[pres.From.Bare] != null)
                {
                    if (oldPresence == null || (oldPresence.Type != pres.Type || oldPresence.Show != pres.Show || oldPresence.Status != pres.Status))
                    {
                        if (pres.Type == PresenceType.available || pres.Type == PresenceType.unavailable)
                        {
                            PostActivityFeedItem(pres.From, "presence", Helper.GetPresenceDisplay(pres), pres.Status);
                        }
                    }
                }
            }
        }
Example #3
0
 void HandleOnDisconnect(object sender)
 {
     m_Status        = null;
     ConnectionState = AccountConnectionState.Disconnected;
 }