davemds pushed a commit to branch master. http://git.enlightenment.org/enlightenment/modules/packagekit.git/commit/?id=a9db2f4c85bdfd84fde88ac011b04fd262836643
commit a9db2f4c85bdfd84fde88ac011b04fd262836643 Author: davemds <d...@gurumeditation.it> Date: Mon Nov 4 00:26:12 2013 +0100 Query the PackageKit daemon version and defer the first method call after the version is fetched Atm the module do not work with packagekit version prior to 0.8 this way I can implement different path for different versions. --- src/e_mod_main.c | 11 +++-------- src/e_mod_packagekit.c | 43 +++++++++++++++++++++++++++++++++++++++++++ src/e_mod_packagekit.h | 3 +++ 3 files changed, 49 insertions(+), 8 deletions(-) diff --git a/src/e_mod_main.c b/src/e_mod_main.c index 596cf07..aaaa2fa 100644 --- a/src/e_mod_main.c +++ b/src/e_mod_main.c @@ -278,6 +278,7 @@ e_modapi_init(E_Module *m) ctxt = E_NEW(E_PackageKit_Module_Context, 1); EINA_SAFETY_ON_NULL_RETURN_VAL(ctxt, NULL); + ctxt->v_maj = ctxt->v_min = ctxt->v_mic = -1; snprintf(buf, sizeof(buf), "%s/locale", e_module_dir_get(m)); bindtextdomain(PACKAGE, buf); @@ -295,17 +296,11 @@ e_modapi_init(E_Module *m) if (!ctxt->config) ctxt->config = E_NEW(PackageKit_Config, 1); - ctxt->module = m; packagekit_mod = m; e_gadcon_provider_register(&_gc_class); - - 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); - } - + packagekit_dbus_connect(ctxt); + ctxt->refresh_timer = ecore_timer_add(60.0, _timer_cb, ctxt); return ctxt; } diff --git a/src/e_mod_packagekit.c b/src/e_mod_packagekit.c index ad9c677..973afbc 100644 --- a/src/e_mod_packagekit.c +++ b/src/e_mod_packagekit.c @@ -284,6 +284,7 @@ _signal_finished_cb(void *data, const Eldbus_Message *msg) Eldbus_Object *obj = eldbus_proxy_object_get(ctxt->transaction); E_FREE_FUNC(ctxt->transaction, eldbus_proxy_unref); E_FREE_FUNC(obj, eldbus_object_unref); + E_FREE_FUNC(ctxt->error, eina_stringshare_del); EINA_LIST_FOREACH(ctxt->packages, l, pkg) { @@ -367,6 +368,10 @@ packagekit_create_transaction_and_exec(E_PackageKit_Module_Context *ctxt, { Eldbus_Pending *pending; + DBG("*****************"); + DBG("PKGKIT Version: %d . %d . %d", ctxt->v_maj, ctxt->v_min, ctxt->v_mic); + DBG("*****************"); + if (ctxt->transaction) { WRN("PKGKIT: Another transaction in progress..."); @@ -394,6 +399,43 @@ _signal_updates_changed_cb(void *data, const Eldbus_Message *msg) packagekit_create_transaction_and_exec(ctxt, packagekit_get_updates); } +static void +_iterate_dict(void *data, const void *key, Eldbus_Message_Iter *var) +{ + E_PackageKit_Module_Context *ctxt = data; + + if (!strcmp(key, "VersionMajor")) + eldbus_message_iter_arguments_get(var, "u", &(ctxt->v_maj)); + else if (!strcmp(key, "VersionMinor")) + eldbus_message_iter_arguments_get(var, "u", &(ctxt->v_min)); + else if (!strcmp(key, "VersionMicro")) + eldbus_message_iter_arguments_get(var, "u", &(ctxt->v_mic)); + else return; + + if ((ctxt->v_maj != -1) && (ctxt->v_min != -1) && (ctxt->v_mic != -1)) + packagekit_create_transaction_and_exec(ctxt, packagekit_get_updates); +} + +static void +_prop_get_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending) +{ + E_PackageKit_Module_Context *ctxt = data; + Eldbus_Message_Iter *array; + const char *error, *error_msg; + + if (eldbus_message_error_get(msg, &error, &error_msg)) + { + _store_error(ctxt, error_msg); + return; + } + if (!eldbus_message_arguments_get(msg, "a{sv}", &array)) + { + _store_error(ctxt, "could not get arguments (a{sv})"); + return; + } + eldbus_message_iter_dict_iterate(array, "sv", _iterate_dict, ctxt); +} + Eina_Bool packagekit_dbus_connect(E_PackageKit_Module_Context *ctxt) { @@ -418,6 +460,7 @@ packagekit_dbus_connect(E_PackageKit_Module_Context *ctxt) return EINA_FALSE; } + eldbus_proxy_property_get_all(ctxt->packagekit, _prop_get_cb, ctxt); 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 fa0df22..fb8424d 100644 --- a/src/e_mod_packagekit.h +++ b/src/e_mod_packagekit.h @@ -46,6 +46,9 @@ typedef struct _E_PackageKit_Module_Context Eina_List *packages; Ecore_Timer *refresh_timer; const char *error; + int v_maj; + int v_min; + int v_mic; Eldbus_Connection *conn; Eldbus_Proxy *packagekit; --