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;

-- 


Reply via email to