Ejemplo n.º 1
0
static gboolean
ipcam_event_input_msg_handler_read_param(IpcamEventInputMsgHandler *handler, JsonBuilder *builder, const gchar *name)
{
    IpcamIConfig *iconfig;
    g_object_get(G_OBJECT(handler), "app", &iconfig, NULL);
    gboolean ret = FALSE;
    GVariant *value = NULL;

    value = ipcam_iconfig_read(iconfig, IPCAM_EVENT_INPUT_TYPE, name, "enable");
    if (value)
    {
        json_builder_set_member_name(builder, "enable");
        json_builder_add_boolean_value(builder, g_variant_get_boolean(value));
        g_variant_unref(value);
    }
    
    value = ipcam_iconfig_read(iconfig, IPCAM_EVENT_INPUT_TYPE, name, "schedules");
    if (value)
    {
        Schedules *sche;
        if (IS_64BIT_MACHINE)
        {
            sche = GSIZE_TO_POINTER(g_variant_get_uint64(value));
        }
        else
        {
            sche = GSIZE_TO_POINTER(g_variant_get_uint32(value));
        }
        gint i = 0;
        json_builder_set_member_name(builder, "schedules");
        json_builder_begin_object(builder);
        if (sche)
        {            
            for (i = ENUM_MON; i < ENUM_WEEKDAY_LAST; i++)
            {
                if (sche->schedule[i])
                {
                    json_builder_set_member_name(builder, weekday_name[i]);
                    json_builder_add_string_value(builder, sche->schedule[i]);
                    g_free(sche->schedule[i]);
                }
            }
            g_free(sche);
        }
        json_builder_end_object(builder);

        g_variant_unref(value);
    }
    
    return ret;
}
static void insertToJson(gpointer name, gpointer v, gpointer user_data)
{
    JsonBuilder *builder = (JsonBuilder *)user_data;

    if (name != NULL)
        json_builder_set_member_name (builder, (const char *)name);

    switch (G_VALUE_TYPE(v)) {
    case G_TYPE_BOOLEAN:
        json_builder_add_boolean_value (builder, g_value_get_boolean((GValue *)v));
        break;
    case G_TYPE_STRING:
        json_builder_add_string_value (builder, g_value_get_string((GValue *)v));
        break;
    case G_TYPE_INT:
        json_builder_add_int_value (builder, g_value_get_int((GValue *)v));
        break;
    case G_TYPE_INT64:
        json_builder_add_int_value (builder, g_value_get_int64((GValue *)v));
        break;
    case G_TYPE_DOUBLE:
        json_builder_add_double_value (builder, g_value_get_double((GValue *)v));
        break;
    default:
        if (G_VALUE_TYPE(v) == G_TYPE_HASH_TABLE)
        {
            json_builder_begin_object (builder);
            GHashTable *map = (GHashTable *) g_value_get_boxed((GValue *)v);
            g_hash_table_foreach (map, insertToJson, builder);
            json_builder_end_object (builder);
        }
        else if (G_VALUE_TYPE(v) == G_TYPE_VALUE_ARRAY)
        {
            json_builder_begin_array (builder);
            GValueArray *array = (GValueArray *) g_value_get_boxed((GValue *)v);
            for (guint i = 0; i < array->n_values; i++)
            {
               GValue *value = g_value_array_get_nth(array, i);
               insertToJson(0, value, builder);
            }
            json_builder_end_array (builder);
        }
        else
        {
            g_print("unhandled type %s\n", G_VALUE_TYPE_NAME(v));
            json_builder_add_null_value (builder);
        }
        break;
    }
}
Ejemplo n.º 3
0
static JsonBuilder *
_json_builder_add_gvariant (JsonBuilder *builder,
                            GVariant *value)
{
  g_return_val_if_fail (JSON_IS_BUILDER (builder), builder);

  g_variant_ref_sink (value);

  switch (g_variant_classify (value))
    {
    case G_VARIANT_CLASS_BOOLEAN:
      json_builder_add_boolean_value (builder, g_variant_get_boolean (value));
      break;

    case G_VARIANT_CLASS_BYTE:
      json_builder_add_int_value (builder, g_variant_get_byte (value));
      break;

    case G_VARIANT_CLASS_INT16:
      json_builder_add_int_value (builder, g_variant_get_int16 (value));
      break;

    case G_VARIANT_CLASS_UINT16:
      json_builder_add_int_value (builder, g_variant_get_uint16 (value));
      break;

    case G_VARIANT_CLASS_INT32:
      json_builder_add_int_value (builder, g_variant_get_int32 (value));
      break;

    case G_VARIANT_CLASS_UINT32:
      json_builder_add_int_value (builder, g_variant_get_uint32 (value));
      break;

    case G_VARIANT_CLASS_INT64:
      json_builder_add_int_value (builder, g_variant_get_int64 (value));
      break;

    case G_VARIANT_CLASS_UINT64:
      json_builder_add_int_value (builder, g_variant_get_uint64 (value));
      break;

    case G_VARIANT_CLASS_HANDLE:
      json_builder_add_int_value (builder, g_variant_get_handle (value));
      break;

    case G_VARIANT_CLASS_DOUBLE:
      json_builder_add_double_value (builder, g_variant_get_double (value));
      break;

    case G_VARIANT_CLASS_STRING:      /* explicit fall-through */
    case G_VARIANT_CLASS_OBJECT_PATH: /* explicit fall-through */
    case G_VARIANT_CLASS_SIGNATURE:
      json_builder_add_string_value (builder, g_variant_get_string (value, NULL));
      break;

     /* TODO: */
    case G_VARIANT_CLASS_VARIANT:
      {
        GVariant *child;
        child = g_variant_get_variant (value);
        _json_builder_add_gvariant (builder, child);
        g_variant_unref (child);
      }
      break;

    case G_VARIANT_CLASS_MAYBE:
      g_assert_not_reached ();
      break;

    case G_VARIANT_CLASS_ARRAY:
      {
        const GVariantType *type;
        const GVariantType *element_type;

        type = g_variant_get_type (value);
        element_type = g_variant_type_element (type);
        if (g_variant_type_is_dict_entry (element_type))
          {
            GVariantIter iter;
            GVariant *child;

            json_builder_begin_object (builder);

            g_variant_iter_init (&iter, value);
            while ((child = g_variant_iter_next_value (&iter)) != NULL)
              {
                _json_builder_add_gvariant (builder, child);
                g_variant_unref (child);
              }

            json_builder_end_object (builder);
          }
        else
          {
            GVariantIter iter;
            GVariant *child;

            json_builder_begin_array (builder);

            g_variant_iter_init (&iter, value);
            while ((child = g_variant_iter_next_value (&iter)) != NULL)
              {
                _json_builder_add_gvariant (builder, child);
                g_variant_unref (child);
              }

            json_builder_end_array (builder);
          }
      }
      break;

    case G_VARIANT_CLASS_TUPLE:
      {
        GVariantIter iter;
        GVariant *child;

        json_builder_begin_array (builder);

        g_variant_iter_init (&iter, value);
        while ((child = g_variant_iter_next_value (&iter)) != NULL)
          {
            _json_builder_add_gvariant (builder, child);
            g_variant_unref (child);
          }

        json_builder_end_array (builder);
      }
      break;

    case G_VARIANT_CLASS_DICT_ENTRY:
      {
        GVariant *dict_key;
        GVariant *dict_value;
        gchar *dict_key_string;

        dict_key = g_variant_get_child_value (value, 0);
        dict_value = g_variant_get_child_value (value, 1);

        if (g_variant_is_of_type (dict_key, G_VARIANT_TYPE("s")))
          dict_key_string = g_variant_dup_string (dict_key, NULL);
        else
          dict_key_string = g_variant_print (dict_key, FALSE);

        json_builder_set_member_name (builder, dict_key_string);
        _json_builder_add_gvariant (builder, dict_value);
        g_free (dict_key_string);

        g_variant_unref (dict_key);
        g_variant_unref (dict_value);
      }
      break;
    }

  g_variant_unref (value);

  return builder;
}
Ejemplo n.º 4
0
static void directory_foreach_file(gpointer data, gpointer json_builder)
{
	file_entry_t *file = (file_entry_t *)data;
	
	json_builder_begin_object(json_builder);
	json_builder_set_member_name(json_builder, "name");
	if(file != NULL)
	{
		json_builder_add_string_value(json_builder, file->name);
	}
	else
	{
		json_builder_add_string_value(json_builder, "Error");
	}
	json_builder_set_member_name(json_builder, "size");
	json_builder_add_int_value(json_builder, file->size);
	json_builder_set_member_name(json_builder, "hidden");
	json_builder_add_boolean_value(json_builder, file->hidden);
	json_builder_set_member_name(json_builder, "type");
	switch(file->type)
	{
		
		case G_FILE_TYPE_REGULAR:
		{
			json_builder_add_string_value(json_builder, "regular");
			break;
		}
		case G_FILE_TYPE_DIRECTORY:
		{
			json_builder_add_string_value(json_builder, "directory");
			break;
		}
		case G_FILE_TYPE_SYMBOLIC_LINK:
		{
			json_builder_add_string_value(json_builder, "symlink");
			break;
		}
		case G_FILE_TYPE_SPECIAL:
		{
			json_builder_add_string_value(json_builder, "special");
			break;
		}
		case G_FILE_TYPE_SHORTCUT:
		{
			json_builder_add_string_value(json_builder, "shortcut");
			break;
		}
		case G_FILE_TYPE_MOUNTABLE:
		{
			json_builder_add_string_value(json_builder, "mountable");
			break;
		}
		case G_FILE_TYPE_UNKNOWN: default:
		{
			json_builder_add_string_value(json_builder, "unknown");
			break;
		}
	}
	json_builder_set_member_name(json_builder, "last_modified");
	json_builder_begin_array(json_builder);
	json_builder_add_int_value(json_builder, file->mod_time_sec);
	json_builder_add_int_value(json_builder, file->mod_time_usec);
	json_builder_end_array(json_builder);
	
	json_builder_set_member_name(json_builder, "mime");
	json_builder_add_string_value(json_builder, file->mime);
	
	json_builder_set_member_name(json_builder, "access");
	json_builder_begin_array(json_builder);
	json_builder_add_boolean_value(json_builder, file->access_read);
	json_builder_add_boolean_value(json_builder, file->access_write);
	json_builder_add_boolean_value(json_builder, file->access_execute);
	json_builder_end_array(json_builder);
	
	json_builder_set_member_name(json_builder, "owner");
	json_builder_add_string_value(json_builder, file->owner);
	
	json_builder_set_member_name(json_builder, "group");
	json_builder_add_string_value(json_builder, file->group);
	
	json_builder_end_object(json_builder);
}
Ejemplo n.º 5
0
/* Save state */
static gboolean save_state(gpointer data) {
    queue_status qs;
    gboolean repeat, shuffle;
    int cur_track;
    GArray* tracks = NULL;

    JsonBuilder* jb = NULL;
    JsonGenerator* gen = NULL;
    gchar* out = NULL;

    GError* err = NULL;

    g_debug("savestate: starting to save the current state...");

    /* Get data about the current state */
    qs = queue_get_status(NULL, &cur_track, NULL);
    tracks = queue_tracks();
    repeat = queue_get_repeat();
    shuffle = queue_get_shuffle();

    /* Save them in JSON */
    jb = json_builder_new();
    json_builder_begin_object(jb);

    json_builder_set_member_name(jb, "status");
    switch (qs) {
    case STOPPED:
        json_builder_add_string_value(jb, "stopped"); break;
    case PLAYING:
        json_builder_add_string_value(jb, "playing"); break;
    case PAUSED:
        json_builder_add_string_value(jb, "paused"); break;
    default:
        g_warning("savestate: bad queue_status value: %d", qs);
        goto savestate_clean;
    }

    json_builder_set_member_name(jb, "repeat");
    json_builder_add_boolean_value(jb, repeat);

    json_builder_set_member_name(jb, "shuffle");
    json_builder_add_boolean_value(jb, shuffle);

    json_builder_set_member_name(jb, "current_track");
    json_builder_add_int_value(jb, cur_track);

    json_builder_set_member_name(jb, "tracks");
    json_builder_begin_array(jb);

    int i;
    for (i=0; i < tracks->len; i++) {
        sp_track* tr = g_array_index(tracks, sp_track*, i);
        if (!sp_track_is_loaded(tr)) {
            g_warning("savestate: queue track %d is not loaded", i);
            goto savestate_clean;
        }

        sp_link* lnk = sp_link_create_from_track(tr, 0);
        gchar uri[1024];
        int uri_len = sp_link_as_string(lnk, uri, 1024);
        sp_link_release(lnk);
        if (uri_len >= 1024) {
            g_warning("savestate: URI too long for track %d", i);
            goto savestate_clean;
        }

        json_builder_add_string_value(jb, uri);
    }
    json_builder_end_array(jb);
    json_builder_end_object(jb);

    /* Store JSON to file */
    gen = json_generator_new();
    json_generator_set_root(gen, json_builder_get_root(jb));
    out = json_generator_to_data(gen, NULL);

    if (g_file_set_contents(g_state_file_path, out, -1, &err))
        g_debug("savestate: state saved to %s.", g_state_file_path);
    else
        g_warning("savestate: unable to dump status to file: %s", err->message);

 savestate_clean:
    if (tracks)
        g_array_free(tracks, TRUE);
    if (gen)
        g_object_unref(gen);
    if (jb)
        g_object_unref(jb);
    if (out)
        g_free(out);
    return FALSE;
}
Ejemplo n.º 6
0
static void
build_json (JsonBuilder *builder,
            GVariant *value)
{
  const GVariantType *type;
  const GVariantType *element_type;

  g_variant_ref_sink (value);

  switch (g_variant_classify (value))
    {
    case G_VARIANT_CLASS_BOOLEAN:
      json_builder_add_boolean_value (builder, g_variant_get_boolean (value));
      break;

    case G_VARIANT_CLASS_BYTE:
      json_builder_add_int_value (builder, g_variant_get_byte (value));
      break;

    case G_VARIANT_CLASS_INT16:
      json_builder_add_int_value (builder, g_variant_get_int16 (value));
      break;

    case G_VARIANT_CLASS_UINT16:
      json_builder_add_int_value (builder, g_variant_get_uint16 (value));
      break;

    case G_VARIANT_CLASS_INT32:
      json_builder_add_int_value (builder, g_variant_get_int32 (value));
      break;

    case G_VARIANT_CLASS_UINT32:
      json_builder_add_int_value (builder, g_variant_get_uint32 (value));
      break;

    case G_VARIANT_CLASS_INT64:
      json_builder_add_int_value (builder, g_variant_get_int64 (value));
      break;

    case G_VARIANT_CLASS_UINT64:
      json_builder_add_int_value (builder, g_variant_get_uint64 (value));
      break;

    case G_VARIANT_CLASS_HANDLE:
      json_builder_add_int_value (builder, g_variant_get_handle (value));
      break;

    case G_VARIANT_CLASS_DOUBLE:
      json_builder_add_double_value (builder, g_variant_get_double (value));
      break;

    case G_VARIANT_CLASS_STRING:      /* explicit fall-through */
    case G_VARIANT_CLASS_OBJECT_PATH: /* explicit fall-through */
    case G_VARIANT_CLASS_SIGNATURE:
      {
        /* HACK: We can't use json_builder_add_string_value here since
           it turns empty strings into 'null' values inside arrays.

           https://bugzilla.gnome.org/show_bug.cgi?id=730803
        */
        JsonNode *string_element = json_node_alloc ();
        json_node_init_string (string_element, g_variant_get_string (value, NULL));
        json_builder_add_value (builder, string_element);
      }
      break;

    case G_VARIANT_CLASS_VARIANT:
      build_json_variant (builder, value);
      break;

    case G_VARIANT_CLASS_ARRAY:
      type = g_variant_get_type (value);
      element_type = g_variant_type_element (type);
      if (g_variant_type_is_dict_entry (element_type))
        build_json_dictionary (builder, element_type, value);
      else
        build_json_array_or_tuple (builder, value);
      break;

    case G_VARIANT_CLASS_TUPLE:
      build_json_array_or_tuple (builder, value);
      break;

    case G_VARIANT_CLASS_DICT_ENTRY:
    case G_VARIANT_CLASS_MAYBE:
    default:
      g_return_if_reached ();
      break;
    }

  g_variant_unref (value);
}
Ejemplo n.º 7
0
static void
add_bool_member (JsonBuilder *bob, const char* elm, gboolean b)
{
	bob = json_builder_set_member_name (bob, elm);
	bob = json_builder_add_boolean_value (bob, b);
}