/* handle publish list changes */ switch (item->subscription) { case GABBLE_ROSTER_SUBSCRIPTION_FROM: case GABBLE_ROSTER_SUBSCRIPTION_BOTH: g_intset_add (pub_add, handle); break; case GABBLE_ROSTER_SUBSCRIPTION_NONE: case GABBLE_ROSTER_SUBSCRIPTION_TO: case GABBLE_ROSTER_SUBSCRIPTION_REMOVE: /* publish channel is a bit odd, the roster item doesn't tell us * if someone is awaiting our approval - we get this via presence * type=subscribe, so we have to not remove them if they're * already local_pending in our publish channel */ if (!handle_set_is_member (chan.group->local_pending, handle)) { g_intset_add (pub_rem, handle); } break; default: g_assert_not_reached (); }