Matej Habrnal fa1950
From 96ff7e247ca0f767b0f24f109d9248101ee6baa2 Mon Sep 17 00:00:00 2001
Matej Habrnal fa1950
From: Jakub Filak <jfilak@redhat.com>
Matej Habrnal fa1950
Date: Tue, 24 Mar 2015 20:54:40 +0100
Matej Habrnal fa1950
Subject: [PATCH] libabrt: add wrappers TestElemeExists and GetInfo for one
Matej Habrnal fa1950
 element
Matej Habrnal fa1950
Matej Habrnal fa1950
To conveniently use the DBus methods.
Matej Habrnal fa1950
Matej Habrnal fa1950
Signed-off-by: Jakub Filak <jfilak@redhat.com>
Matej Habrnal fa1950
---
Matej Habrnal fa1950
 src/include/libabrt.h      | 18 +++++++++++
Matej Habrnal fa1950
 src/lib/problem_api_dbus.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++
Matej Habrnal fa1950
 2 files changed, 93 insertions(+)
Matej Habrnal fa1950
Matej Habrnal fa1950
diff --git a/src/include/libabrt.h b/src/include/libabrt.h
Matej Habrnal fa1950
index 5a019fb..0171cb7 100644
Matej Habrnal fa1950
--- a/src/include/libabrt.h
Matej Habrnal fa1950
+++ b/src/include/libabrt.h
Matej Habrnal fa1950
@@ -153,6 +153,24 @@ void koops_print_suspicious_strings_filtered(const regex_t **filterout);
Matej Habrnal fa1950
 int chown_dir_over_dbus(const char *problem_dir_path);
Matej Habrnal fa1950
 
Matej Habrnal fa1950
 /**
Matej Habrnal fa1950
+  @brief Checks whether the given element name exists
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+  Might require authorization
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+  @return Positive number if such an element exist, 0 if doesn't and negative number if an error occurs.
Matej Habrnal fa1950
+ */
Matej Habrnal fa1950
+int test_exist_over_dbus(const char *problem_id, const char *element_name);
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+/**
Matej Habrnal fa1950
+  @ Returns value of the given element name
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+  Might require authorization
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+  @return malloced string or NULL if no such an element exists; ERR_PTR in case of any error.
Matej Habrnal fa1950
+ */
Matej Habrnal fa1950
+char *load_text_over_dbus(const char *problem_id, const char *element_name);
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+/**
Matej Habrnal fa1950
  @brief Delets multiple problems specified by their id (as returned from problem_data_save)
Matej Habrnal fa1950
 
Matej Habrnal fa1950
  @param problem_dir_paths List of problem ids
Matej Habrnal fa1950
diff --git a/src/lib/problem_api_dbus.c b/src/lib/problem_api_dbus.c
Matej Habrnal fa1950
index 549175c..5148932 100644
Matej Habrnal fa1950
--- a/src/lib/problem_api_dbus.c
Matej Habrnal fa1950
+++ b/src/lib/problem_api_dbus.c
Matej Habrnal fa1950
@@ -227,3 +227,78 @@ problem_data_t *get_full_problem_data_over_dbus(const char *problem_dir_path)
Matej Habrnal fa1950
 
Matej Habrnal fa1950
     return pd;
Matej Habrnal fa1950
 }
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+int test_exist_over_dbus(const char *problem_id, const char *element_name)
Matej Habrnal fa1950
+{
Matej Habrnal fa1950
+    INITIALIZE_LIBABRT();
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    GDBusProxy *proxy = get_dbus_proxy();
Matej Habrnal fa1950
+    if (!proxy)
Matej Habrnal fa1950
+        return -1;
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    GError *error = NULL;
Matej Habrnal fa1950
+    GVariant *result = g_dbus_proxy_call_sync(proxy,
Matej Habrnal fa1950
+                                            "TestElementExists",
Matej Habrnal fa1950
+                                            g_variant_new("(ss)", problem_id, element_name),
Matej Habrnal fa1950
+                                            G_DBUS_CALL_FLAGS_NONE,
Matej Habrnal fa1950
+                                            -1,
Matej Habrnal fa1950
+                                            NULL,
Matej Habrnal fa1950
+                                            &error);
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    if (error)
Matej Habrnal fa1950
+    {
Matej Habrnal fa1950
+        error_msg(_("Can't test whether the element exists over abrt-dbus: %s"), error->message);
Matej Habrnal fa1950
+        g_error_free(error);
Matej Habrnal fa1950
+        return -1;
Matej Habrnal fa1950
+    }
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    gboolean retval;
Matej Habrnal fa1950
+    g_variant_get(result, "(b)", &retval);
Matej Habrnal fa1950
+    g_variant_unref(result);
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    return retval;
Matej Habrnal fa1950
+}
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+char *load_text_over_dbus(const char *problem_id, const char *element_name)
Matej Habrnal fa1950
+{
Matej Habrnal fa1950
+    INITIALIZE_LIBABRT();
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    GDBusProxy *proxy = get_dbus_proxy();
Matej Habrnal fa1950
+    if (!proxy)
Matej Habrnal fa1950
+        return ERR_PTR;
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    GVariantBuilder *builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
Matej Habrnal fa1950
+    g_variant_builder_add(builder, "s", element_name);
Matej Habrnal fa1950
+    GVariant *params = g_variant_new("(sas)", problem_id, builder);
Matej Habrnal fa1950
+    g_variant_builder_unref(builder);
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    GError *error = NULL;
Matej Habrnal fa1950
+    GVariant *result = g_dbus_proxy_call_sync(proxy,
Matej Habrnal fa1950
+                                            "GetInfo",
Matej Habrnal fa1950
+                                            params,
Matej Habrnal fa1950
+                                            G_DBUS_CALL_FLAGS_NONE,
Matej Habrnal fa1950
+                                            -1,
Matej Habrnal fa1950
+                                            NULL,
Matej Habrnal fa1950
+                                            &error);
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    if (error)
Matej Habrnal fa1950
+    {
Matej Habrnal fa1950
+        error_msg(_("Can't get problem data from abrt-dbus: %s"), error->message);
Matej Habrnal fa1950
+        g_error_free(error);
Matej Habrnal fa1950
+        return ERR_PTR;
Matej Habrnal fa1950
+    }
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    GVariant *values = g_variant_get_child_value(result, 0);
Matej Habrnal fa1950
+    g_variant_unref(result);
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    char *retval = NULL;
Matej Habrnal fa1950
+    if (g_variant_n_children(values) == 1)
Matej Habrnal fa1950
+    {
Matej Habrnal fa1950
+        GVariant *contents = g_variant_get_child_value(values, 0);
Matej Habrnal fa1950
+        gchar *key;
Matej Habrnal fa1950
+        g_variant_get(contents, "{&ss}", &key, &retval);
Matej Habrnal fa1950
+    }
Matej Habrnal fa1950
+
Matej Habrnal fa1950
+    g_variant_unref(values);
Matej Habrnal fa1950
+    return retval;
Matej Habrnal fa1950
+}
Matej Habrnal fa1950
-- 
Matej Habrnal fa1950
2.1.0
Matej Habrnal fa1950