pgstath / Sharp.Xmpp

Sharp.Xmpp is looking for a maintainer! Unfortunatelly I do not have currently the time needed to maintain the library. Luckily a small but vibrant community has evolved around Sharp.Xmpp. If you would like to be the project's maintainer please sent an email to pgstath@gmail.com. This should include issues, tickets and commits that you have done for Sharp.Xmpp or other similar project. Sharp.Xmpp is a multiplatform, Windows and Android, .NET XMPP client assembly.Sharp.Xmpp supports IM functionality & a variety of XMPP extensions, is simple and is extensively tested against Android Xamarin. It is a fork of the currently frozen excellent S22.Xmpp project. Sharp.Xmpp will be at the FOSSDEM 2016 Real time DevRoom!
Other
84 stars 51 forks source link

MultiUserChat.SetPrivilege called Get, but never Set - Bug #53

Open cimframe opened 7 years ago

cimframe commented 7 years ago

The SetPrivilege methods never called set, hence never set any affiliation or role values. Instead, these overridden methods called a superfluous method PostSetPrivilege which did a get, but the purpose of the methods is in question. I propose rewriting the methods to do a set (hence, their name) and an example of one of the methods would look as follows:

        /// <summary>
        /// Allows owners and admins to change affiliations for an occupant.
        /// </summary>
        public bool SetPrivilege (Jid room, string nickname, Affiliation affiliation, string reason = null) {

            room.ThrowIfNull ("room");
            nickname.ThrowIfNull ("nickname");

            var item = Xml.Element ("item")
                .Attr ("affiliation", affiliation.ToString ().ToLower ())
                .Attr ("nick", nickname);

            if (!string.IsNullOrWhiteSpace (reason)) {
                item.Child (Xml.Element ("reason").Text (reason));
            }

            var queryElement = Xml.Element ("query", MucNs.NsAdmin)
                .Child (item);

            var iq = im.IqRequest (IqType.Set, room, im.Jid, queryElement);

            return iq.Type == IqType.Result;
        }