void Local::Heap::new_presentity_form_submitted (bool submitted, Ekiga::Form &result) { if (!submitted) return; gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core"); const std::string name = result.text ("name"); const std::string good_uri = result.hidden ("good-uri"); std::string uri; const std::set<std::string> groups = result.editable_set ("groups"); if (good_uri == "yes") uri = result.hidden ("uri"); else uri = result.text ("uri"); size_t pos = uri.find_first_of (' '); if (pos != std::string::npos) uri = uri.substr (0, pos); if (presence_core->is_supported_uri (uri) && !has_presentity_with_uri (uri)) { add (name, uri, groups); save (); } else { Ekiga::FormRequestSimple request(sigc::mem_fun (this, &Local::Heap::new_presentity_form_submitted)); result.visit (request); if (!presence_core->is_supported_uri (uri)) request.error (_("You supplied an unsupported address")); else request.error (_("You already have a contact with this address!")); if (!questions.handle_request (&request)) { // FIXME: better error handling #ifdef __GNUC__ std::cout << "Unhandled form request in " << __PRETTY_FUNCTION__ << std::endl; #endif } } }
void Opal::Bank::on_new_account_form_submitted (bool submitted, Ekiga::Form &result, Account::Type acc_type) { if (!submitted) return; boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple> (new Ekiga::FormRequestSimple (boost::bind (&Opal::Bank::on_new_account_form_submitted, this, _1, _2, acc_type))); std::string error; std::string new_name = (acc_type == Opal::Account::SIP || acc_type == Opal::Account::H323) ? result.text ("name") : result.hidden ("name"); std::string new_host = (acc_type == Opal::Account::SIP || acc_type == Opal::Account::H323) ? result.text ("host") : result.hidden ("host"); std::string new_user = result.text ("user"); std::string new_authentication_user = (acc_type == Opal::Account::SIP) ? result.text ("authentication_user") : new_user; std::string new_password = result.private_text ("password"); bool new_enabled = result.boolean ("enabled"); unsigned new_timeout = atoi ((acc_type == Opal::Account::SIP || acc_type == Opal::Account::H323) ? result.text ("timeout").c_str () : result.hidden ("timeout").c_str ()); result.visit (*request); if (new_name.empty ()) error = _("You did not supply a name for that account."); else if (new_host.empty ()) error = _("You did not supply a host to register to."); else if (new_user.empty ()) error = _("You did not supply a user name for that account."); else if (new_timeout < 10) error = _("The timeout should be at least 10 seconds."); if (!error.empty ()) { request->error (error); questions (request); } else { add (acc_type, new_name, new_host, new_user, new_authentication_user, new_password, new_enabled, new_timeout); save (); } }
void Local::Heap::new_presentity_form_submitted (bool submitted, Ekiga::Form &result) { if (!submitted) return; boost::shared_ptr<Ekiga::PresenceCore> pcore = presence_core.lock (); if (!pcore) return; const std::string name = result.text ("name"); const std::string good_uri = result.hidden ("good-uri"); std::string uri; const std::set<std::string> groups = result.editable_set ("groups"); if (good_uri == "yes") uri = result.hidden ("uri"); else uri = result.text ("uri"); uri = canonize_uri (uri); if (pcore->is_supported_uri (uri) && !has_presentity_with_uri (uri)) { add (name, uri, groups); save (); } else { boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple>(new Ekiga::FormRequestSimple (boost::bind (&Local::Heap::new_presentity_form_submitted, this, _1, _2))); result.visit (*request); if (!pcore->is_supported_uri (uri)) request->error (_("You supplied an unsupported address")); else request->error (_("You already have a contact with this address!")); questions (request); } }
void Opal::Bank::on_new_account_form_submitted (Ekiga::Form &result, Account::Type t) { try { Ekiga::FormRequestSimple request; std::string error; std::string new_name = (t == Opal::Account::SIP || t == Opal::Account::H323) ? result.text ("name") : result.hidden ("name"); std::string new_host = (t == Opal::Account::SIP || t == Opal::Account::H323) ? result.text ("host") : result.hidden ("host"); std::string new_user = result.text ("user"); std::string new_authentication_user = (t == Opal::Account::SIP) ? result.text ("authentication_user") : new_user; std::string new_password = result.private_text ("password"); bool new_enabled = result.boolean ("enabled"); unsigned new_timeout = atoi ((t == Opal::Account::SIP || t == Opal::Account::H323) ? result.text ("timeout").c_str () : result.hidden ("timeout").c_str ()); result.visit (request); if (new_name.empty ()) error = _("You did not supply a name for that account."); else if (new_host.empty ()) error = _("You did not supply a host to register to."); else if (new_user.empty ()) error = _("You did not supply a user name for that account."); else if (new_timeout < 10) error = _("The timeout should have a bigger value."); if (!error.empty ()) { request.error (error); request.submitted.connect (sigc::bind (sigc::mem_fun (this, &Opal::Bank::on_new_account_form_submitted) ,t)); if (!questions.handle_request (&request)) { #ifdef __GNUC__ std::cout << "Unhandled form request in " << __PRETTY_FUNCTION__ << std::endl; #endif } } else { add (t, new_name, new_host, new_user, new_authentication_user, new_password, new_enabled, new_timeout); save (); } } catch (Ekiga::Form::not_found) { std::cerr << "Invalid result form" << std::endl; } }
void LM::HeapRoster::subscribe_from_form_submitted (bool submitted, Ekiga::Form& result) { if ( !submitted) return; const std::string jid = result.hidden ("jid"); const std::string answer = result.single_choice ("answer"); if (answer == "grant") { LmMessage* message = lm_message_new (NULL, LM_MESSAGE_TYPE_PRESENCE); lm_message_node_set_attributes (lm_message_get_node (message), "to", jid.c_str (), "type", "subscribed", NULL); lm_connection_send (connection, message, NULL); lm_message_unref (message); LmMessage* subscribe = lm_message_new (NULL, LM_MESSAGE_TYPE_PRESENCE); lm_message_node_set_attributes (lm_message_get_node (subscribe), "to", jid.c_str (), "type", "subscribe", NULL); lm_connection_send (connection, subscribe, NULL); lm_message_unref (subscribe); } else if (answer == "refuse") { LmMessage* message = lm_message_new (NULL, LM_MESSAGE_TYPE_PRESENCE); lm_message_node_set_attributes (lm_message_get_node (message), "to", jid.c_str (), "type", "unsubscribed", NULL); lm_connection_send (connection, message, NULL); lm_message_unref (message); } }