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; --