[ekiga] Made the loudmouth account editions stick



commit 56911cd6e642159d17d12158b667c32c3b968063
Author: Julien Puydt <jpuydt gnome org>
Date:   Thu Jun 11 17:37:01 2009 +0200

    Made the loudmouth account editions stick
    
    Now all changes are stored, so live across runs.

 .../components/loudmouth/loudmouth-account.cpp     |  174 ++++++++++++--------
 .../components/loudmouth/loudmouth-account.h       |   13 +--
 2 files changed, 111 insertions(+), 76 deletions(-)
---
diff --git a/lib/engine/components/loudmouth/loudmouth-account.cpp b/lib/engine/components/loudmouth/loudmouth-account.cpp
index 3b49ce2..10ed729 100644
--- a/lib/engine/components/loudmouth/loudmouth-account.cpp
+++ b/lib/engine/components/loudmouth/loudmouth-account.cpp
@@ -74,6 +74,7 @@ LM::Account::Account (gmref_ptr<Ekiga::PersonalDetails> details_,
   details(details_), dialect(dialect_), cluster(cluster_), node(node_)
 {
   xmlChar* xml_str = NULL;
+  bool enable_on_startup = false;
 
   status = _("inactive");
 
@@ -90,51 +91,6 @@ LM::Account::Account (gmref_ptr<Ekiga::PersonalDetails> details_,
     xmlSetProp (node, BAD_CAST "startup", BAD_CAST "false");
   }
 
-  xml_str = xmlGetProp (node, BAD_CAST "name");
-  if (xml_str != NULL) {
-
-    name = (const char*)xml_str;
-    xmlFree (xml_str);
-  }
-
-  xml_str = xmlGetProp (node, BAD_CAST "user");
-  if (xml_str != NULL) {
-
-    user = (const char*)xml_str;
-    xmlFree (xml_str);
-  }
-
-  xml_str = xmlGetProp (node, BAD_CAST "password");
-  if (xml_str != NULL) {
-
-    password = (const char*)xml_str;
-    xmlFree (xml_str);
-  }
-
-  xml_str = xmlGetProp (node, BAD_CAST "resource");
-  if (xml_str != NULL) {
-
-    resource = (const char*)xml_str;
-    xmlFree (xml_str);
-  }
-
-  xml_str = xmlGetProp (node, BAD_CAST "server");
-  if (xml_str != NULL) {
-
-    server = (const char*)xml_str;
-    xmlFree (xml_str);
-  }
-
-  xml_str = xmlGetProp (node, BAD_CAST "port");
-  if (xml_str != NULL) {
-
-    port = atoi ((const char*)xml_str);
-    xmlFree (xml_str);
-  } else {
-
-    port = 5222;
-  }
-
   xml_str = xmlGetProp (node, BAD_CAST "startup");
   if (xml_str != NULL) {
 
@@ -145,8 +101,8 @@ LM::Account::Account (gmref_ptr<Ekiga::PersonalDetails> details_,
 
       enable_on_startup = false;
     }
-    xmlFree (xml_str);
   }
+  xmlFree (xml_str);
 
   connection = lm_connection_new (NULL);
   lm_connection_set_disconnect_function (connection, (LmDisconnectFunction)on_disconnected_c,
@@ -161,13 +117,31 @@ void
 LM::Account::enable ()
 {
   GError *error = NULL;
+  xmlChar* server =  NULL;
+  unsigned port = 5222;
+
+  server = xmlGetProp (node, BAD_CAST "server");
+  {
+    xmlChar* port_str = xmlGetProp (node, BAD_CAST "port");
+
+    port = atoi ((const char*)port_str);
+    xmlFree (port_str);
+  }
+
   {
     gchar* jid = NULL;
-    jid = g_strdup_printf ("%s %s/%s", user.c_str (), server.c_str (), resource.c_str ());
+    xmlChar* user = NULL;
+    xmlChar* resource = NULL;
+    user = xmlGetProp (node, BAD_CAST "user");
+    resource = xmlGetProp (node, BAD_CAST "resource");
+    jid = g_strdup_printf ("%s %s/%s", user, server, resource);
     lm_connection_set_jid (connection, jid);
     g_free (jid);
+    xmlFree (user);
+    xmlFree (resource);
   }
-  lm_connection_set_server (connection, server.c_str ());
+  lm_connection_set_server (connection, (const char*)server);
+  lm_connection_set_port (connection, port);
   if ( !lm_connection_open (connection,
 			    (LmResultFunction)on_connection_opened_c,
 			    this, NULL, &error)) {
@@ -183,7 +157,9 @@ LM::Account::enable ()
     status = _("connecting");
   }
 
-  enable_on_startup = true;
+  xmlFree (server);
+
+  xmlSetProp (node, BAD_CAST "startup", BAD_CAST "true");
   trigger_saving.emit ();
 
   updated.emit ();
@@ -192,8 +168,7 @@ LM::Account::enable ()
 void
 LM::Account::disable ()
 {
-
-  enable_on_startup = false;
+  xmlSetProp (node, BAD_CAST "startup", BAD_CAST "false");
   trigger_saving.emit ();
 
   lm_connection_close (connection, NULL);
@@ -220,9 +195,15 @@ LM::Account::on_connection_opened (bool result)
 {
   if (result) {
 
+    xmlChar* user = xmlGetProp (node, BAD_CAST "user");
+    xmlChar* password = xmlGetProp (node, BAD_CAST "password");
+    xmlChar* resource = xmlGetProp (node, BAD_CAST "resource");
     status = _("authenticating");
-    lm_connection_authenticate (connection, user.c_str (), password.c_str (), resource.c_str (),
+    lm_connection_authenticate (connection, (const char*)user,
+				(const char*)password, (const char*)resource,
 				(LmResultFunction)on_authenticate_c, this, NULL, NULL);
+    xmlFree (password);
+    xmlFree (resource);
     updated.emit ();
   } else {
 
@@ -250,7 +231,11 @@ LM::Account::on_authenticate (bool result)
   if (result) {
 
     heap = gmref_ptr<Heap> (new Heap (details, dialect, connection));
-    heap->set_name (name);
+    {
+      xmlChar *xml_str = xmlGetProp (node, BAD_CAST "name");
+      heap->set_name ((const char*)xml_str);
+      xmlFree (xml_str);
+    }
     cluster->add_heap (heap);
     status = _("connected");
     updated.emit ();
@@ -274,16 +259,43 @@ LM::Account::edit ()
 {
   Ekiga::FormRequestSimple request(sigc::mem_fun (this,
 						  &LM::Account::on_edit_form_submitted));
+  xmlChar* xml_str = NULL;
 
   request.title (_("Edit account"));
 
   request.instructions (_("Please update the following fields:"));
 
-  request.text ("name", _("Name:"), name);
-  request.text ("user", _("User:"), user);
-  request.text ("server", _("Server:"), server);
-  request.text ("resource", _("Resource:"), resource);
-  request.private_text ("password", _("Password:"), password);
+  xml_str = xmlGetProp (node, BAD_CAST "name");
+  request.text ("name", _("Name:"), (const char*)xml_str);
+  xmlFree (xml_str);
+
+  xml_str = xmlGetProp (node, BAD_CAST "user");
+  request.text ("user", _("User:"), (const char*)xml_str);
+  xmlFree (xml_str);
+
+  xml_str = xmlGetProp (node, BAD_CAST "server");
+  request.text ("server", _("Server:"), (const char*)xml_str);
+  xmlFree (xml_str);
+
+  xml_str = xmlGetProp (node, BAD_CAST "resource");
+  request.text ("resource", _("Resource:"), (const char*)xml_str);
+  xmlFree (xml_str);
+
+  xml_str = xmlGetProp (node, BAD_CAST "password");
+  request.private_text ("password", _("Password:"), (const char*)xml_str);
+  xmlFree (xml_str);
+
+  xml_str = xmlGetProp (node, BAD_CAST "startup");
+  bool enable_on_startup = false;
+  if (xmlStrEqual (xml_str, BAD_CAST "true")) {
+
+    enable_on_startup = true;
+  } else {
+
+    enable_on_startup = false;
+
+  }
+  xmlFree (xml_str);
   request.boolean ("enabled", _("Enable account"), enable_on_startup);
 
   if (!questions.handle_request (&request)) {
@@ -305,15 +317,28 @@ LM::Account::on_edit_form_submitted (bool submitted,
 
   disable (); // don't stay connected!
 
-  name = result.text ("name");
-  user = result.text ("user");
-  server = result.text ("server");
-  resource = result.text ("resource");
-  password = result.private_text ("password");
-  enable_on_startup = result.boolean ("enabled");
+  std::string name = result.text ("name");
+  std::string user = result.text ("user");
+  std::string server = result.text ("server");
+  std::string resource = result.text ("resource");
+  std::string password = result.private_text ("password");
+  bool enable_on_startup = result.boolean ("enabled");
+
+  xmlSetProp (node, BAD_CAST "name", BAD_CAST name.c_str ());
+  xmlSetProp (node, BAD_CAST "user", BAD_CAST user.c_str ());
+  xmlSetProp (node, BAD_CAST "server", BAD_CAST server.c_str ());
+  xmlSetProp (node, BAD_CAST "resource", BAD_CAST resource.c_str ());
+  xmlSetProp (node, BAD_CAST "password", BAD_CAST password.c_str ());
 
-  if (enable_on_startup)
+  if (enable_on_startup) {
+
+    xmlSetProp (node, BAD_CAST "startup", BAD_CAST "true");
     enable ();
+  } else {
+
+    xmlSetProp (node, BAD_CAST "startup", BAD_CAST "false");
+    updated.emit ();
+  }
 }
 
 void
@@ -350,3 +375,22 @@ LM::Account::populate_menu (Ekiga::MenuBuilder& builder)
 
   return true;
 }
+
+const std::string
+LM::Account::get_status () const
+{
+  return status;
+}
+
+const std::string
+LM::Account::get_name () const
+{
+  std::string name;
+  xmlChar* xml_str = xmlGetProp (node, BAD_CAST "name");
+
+  name = (const char*)xml_str;
+
+  xmlFree (xml_str);
+
+  return name;
+}
diff --git a/lib/engine/components/loudmouth/loudmouth-account.h b/lib/engine/components/loudmouth/loudmouth-account.h
index 2ccf122..2167698 100644
--- a/lib/engine/components/loudmouth/loudmouth-account.h
+++ b/lib/engine/components/loudmouth/loudmouth-account.h
@@ -63,11 +63,9 @@ namespace LM
 
     sigc::signal0<void> trigger_saving;
 
-    const std::string get_name () const
-    { return name; }
+    const std::string get_name () const;
 
-    const std::string get_status () const
-    { return status; }
+    const std::string get_status () const;
 
     bool populate_menu (Ekiga::MenuBuilder& builder);
 
@@ -91,13 +89,6 @@ namespace LM
     gmref_ptr<Cluster> cluster;
     xmlNodePtr node;
 
-    std::string name;
-    std::string user;
-    std::string password;
-    std::string resource;
-    std::string server;
-    unsigned port;
-    bool enable_on_startup;
     std::string status;
 
     LmConnection* connection;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]