#include <string.h>
#include <time.h>
+static gboolean
+start_service_by_name(void)
+{
+ GError *error = NULL;
+ GVariant *var;
+ GDBusConnection *conn;
+
+ conn = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error);
+ if (error) {
+ fprintf(stderr, "Could not get session bus connection: %s\n",
+ error->message);
+ g_error_free(error);
+ return FALSE;
+ }
+
+ var = g_dbus_connection_call_sync(conn,
+ "org.freedesktop.DBus",
+ "/org/freedesktop/DBus",
+ "org.freedesktop.DBus",
+ "StartServiceByName",
+ g_variant_new("(su)",
+ "org.lightmediascanner", 0),
+ G_VARIANT_TYPE("(u)"),
+ G_DBUS_CALL_FLAGS_NONE,
+ 10000,
+ NULL,
+ &error);
+ g_object_unref(conn);
+ if (var)
+ g_variant_unref(var);
+
+ if (error) {
+ fprintf(stderr, "Could not start org.lightmediascanner: %s\n",
+ error->message);
+ g_error_free(error);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
struct app {
int ret;
int argc;
app->ret = EXIT_SUCCESS;
g_main_loop_quit(app->loop);
}
+ g_variant_unref(value);
break;
- }
+ } else
+ g_variant_unref(value);
}
g_variant_iter_free(itr);
}
}
static void
+on_signal(GDBusProxy *proxy, gchar *sender, gchar *signal, GVariant *params, gpointer user_data)
+{
+ if (g_str_equal(signal, "ScanProgress")) {
+ const gchar *category = NULL, *path = NULL;
+ guint64 uptodate = 0, processed = 0, deleted = 0,
+ skipped = 0, errors = 0;
+
+ g_variant_get(params, "(&s&sttttt)",
+ &category,
+ &path,
+ &uptodate,
+ &processed,
+ &deleted,
+ &skipped,
+ &errors);
+
+ printf("Scan Progress %s:%s uptodate=%"G_GUINT64_FORMAT", "
+ "processed=%"G_GUINT64_FORMAT", deleted=%"G_GUINT64_FORMAT", "
+ "skipped=%"G_GUINT64_FORMAT", errors=%"G_GUINT64_FORMAT"\n",
+ category, path, uptodate, processed, deleted, skipped, errors);
+ }
+}
+
+static void
populate_scan_params(gpointer key, gpointer value, gpointer user_data)
{
const char *category = key;
g_signal_connect(app->proxy, "g-properties-changed",
G_CALLBACK(on_properties_changed_check_scan),
app);
+ g_signal_connect(app->proxy, "g-signal",
+ G_CALLBACK(on_signal),
+ app);
categories = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, do_free_array);
for (i = 0; i < app->argc; i++) {
return EXIT_FAILURE;
}
+ if (!start_service_by_name())
+ return EXIT_FAILURE;
+
app.timer = NULL;
app.loop = g_main_loop_new(NULL, FALSE);
app.proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SESSION,