void Local::Heap::add (const std::string name, const std::string uri, const std::set<std::string> groups) { xmlNodePtr root = NULL; root = xmlDocGetRootElement (doc.get ()); PresentityPtr presentity (new Presentity (core, doc, name, uri, groups)); xmlAddChild (root, presentity->get_node ()); save (); common_add (presentity); }
void Local::Heap::common_add (PresentityPtr presentity) { gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core"); // Add the presentity to this Heap add_presentity (presentity); // Fetch presence presence_core->fetch_presence (presentity->get_uri ()); // Connect the Local::Presentity signals. add_connection (presentity, presentity->trigger_saving.connect (sigc::mem_fun (this, &Local::Heap::save))); }
void Local::Heap::common_add (PresentityPtr presentity) { boost::shared_ptr<Ekiga::PresenceCore> pcore = presence_core.lock (); // Add the presentity to this Heap add_presentity (presentity); // Fetch presence if (pcore) pcore->fetch_presence (presentity->get_uri ()); // Connect the Local::Presentity signals. add_connection (presentity, presentity->trigger_saving.connect (boost::bind (&Local::Heap::save, this))); }
LmHandlerResult LM::HeapRoster::handle_presence (LmConnection* /*connection*/, LmMessage* message) { LmHandlerResult result = LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; const gchar* from_c = lm_message_node_get_attribute (lm_message_get_node (message), "from"); const gchar* type_attr = lm_message_node_get_attribute (lm_message_get_node (message), "type"); std::string base_jid; std::string resource; if (from_c != 0) { std::string from (from_c); std::string::size_type index = from.find ('/'); base_jid = std::string (from, 0, index); resource = std::string (from, index + 1, std::string::npos); } PresentityPtr item = find_item (base_jid); if (type_attr != NULL && g_strcmp0 (type_attr, "subscribe") == 0) { result = LM_HANDLER_RESULT_REMOVE_MESSAGE; boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (boost::bind (&LM::HeapRoster::subscribe_from_form_submitted, this, _1, _2))); LmMessageNode* status = lm_message_node_find_child (lm_message_get_node (message), "status"); gchar* instructions = NULL; std::string item_name; if (item) { item_name = item->get_name (); } else { item_name = base_jid; } request->title (_("Authorization to see your presence")); if (status != NULL && lm_message_node_get_value (status) != NULL) { instructions = g_strdup_printf (_("%s asks the permission to see your presence, saying: \"%s\"."), item_name.c_str (), lm_message_node_get_value (status)); } else { instructions = g_strdup_printf (_("%s asks the permission to see your presence."), item_name.c_str ()); } request->instructions (instructions); g_free (instructions); std::map<std::string, std::string> choices; choices["grant"] = _("grant him/her the permission to see your presence"); choices["refuse"] = _("refuse him/her the permission to see your presence"); choices["later"] = _("decide later (also close or cancel this dialog)"); request->single_choice ("answer", _("Your answer is: "), "grant", choices); request->hidden ("jid", base_jid); questions (request); } else { if (item) { result = LM_HANDLER_RESULT_REMOVE_MESSAGE; item->push_presence (resource, lm_message_get_node (message)); } } return result; }