davemds pushed a commit to branch master.

http://git.enlightenment.org/enlightenment/modules/packagekit.git/commit/?id=c764913d8e2120aca1de7cc44d7e103df7352e3c

commit c764913d8e2120aca1de7cc44d7e103df7352e3c
Author: davemds <d...@gurumeditation.it>
Date:   Sun Nov 3 21:05:02 2013 +0100

    Better error management: do not show "system updated" in case of failure
---
 src/e_mod_main.c       | 15 +++++------
 src/e_mod_packagekit.c | 68 +++++++++++++++++++++++++++++---------------------
 src/e_mod_packagekit.h |  1 +
 3 files changed, 49 insertions(+), 35 deletions(-)

diff --git a/src/e_mod_main.c b/src/e_mod_main.c
index acc44a9..596cf07 100644
--- a/src/e_mod_main.c
+++ b/src/e_mod_main.c
@@ -295,17 +295,17 @@ e_modapi_init(E_Module *m)
    if (!ctxt->config)
      ctxt->config = E_NEW(PackageKit_Config, 1);
 
-   if (!packagekit_dbus_connect(ctxt))
-     {
-        free(ctxt);
-        return NULL;
-     }
 
    ctxt->module = m;
    packagekit_mod = m;
    e_gadcon_provider_register(&_gc_class);
-   packagekit_create_transaction_and_exec(ctxt, packagekit_get_updates);
-   ctxt->refresh_timer = ecore_timer_add(60.0, _timer_cb, ctxt);
+   
+   if (packagekit_dbus_connect(ctxt))
+     {
+        packagekit_create_transaction_and_exec(ctxt, packagekit_get_updates);
+        ctxt->refresh_timer = ecore_timer_add(60.0, _timer_cb, ctxt);
+     }
+
    return ctxt;
 }
 
@@ -317,6 +317,7 @@ e_modapi_shutdown(E_Module *m)
    packagekit_dbus_disconnect(ctxt);
 
    E_FREE_FUNC(ctxt->refresh_timer, ecore_timer_del);
+   E_FREE_FUNC(ctxt->error, eina_stringshare_del);
 
    E_FREE_FUNC(ctxt->config->manager_command, eina_stringshare_del);
    E_FREE(ctxt->config);
diff --git a/src/e_mod_packagekit.c b/src/e_mod_packagekit.c
index 3dc501e..ad9c677 100644
--- a/src/e_mod_packagekit.c
+++ b/src/e_mod_packagekit.c
@@ -49,6 +49,13 @@ packagekit_popup_update(E_PackageKit_Instance *inst)
    Evas_Object *icon;
    char buf[PATH_MAX];
 
+   if (ctxt->error)
+     {
+        e_widget_label_text_set(inst->popup_label, D_("No information 
available"));
+        e_widget_ilist_append(inst->popup_ilist, NULL, ctxt->error, NULL, 
NULL, NULL);
+        return;
+     }
+
    EINA_LIST_FOREACH(ctxt->packages, l, pkg)
      {
         switch (pkg->info)
@@ -138,6 +145,17 @@ packagekit_popup_del(E_PackageKit_Instance *inst)
 }
 
 
+static void
+_store_error(E_PackageKit_Module_Context *ctxt, const char *err)
+{
+   ERR("PKGKIT ERROR: %s", err);
+   packagekit_icon_update(ctxt, "packagekit,state,error");
+   if (ctxt->error)
+      eina_stringshare_replace(&ctxt->error, err);
+   else
+      ctxt->error = eina_stringshare_add(err);
+}
+
 /* RefreshCache() */
 static void
 null_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending)
@@ -145,10 +163,7 @@ null_cb(void *data, const Eldbus_Message *msg, 
Eldbus_Pending *pending)
    E_PackageKit_Module_Context *ctxt = data;
    const char *error, *error_msg;
    if (eldbus_message_error_get(msg, &error, &error_msg))
-     {
-        ERR("ERROR: '%s', '%s'", error, error_msg);
-        packagekit_icon_update(ctxt, "packagekit,state,error");
-     }
+     _store_error(ctxt, error_msg);
 }
 
 static void
@@ -160,14 +175,12 @@ signal_repo_detail_cb(void *data, const Eldbus_Message 
*msg)
 
    if (eldbus_message_error_get(msg, &error, &error_msg))
      {
-        ERR("PKGKIT: '%s', '%s'", error, error_msg);
-        packagekit_icon_update(ctxt, "packagekit,state,error");
+        _store_error(ctxt, error_msg);
         return;
      }
    if (!eldbus_message_arguments_get(msg, "ssb", &repo_id, &desc, &enabled))
      {
-        ERR("PKGKIT: could not get arguments!");
-        packagekit_icon_update(ctxt, "packagekit,state,error");
+        _store_error(ctxt, "could not get arguments (ssb)");
         return;
      }
    DBG("PKGKIT: RepoDetail: (%d) %s [ %s ]", enabled, repo_id, desc);
@@ -183,8 +196,7 @@ signal_cache_finished_cb(void *data, const Eldbus_Message 
*msg)
 
    if (eldbus_message_error_get(msg, &error, &error_msg))
      {
-        ERR("PKGKIT: '%s', '%s'", error, error_msg);
-        packagekit_icon_update(ctxt, "packagekit,state,error");
+        _store_error(ctxt, error_msg);
         return;
      }
 
@@ -207,8 +219,7 @@ packagekit_refresh_cache(E_PackageKit_Module_Context *ctxt, 
const char *transact
    pending = eldbus_proxy_call(proxy, "RefreshCache", null_cb, NULL, -1, "b", 
1);
    if (!pending)
      {
-        ERR("PKGKIT: could not call RefreshCache\n");
-        packagekit_icon_update(ctxt, "packagekit,state,error");
+        _store_error(ctxt, "could not call RefreshCache()");
         return;
      }
    eldbus_proxy_signal_handler_add(proxy, "Finished", 
signal_cache_finished_cb, ctxt);
@@ -229,14 +240,12 @@ _signal_package_cb(void *data, const Eldbus_Message *msg)
 
    if (eldbus_message_error_get(msg, &error, &error_msg))
      {
-        ERR("PKGKIT: '%s', '%s'", error, error_msg);
-        packagekit_icon_update(ctxt, "packagekit,state,error");
+        _store_error(ctxt, error_msg);
         return;
      }
    if (!eldbus_message_arguments_get(msg, "uss", &info, &pkg_id, &summary))
      {
-        ERR("PKGKIT: could not get arguments!");
-        packagekit_icon_update(ctxt, "packagekit,state,error");
+        _store_error(ctxt, "could not get arguments (uss)");
         return;
      }
    DBG("PKGKIT: Package: (%d) %s [ %s ]", info, pkg_id, summary);
@@ -268,8 +277,7 @@ _signal_finished_cb(void *data, const Eldbus_Message *msg)
 
    if (eldbus_message_error_get(msg, &error, &error_msg))
      {
-        ERR("PKGKIT: '%s', '%s'", error, error_msg);
-        packagekit_icon_update(ctxt, "packagekit,state,error");
+        _store_error(ctxt, error_msg);
         return;
      }
 
@@ -313,8 +321,7 @@ packagekit_get_updates(E_PackageKit_Module_Context *ctxt, 
const char *transactio
    pending = eldbus_proxy_call(proxy, "GetUpdates", null_cb, NULL, -1, "t", 1);
    if (!pending)
      {
-        ERR("PKGKIT: could not call GetUpdates\n");
-        packagekit_icon_update(ctxt, "packagekit,state,error");
+        _store_error(ctxt, "could not call GetUpdates()");
         return;
      }
 
@@ -340,15 +347,13 @@ _transaction_created_cb(void *data, const Eldbus_Message 
*msg, Eldbus_Pending *p
 
    if (eldbus_message_error_get(msg, &error, &error_msg))
      {
-        ERR("PKGKIT: '%s', '%s'", error, error_msg);
-        packagekit_icon_update(ctxt, "packagekit,state,error");
+        _store_error(ctxt, error_msg);
         return;
      }
 
    if (!eldbus_message_arguments_get(msg, "o", &trans_path))
      {
-        ERR("PKGKIT: could not get transaction path!");
-        packagekit_icon_update(ctxt, "packagekit,state,error");
+        _store_error(ctxt, "could not get transaction path");
         return;
      }
 
@@ -372,8 +377,7 @@ 
packagekit_create_transaction_and_exec(E_PackageKit_Module_Context *ctxt,
                                _transaction_created_cb, ctxt, -1, "");
    if (!pending)
      {
-        ERR("PKGKIT: could not call CreateTransaction()");
-        packagekit_icon_update(ctxt, "packagekit,state,error");
+        _store_error(ctxt, "could not call CreateTransaction()");
         return;
      }
    eldbus_pending_data_set(pending, "func", func);
@@ -399,12 +403,20 @@ packagekit_dbus_connect(E_PackageKit_Module_Context *ctxt)
    eldbus_init();
 
    ctxt->conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(ctxt->conn, EINA_FALSE);
+   if (!ctxt->conn)
+     {
+        _store_error(ctxt, "could not connect to system bus");
+        return EINA_FALSE;
+     }
 
    obj = eldbus_object_get(ctxt->conn, "org.freedesktop.PackageKit",
                                        "/org/freedesktop/PackageKit");
    ctxt->packagekit = eldbus_proxy_get(obj, "org.freedesktop.PackageKit");
-   EINA_SAFETY_ON_NULL_RETURN_VAL(ctxt->packagekit, EINA_FALSE);
+   if (!ctxt->packagekit)
+   {
+      _store_error(ctxt, "could not connect to PackageKit");
+      return EINA_FALSE;
+   }
 
    eldbus_proxy_signal_handler_add(ctxt->packagekit, "UpdatesChanged",
                                    _signal_updates_changed_cb, ctxt);
diff --git a/src/e_mod_packagekit.h b/src/e_mod_packagekit.h
index 8841c91..fa0df22 100644
--- a/src/e_mod_packagekit.h
+++ b/src/e_mod_packagekit.h
@@ -45,6 +45,7 @@ typedef struct _E_PackageKit_Module_Context
    Eina_List *instances;
    Eina_List *packages;
    Ecore_Timer *refresh_timer;
+   const char *error;
 
    Eldbus_Connection *conn;
    Eldbus_Proxy *packagekit;

-- 


Reply via email to