Opened 12 years ago

Last modified 5 years ago

#119 new patch

Flesh out XMPP MUC functionality/UI

Reported by: mogul Owned by: deryni
Milestone: Patches Needing Improvement Component: XMPP
Version: 2.0 Keywords:
Cc: akrherz


[Resubmitting due to closure in the SourceForge? tracker during the move.]

XMPP Multi-User Chat (MUC) has a bunch of capabilities that Pidgin supports... but how would you ever know?! There's also a bunch of capabilities that Pidgin doesn't support, but should.

I finally realized you can do many of the things you can do in Exodus (register, kick and ban users, configure the room, etc.) with slash-commands, but really they should be obvious in the interface the way they are in Exodus. I had a love-hate relationship with Pidgin for months because I so missed this functionality, not knowing it was there, and was logging in via Exodus every time I needed to configure a room.

In addition to making this functionality discoverable, there's additional MUC functionality which is just plain inaccessible through Pidgin.

  • Users have both "roles" and "affiliations" with

rooms: Owner, Administrator, Moderator, Observer, Visitor, Member, etc. You should be able to discover this, either by icon, color, tooltip, or a query option in the member list. Currently Pidgin uses a couple of funky icons for users, but it's not at all clear what they mean... Hovering should say it explicitly. There should also be a slash command to list these (the output can be used for cutting and pasting).

Also, Pidgin does not show presence icons for people in the room despite receiving presence events, so you can't tell when people go idle!

*If you're the room's owner/creator, you should be able to set who is an admin, a moderator, a visitor, and an observer by right-clicking on them. If you're a moderator, you should be able to give and take voice. There should also be slash commands for these.

  • There's a command to ban but no way to unban. (It appears that inviting a user automatically unbans them, but it should be possible to unban without inviting the user.)

Interface suggestions: Exodus allows reconfiguring the room at any time by right-clicking in the room and selecting "Admin|Configure Room". Also in that right-click Admin menu are:

*Edit Voice List *Edit Ban List *Edit Member List *Edit Moderator List *Edit Admin List *Edit Owner List *Destroy room

All of these would be useful in Pidgin!

Thanks for the hard work to get MUC support this far... Looking forward to seeing it be complete!

Attachments (1)

AddRoleAndAffiliationAPI.diff (9.2 KB) - added by xnyhps 8 years ago.
Patch to add an API for setting the role or affiliation.

Download all attachments as: .zip

Change History (19)

comment:1 Changed 12 years ago by lschiere

  • Owner set to nwalp

comment:2 Changed 12 years ago by deryni

Pidgin does support most of the ability to control things like that via slash commands, such as /ban, /affiliate, and /role it does seem to be lacking unban though (unless you can use ban for that but I'm not sure). The pidgin chat room ui currently only supports adding right-click menu items on services where the chatroom nickname is the buddy nickname (so not jabber). I worked on a patch to fix that a while back but it broke some things for a person who tried testing it and I haven't gone back to it. Yes, adding functionality there would be nice, but it isn't possible currently or easy to make possible. Single protocol clients like Exodus have a much easier job than pidgin does for things like this. You can also bring up the room configuration dialog at any time in pidgin by using /configure.

comment:3 Changed 12 years ago by mogul

Ah, /affiliate and /role were missing when I originally filed this request on SourceForge?. Thanks, those are very helpful!

There's still no ability to see the current contents of the various lists. It'd be nice to have slash-commands for those even if adding UI is difficult to do in a cross-protocol way.

comment:4 Changed 12 years ago by deryni

Patches to add the ability to get the current lists printed out to you are welcome, slash commands are obviously not the ideal way to do that sort of stuff but will work. And actually at this point, given the jabber-* signals a plugin could likely be written to add conversation window buttons to get, display, and manipulate these lists.

comment:5 Changed 12 years ago by mogul

Can you give me a pointer to where in the source ( I'd start looking for the place to add slash commands, and where MUC stanzas are handled?

comment:6 Changed 12 years ago by deryni

cd pidgin/libpurple/protocols/jabber/; grep cmd_register *.c (they are registered in jabber.c I believe).

comment:7 Changed 11 years ago by seanegan

  • Component changed from pidgin (gtk) to XMPP

comment:8 Changed 11 years ago by jberanek

Well, many thanks to this ticket, because I now know it _is_ possible to configure a room in Pidgin, just a little inaccessible. :)

comment:9 Changed 10 years ago by deryni

  • Owner changed from nwalp to deryni

Exposing the administration options via the Conversation->More menu is probably a good idea and a good start for at least having them ui-drivable.

comment:10 Changed 10 years ago by deryni

Ticket #5378 has been marked as a duplicate of this ticket.

comment:11 Changed 10 years ago by deryni

This ticket and #264 are related ideas.

comment:12 Changed 9 years ago by darkrain42

Ticket #10491 has been marked as a duplicate of this ticket.

Changed 8 years ago by xnyhps

Patch to add an API for setting the role or affiliation.

comment:13 Changed 8 years ago by xnyhps

I've attached a patch which adds the functions:

gboolean jabber_muc_set_role(PurpleConversation *conv, char **participants, char *role);
gboolean jabber_muc_set_affiliation(PurpleConversation *conv, char **participants, char *affiliation);
void jabber_muc_configure_room(PurpleConversation *conv);

to libpurple for APIs to use to change roles/affiliations and configure the room. It's just these functions, someone with more Gtk experience would have to add menus to Pidgin to use them.

Also, there should be a way to retrieve a list of names per role/participants, but I'll add that later.

comment:14 Changed 8 years ago by xnyhps

That should of course say "to libpurple's API for GUIs to use"...

comment:15 Changed 8 years ago by Robby

  • Milestone set to Patches Needing Review
  • Type changed from enhancement to patch

comment:16 Changed 8 years ago by xnyhps

After discussing it with deryni, I'm going to try to make these functions all available using jabber_blist_node_menu. So wait for that. :)

comment:17 Changed 8 years ago by darkrain42

  • Milestone changed from Patches Needing Review to Patches Needing Improvement

Per xnyhps's comment

comment:18 Changed 5 years ago by belmyst

  • gboolean jabber_muc_set_role(PurpleConversation *conv, char **participants, char *role); will need an UI, it cannot be attached straight on to the chat's context menu.
  • Same for gboolean jabber_muc_set_affiliation(PurpleConversation *conv, char **participants, char *affiliation);
  • void jabber_muc_configure_room(PurpleConversation *conv);: done.

The problem is as follows:

  • Functions like jabber_muc_set_role need some parameters prior to being invoked.
  • AFAIK, Pidgin just grabs the menu actions published by the protocol plugin and callbacks them.
  • We need some sort of intermediary between Pidgin's menu building and libpurple's actions that constructs the UI, gets the necessary info from the user and then calls the expected function. But this would be XMPP-only.
  • This does not happen with the command-line version ({jabber_cmd_chat_config) because they get their parameters as part of the callback.

If someone could point me out as to how to fix this, I'd much appreciate it.

Last edited 5 years ago by belmyst (previous) (diff)
Note: See TracTickets for help on using tickets.
All information, including names and email addresses, entered onto this website or sent to mailing lists affiliated with this website will be public. Do not post confidential information, especially passwords!