GtkWidget *trg_json_widget_check_new(GList ** wl, JsonObject * obj,
                                     const gchar * key,
                                     const gchar * label,
                                     GtkWidget * toggleDep)
{
    GtkWidget *w = gtk_check_button_new_with_mnemonic(label);
    trg_json_widget_desc *wd = g_new0(trg_json_widget_desc, 1);

    wd->saveFunc = trg_json_widget_check_save;
    wd->key = g_strdup(key);
    wd->widget = w;

    if (toggleDep) {
        gtk_widget_set_sensitive(w,
                                 gtk_toggle_button_get_active
                                 (GTK_TOGGLE_BUTTON(toggleDep)));
        g_signal_connect(G_OBJECT(toggleDep), "toggled",
                         G_CALLBACK(toggle_active_arg_is_sensitive), w);
    }

    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w),
                                 json_object_get_boolean_member(obj, key));

    *wl = g_list_append(*wl, wd);

    return w;
}
Esempio n. 2
0
static dt_gphoto_album_t *_json_new_album(JsonObject *obj)
{
  // handle on writable albums (in Google Photo only albums created by the API are writeable via the API)

  if(json_object_has_member(obj, "isWriteable"))
    if(json_object_get_boolean_member(obj, "isWriteable"))
    {
      dt_gphoto_album_t *album = gphoto_album_init();
      if(album == NULL) goto error;

      const char *id = json_object_get_string_member(obj, "id");
      const char *name = json_object_get_string_member(obj, "title");
      const int size = json_object_has_member(obj, "mediaItemsCount")
        ? json_object_get_int_member(obj, "mediaItemsCount")
        : 0;

      if(id == NULL || name == NULL)
      {
        gphoto_album_destroy(album);
        goto error;
      }

      album->id = g_strdup(id);
      album->name = g_strdup(name);
      album->size = size;

      return album;
    }

 error:
  return NULL;
}
static gboolean
ipcam_event_input_msg_handler_update_param(IpcamEventInputMsgHandler *handler, const gchar *name, JsonObject *value_obj)
{
    IpcamIConfig *iconfig;
    g_object_get(G_OBJECT(handler), "app", &iconfig, NULL);
    GList *members, *item;
    Schedules *sche = g_new(Schedules, 1);
    GVariant *value = NULL;
    gboolean ret = FALSE;

    members = json_object_get_members(value_obj);
    for (item = g_list_first(members); item; item = g_list_next(item))
    {
        const gchar *sub_name = item->data;
        if (g_str_equal(sub_name, "enable"))
        {
            value = g_variant_new_boolean(json_object_get_boolean_member(value_obj, sub_name));
        }
        else if (g_str_equal(sub_name, "schedules"))
        {
            gint i = 0;
            JsonObject *sub_obj = json_object_get_object_member(value_obj, sub_name);
            for (i = ENUM_MON; i < ENUM_WEEKDAY_LAST; i++)
            {
                if (json_object_has_member(sub_obj, weekday_name[i]))
                {
                    sche->schedule[i] = (gchar *)json_object_get_string_member(sub_obj, weekday_name[i]);
                }
                else
                {
                    sche->schedule[i] = g_malloc0(1);
                }
            }
            if (IS_64BIT_MACHINE)
            {
                value = g_variant_new_uint64(GPOINTER_TO_SIZE(sche));
            }
            else
            {
                value = g_variant_new_uint32(GPOINTER_TO_SIZE(sche));
            }
        }
        else
        {
            g_warn_if_reached();
        }

        if (value)
        {
            ret = ipcam_iconfig_update(iconfig, IPCAM_EVENT_INPUT_TYPE, name, sub_name, value);
            g_variant_unref(value);
            value = NULL;
        }
    }
    g_free(sche);
    g_list_free(members);

    return ret;
}
Esempio n. 4
0
void cb_user_identity_parse (CbUserIdentity *id,
                             JsonObject     *user_obj)
{
  id->id = json_object_get_int_member (user_obj, "id");
  id->screen_name = g_strdup (json_object_get_string_member (user_obj, "screen_name"));
  id->user_name = cb_utils_escape_ampersands (json_object_get_string_member (user_obj, "name"));
  id->verified = json_object_get_boolean_member (user_obj, "verified");
}
/**
 * couchdb_struct_field_get_boolean_field:
 * @sf: A #CouchdbStructField object
 * @field: Name of the field
 *
 * Retrieve the value of a boolean field from the given struct field.
 *
 * Return value: The value of the given field.
 */
gboolean
couchdb_struct_field_get_boolean_field (CouchdbStructField *sf, const char *field)
{
	g_return_val_if_fail (sf != NULL, FALSE);
	g_return_val_if_fail (field != NULL, FALSE);

	return json_object_get_boolean_member (sf->json_object, field);
}
Esempio n. 6
0
/* FIXME: an error exit at field i leaves fields [0..i) modified. */
bool format_from_json(
	void *dest,
	JsonObject *obj,
	const struct field_desc *fields,
	size_t num_fields,
	GError **err_p)
{
	for(size_t i=0; i < num_fields; i++) {
		const char *name = fields[i].name;
		JsonNode *node = json_object_get_member(obj, name);
		if(node == NULL) {
			/* not present. skip. */
			continue;
		}
		bool null_ok = islower(fields[i].type),
			is_null = json_node_is_null(node);
		if(!null_ok && is_null) {
			g_set_error(err_p, 0, 0,
				"%s: field `%s' is null, but not allowed to",
				__func__, name);
			return false;
		}
		void *ptr = dest + fields[i].offset;
		switch(tolower(fields[i].type)) {
		case 'i':
			*(uint64_t *)ptr = is_null ? 0 : json_object_get_int_member(obj, name);
			break;
		case 'b':
			*(bool *)ptr = is_null ? false : json_object_get_boolean_member(obj, name);
			break;
		case 's':
			g_free(*(char **)ptr);
			*(char **)ptr = is_null ? NULL : g_strdup(json_object_get_string_member(obj, name));
			break;
		case 't': {
			GDateTime **dt_p = ptr;
			if(*dt_p != NULL) {
				g_date_time_unref(*dt_p);
				*dt_p = NULL;
			}
			*dt_p = parse_datetime(json_object_get_string_member(obj, name));
			break;
			}
		default:
			assert(false);
		}
	}

	return true;
}
Esempio n. 7
0
END_TEST

START_TEST (test_cometd_msg_bad_connect_new)
{
  cometd* h = cometd_new();
  cometd_conn* conn = h->conn;

  cometd_conn_set_client_id(conn, "testid");
  cometd_conn_set_transport(conn, &TEST_TRANSPORT);

  JsonNode* msg   = cometd_msg_bad_connect_new(h);
  JsonObject* obj = json_node_get_object(msg);

  const gboolean successful = json_object_get_boolean_member(obj, COMETD_MSG_SUCCESSFUL_FIELD);
  fail_if(successful);
  
  json_node_free(msg);
  cometd_destroy(h);
}
Esempio n. 8
0
void ipcam_itrain_video_occlusion_handler(IpcamITrain *itrain, JsonNode *body)
{
    IpcamITrainPrivate *priv = ipcam_itrain_get_instance_private(itrain);
    JsonObject *evt_obj = json_object_get_object_member(json_node_get_object(body), "event");
    gint region = -1;
    gint state = -1;

    g_return_if_fail(evt_obj);

    if (json_object_has_member(evt_obj, "region"))
        region = json_object_get_int_member(evt_obj, "region");
    if (json_object_has_member(evt_obj, "state"))
        state = json_object_get_boolean_member(evt_obj, "state");

    if (region >= 0 && state >= 0) {
		gchar notify[64];
		snprintf(notify, sizeof(notify),
				 "OCCLUSION %d %d\n",
				 region, state);
		ipcam_itrain_server_send_notify(priv->itrain_server, notify, strlen(notify));
    }
}
Esempio n. 9
0
/**
 * Takes a JsonNode and does its best to determine if
 * it's an ack payload with a successful ack message in
 * it.
 */
gboolean
cometd_msg_is_successful(JsonNode* node)
{
    JsonObject* msg = NULL;
    JsonArray* array = NULL;
    gboolean success = FALSE;

    switch (JSON_NODE_TYPE (node))
    {
    case JSON_NODE_ARRAY:
        array = json_node_get_array(node);
        msg = json_array_get_length(array) > 0 ?
              json_array_get_object_element(array, 0) : NULL;
        break;
    case JSON_NODE_OBJECT:
        msg = json_node_get_object(node);
        break;
    }

    if (msg != NULL && json_object_has_member(msg, COMETD_MSG_SUCCESSFUL_FIELD))
        success = json_object_get_boolean_member(msg, COMETD_MSG_SUCCESSFUL_FIELD);

    return success;
}
Esempio n. 10
0
void
cb_tweet_load_from_json (CbTweet   *tweet,
                         JsonNode  *status_node,
                         gint64     account_id,
                         GDateTime *now)
{
  JsonObject *status;
  JsonObject *user;
  gboolean has_media;

  g_return_if_fail (CB_IS_TWEET (tweet));
  g_return_if_fail (status_node != NULL);
  g_return_if_fail (now != NULL);

  status = json_node_get_object (status_node);
  user = json_object_get_object_member (status, "user");

  tweet->id = json_object_get_int_member (status, "id");
  tweet->retweet_count = (guint) json_object_get_int_member (status, "retweet_count");
  tweet->favorite_count = (guint) json_object_get_int_member (status, "favorite_count");


  cb_mini_tweet_parse (&tweet->source_tweet, status);
  has_media = json_array_size (json_object_get_object_member (status, "entities"), "media") > 0;

  if (json_object_has_member (status, "retweeted_status"))
    {
      JsonObject *rt      = json_object_get_object_member (status, "retweeted_status");
      JsonObject *rt_user = json_object_get_object_member (rt, "user");

      tweet->retweeted_tweet = g_malloc (sizeof(CbMiniTweet));
      cb_mini_tweet_init (tweet->retweeted_tweet);
      cb_mini_tweet_parse (tweet->retweeted_tweet, rt);
      cb_mini_tweet_parse_entities (tweet->retweeted_tweet, rt);

      tweet->avatar_url = g_strdup (json_object_get_string_member (rt_user, "profile_image_url"));
      if (json_object_get_boolean_member (rt_user, "protected"))
        tweet->state |= CB_TWEET_STATE_PROTECTED;

      if (json_object_get_boolean_member (rt_user, "verified"))
        tweet->state |= CB_TWEET_STATE_VERIFIED;

      if (usable_json_value (rt, "possibly_sensitive") &&
          json_object_get_boolean_member (rt, "possibly_sensitive"))
        tweet->state |= CB_TWEET_STATE_NSFW;
    }
  else
    {
      cb_mini_tweet_parse_entities (&tweet->source_tweet, status);
      tweet->avatar_url = g_strdup (json_object_get_string_member (user, "profile_image_url"));

      if (json_object_get_boolean_member (user, "protected"))
        tweet->state |= CB_TWEET_STATE_PROTECTED;

      if (json_object_get_boolean_member (user, "verified"))
        tweet->state |= CB_TWEET_STATE_VERIFIED;

      if (usable_json_value (status, "possibly_sensitive") &&
          json_object_get_boolean_member (status, "possibly_sensitive"))
        tweet->state |= CB_TWEET_STATE_NSFW;
    }

  if (json_object_has_member (status, "quoted_status") && !has_media)
    {
      JsonObject *quote = json_object_get_object_member (status, "quoted_status");
      tweet->quoted_tweet = g_malloc (sizeof (CbMiniTweet));
      cb_mini_tweet_init (tweet->quoted_tweet);
      cb_mini_tweet_parse (tweet->quoted_tweet, quote);
      cb_mini_tweet_parse_entities (tweet->quoted_tweet, quote);

      if (usable_json_value (quote, "possibly_sensitive") &&
          json_object_get_boolean_member (quote, "possibly_sensitive"))
        tweet->state |= CB_TWEET_STATE_NSFW;
      else
        tweet->state &= ~CB_TWEET_STATE_NSFW;
    }
  else if (tweet->retweeted_tweet != NULL &&
           tweet->retweeted_tweet->n_medias == 0 &&
           json_object_has_member (json_object_get_object_member (status, "retweeted_status"), "quoted_status")) {
      JsonObject *quote = json_object_get_object_member (json_object_get_object_member (status, "retweeted_status"),
                                                         "quoted_status");

      tweet->quoted_tweet = g_malloc (sizeof (CbMiniTweet));
      cb_mini_tweet_init (tweet->quoted_tweet);
      cb_mini_tweet_parse (tweet->quoted_tweet, quote);
      cb_mini_tweet_parse_entities (tweet->quoted_tweet, quote);

      if (usable_json_value (quote, "possibly_sensitive") &&
          json_object_get_boolean_member (quote, "possibly_sensitive"))
        tweet->state |= CB_TWEET_STATE_NSFW;
      else
        tweet->state &= ~CB_TWEET_STATE_NSFW;
    }

  if (json_object_get_boolean_member (status, "favorited"))
    tweet->state |= CB_TWEET_STATE_FAVORITED;

  if (json_object_has_member (status, "current_user_retweet"))
    {
      JsonObject *cur_rt = json_object_get_object_member (status, "current_user_retweet");
      tweet->my_retweet = json_object_get_int_member (cur_rt, "id");
      tweet->state |= CB_TWEET_STATE_RETWEETED;
    }
  else if (json_object_get_boolean_member (status, "retweeted") ||
           (tweet->retweeted_tweet != NULL && tweet->source_tweet.author.id == account_id))
    {
      /* The 'retweeted' flag is not reliable so we additionally check if the tweet is authored
         by the authenticating user */
      tweet->my_retweet = tweet->id;
      tweet->state |= CB_TWEET_STATE_RETWEETED;
    }


#ifdef DEBUG
  {
    JsonGenerator *generator = json_generator_new ();
    json_generator_set_root (generator, status_node);
    json_generator_set_pretty (generator, TRUE);
    tweet->json_data = json_generator_to_data (generator, NULL);

    g_object_unref (generator);
  }
#endif
}
Esempio n. 11
0
gboolean torrent_get_download_limited(JsonObject * t)
{
    return json_object_get_boolean_member(t, FIELD_DOWNLOAD_LIMITED);
}
Esempio n. 12
0
static void
pb_got_everything(PushBulletAccount *pba, JsonNode *node, gpointer user_data)
{
	JsonObject *rootobj = json_node_get_object(node);
	JsonArray *devices = json_object_has_member(rootobj, "devices") ? json_object_get_array_member(rootobj, "devices") : NULL;
	JsonArray *pushes = json_object_has_member(rootobj, "pushes") ? json_object_get_array_member(rootobj, "pushes") : NULL;
	JsonArray *contacts = json_object_has_member(rootobj, "contacts") ? json_object_get_array_member(rootobj, "contacts") : NULL;
	JsonArray *chats = json_object_has_member(rootobj, "chats") ? json_object_get_array_member(rootobj, "chats") : NULL;
	JsonArray *texts = json_object_has_member(rootobj, "texts") ? json_object_get_array_member(rootobj, "texts") : NULL;
	gint i;
	guint len;
	PurpleGroup *pbgroup;
	
	pbgroup = purple_find_group("PushBullet");
	if (!pbgroup)
	{
		pbgroup = purple_group_new("PushBullet");
		purple_blist_add_group(pbgroup, NULL);
	}
	
	if (json_object_has_member(rootobj, "error")) {
		JsonObject *error = json_object_get_object_member(rootobj, "error");
		const gchar *type = json_object_get_string_member(error, "type");
		const gchar *message = json_object_get_string_member(error, "message");
		
		//TODO check type
		purple_connection_error_reason(pba->pc, PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, message);
		return;
	}
	
	if (devices != NULL) {
		for(i = 0, len = json_array_get_length(devices); i < len; i++) {
			JsonObject *device = json_array_get_object_element(devices, i);
			
			if (pba->main_sms_device == NULL && json_object_get_boolean_member(device, "has_sms")) {
				pba->main_sms_device = g_strdup(json_object_get_string_member(device, "iden"));
				purple_account_set_string(pba->account, "main_sms_device", pba->main_sms_device);
				
				pb_get_phonebook(pba, pba->main_sms_device);
				
				if (!pba->websocket) {
					pb_start_polling(pba);
				}
				
				break; //TODO handle more than one
			}
		}
	}
	
	if (pushes != NULL) {
		gint last_message_timestamp = purple_account_get_int(pba->account, "last_message_timestamp", 0);
		for(i = json_array_get_length(pushes); i > 0; i--) {
			JsonObject *push = json_array_get_object_element(pushes, i - 1);
			const gchar *type = json_object_get_string_member(push, "type");
			gdouble modified;
			time_t timestamp;
			gboolean dismissed;
			
			if (!type)
				continue;
			
			modified = json_object_get_double_member(push, "modified");
			timestamp = (time_t) modified;
			dismissed = json_object_get_boolean_member(push, "dismissed");
			
			if (timestamp <= last_message_timestamp || dismissed) {
				continue;
			}
			
			// {"active":true,"iden":"uffvytgsjApuAUIFRk","created":1.438895081423904e+09,"modified":1.438895081432786e+09,"type":"file","dismissed":false,"guid":"153b70f0-f7a6-4db9-a6f4-28b99fa416f1","direction":"self","sender_iden":"uffvytg","sender_email":"*****@*****.**","sender_email_normalized":"*****@*****.**","sender_name":"Eion Robb","receiver_iden":"uffvytg","receiver_email":"*****@*****.**","receiver_email_normalized":"*****@*****.**","target_device_iden":"uffvytgsjz7O3P0Jl6","source_device_iden":"uffvytgsjAoIRwhIL6","file_name":"IMG_20150807_084618.jpg","file_type":"image/jpeg","file_url":"https://dl.pushbulletusercontent.com/FHOZdyzfvnoYZY0DP6oK1rGKiJpWCPc0/IMG_20150807_084618.jpg","image_width":4128,"image_height":2322,"image_url":"https://lh3.googleusercontent.com/WY5TK7h3mzD32qMcnxtqt-4PrYcWW1uWDHnRW2x1oJK8mnYk2v4HbZrRjIQkiYdxMKQSdNI8GGPqfO6s6tEyuRVLzeA"}
			
			if (purple_strequal(type, "note") || purple_strequal(type, "link") || purple_strequal(type, "file")) {
				const gchar *from = json_object_get_string_member(push, "sender_email_normalized");
				const gchar *body = json_object_get_string_member(push, "body");
				const gchar *direction = json_object_get_string_member(push, "direction");
				gchar *body_html;
				
				if (from == NULL) {
					if (!json_object_has_member(push, "sender_name")) {
						purple_debug_error("pushbullet", "no sender name/email\n");
						continue;
					}
					from = json_object_get_string_member(push, "sender_name");
				}
				
				if (body && *body) {
					body_html = purple_strdup_withhtml(body);
				} else {
					const gchar *title = json_object_get_string_member(push, "title");
					if (title && *title) {
						body_html = purple_strdup_withhtml(title);
					} else {
						body_html = "Message";
					}
				}
				
				if (json_object_has_member(push, "url")) {
					gchar *body_with_link = g_strconcat("<a href=\"", json_object_get_string_member(push, "url"), "\">", body_html, "</a>", NULL);
					g_free(body_html);
					body_html = body_with_link;
					
				} else if (json_object_has_member(push, "image_url")) {
					const gchar *image_url = json_object_get_string_member(push, "image_url");
					PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, from, pba->account);
					
					if (conv == NULL)
					{
						conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, pba->account, from);
					}
					pb_download_image_to_conv(image_url, conv);
					
				} else if (json_object_has_member(push, "file_url")) {
					gchar *body_with_link;
					const gchar *file_name = json_object_get_string_member(push, "file_name");
					
					if (file_name && *file_name) {
						g_free(body_html);
						body_html = purple_strdup_withhtml(file_name);
					}
					
					body_with_link= g_strconcat("<a href=\"", json_object_get_string_member(push, "file_url"), "\">", json_object_get_string_member(push, "file_name"), "</a>", NULL);
					g_free(body_html);
					body_html = body_with_link;
				}
				
				if (direction[0] != 'o') {
					serv_got_im(pba->pc, from, body_html, PURPLE_MESSAGE_RECV, timestamp);
				} else {
					const gchar *guid = json_object_get_string_member(push, "guid");
					from = json_object_get_string_member(push, "receiver_email_normalized");
					
					if (!guid || !g_hash_table_remove(pba->sent_messages_hash, guid)) {
						PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, from, pba->account);
						if (conv == NULL)
						{
							conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, pba->account, from);
						}
						purple_conversation_write(conv, from, body_html, PURPLE_MESSAGE_SEND, timestamp);
					}
				}
				
				g_free(body_html);
			}
				
			purple_account_set_int(pba->account, "last_message_timestamp", MAX(purple_account_get_int(pba->account, "last_message_timestamp", 0), timestamp));
		}
	}
	
	if (contacts != NULL) {
		for(i = 0, len = json_array_get_length(contacts); i < len; i++) {
			JsonObject *contact = json_array_get_object_element(contacts, i);
			const gchar *email = json_object_get_string_member(contact, "email_normalized");
			const gchar *name = json_object_get_string_member(contact, "name");
			const gchar *image_url = json_object_get_string_member(contact, "image_url");
			
			PurpleBuddy *buddy = purple_find_buddy(pba->account, email);
			if (buddy == NULL)
			{
				buddy = purple_buddy_new(pba->account, email, name);
				purple_blist_add_buddy(buddy, NULL, pbgroup, NULL);
			}
			purple_prpl_got_user_status(pba->account, email, purple_primitive_get_id_from_type(PURPLE_STATUS_AVAILABLE), NULL);
		}
	}
	
	if (chats != NULL) {
		for(i = 0, len = json_array_get_length(chats); i < len; i++) {
			JsonObject *chat = json_array_get_object_element(chats, i);
			JsonObject *contact = json_object_get_object_member(chat, "with");
			const gchar *email = json_object_get_string_member(contact, "email_normalized");
			const gchar *name = json_object_get_string_member(contact, "name");
			const gchar *image_url = json_object_get_string_member(contact, "image_url");
			
			PurpleBuddy *buddy = purple_find_buddy(pba->account, email);
			if (buddy == NULL)
			{
				buddy = purple_buddy_new(pba->account, email, name);
				purple_blist_add_buddy(buddy, NULL, pbgroup, NULL);
			}
			purple_prpl_got_user_status(pba->account, email, purple_primitive_get_id_from_type(PURPLE_STATUS_AVAILABLE), NULL);
		}
	}
	
	if (texts != NULL) {
		for(i = 0, len = json_array_get_length(texts); i < len; i++) {
			JsonObject *text = json_array_get_object_element(texts, i);
		}
	}
}
Esempio n. 13
0
i3ipcCon *i3ipc_con_new(i3ipcCon *parent, JsonObject *data, i3ipcConnection *conn) {
  i3ipcCon *con;
  con = g_object_new(I3IPC_TYPE_CON, NULL);

  g_object_ref(conn);
  con->priv->conn = conn;

  if (!json_object_get_null_member(data, "percent"))
    con->priv->percent = json_object_get_double_member(data, "percent");

  if (!json_object_get_null_member(data, "window"))
    con->priv->window = json_object_get_int_member(data, "window");

  if (json_object_has_member(data, "window_properties")) {
    JsonObject *window_properties = json_object_get_object_member(data, "window_properties");

    if (json_object_has_member(window_properties, "class"))
      con->priv->window_class = g_strdup(json_object_get_string_member(window_properties, "class"));
  }

  if (json_object_has_member(data, "mark")) {
    con->priv->mark = g_strdup(json_object_get_string_member(data, "mark"));
  }

  con->priv->name = g_strdup(json_object_get_string_member(data, "name"));
  con->priv->focused = json_object_get_boolean_member(data, "focused");
  con->priv->fullscreen_mode = json_object_get_boolean_member(data, "fullscreen_mode");
  con->priv->urgent = json_object_get_boolean_member(data, "urgent");
  con->priv->layout = g_strdup(json_object_get_string_member(data, "layout"));
  con->priv->orientation = g_strdup(json_object_get_string_member(data, "orientation"));
  con->priv->current_border_width = json_object_get_int_member(data, "current_border_width");
  con->priv->border = g_strdup(json_object_get_string_member(data, "border"));
  con->priv->id = json_object_get_int_member(data, "id");

  JsonNode *con_type_node = json_object_get_member(data, "type");

  /* XXX: In the development version, the "type" property is a string of the
   * type, but in the current stable version (4.7.2) it is an integer as
   * defined in i3's data header. When the next version comes out, the case
   * where type is a number should be removed. */
  if (json_node_get_value_type(con_type_node) == G_TYPE_STRING) {
    con->priv->type = g_strdup(json_node_get_string(con_type_node));
  } else {
    int con_type_int = (int)json_node_get_int(con_type_node);
    switch (con_type_int)
    {
      case 0:
        con->priv->type = g_strdup("root");
        break;
      case 1:
        con->priv->type = g_strdup("output");
        break;
      case 2:
      case 3:
        con->priv->type = g_strdup("con");
        break;
      case 4:
        con->priv->type = g_strdup("workspace");
        break;
      case 5:
        con->priv->type = g_strdup("dockarea");
        break;
    }
  }

  if (parent) {
    g_object_ref(parent);
    con->priv->parent = parent;
  }

  JsonObject *rect_data = json_object_get_object_member(data, "rect");

  con->priv->rect->x = json_object_get_int_member(rect_data, "x");
  con->priv->rect->y = json_object_get_int_member(rect_data, "y");
  con->priv->rect->width = json_object_get_int_member(rect_data, "width");
  con->priv->rect->height = json_object_get_int_member(rect_data, "height");

  if (json_object_has_member(data, "deco_rect")) {
    JsonObject *deco_rect_data = json_object_get_object_member(data, "deco_rect");

    con->priv->deco_rect->x = json_object_get_int_member(deco_rect_data, "x");
    con->priv->deco_rect->y = json_object_get_int_member(deco_rect_data, "y");
    con->priv->deco_rect->width = json_object_get_int_member(deco_rect_data, "width");
    con->priv->deco_rect->height = json_object_get_int_member(deco_rect_data, "height");
  }

  JsonArray *nodes_array = json_object_get_array_member(data, "nodes");
  json_array_foreach_element(nodes_array, i3ipc_con_initialize_nodes, con);

  JsonArray *floating_nodes_array = json_object_get_array_member(data, "floating_nodes");
  json_array_foreach_element(floating_nodes_array, i3ipc_con_initialize_floating_nodes, con);

  JsonArray *focus_array = json_object_get_array_member(data, "focus");
  guint len = json_array_get_length(focus_array);
  for (int i = 0; i < len; i += 1) {
    con->priv->focus = g_list_append(con->priv->focus, GINT_TO_POINTER(json_array_get_int_element(focus_array, i)));
  }

  return con;
}
Esempio n. 14
0
gboolean torrent_get_is_private(JsonObject * t)
{
    return json_object_get_boolean_member(t, FIELD_ISPRIVATE);
}
Esempio n. 15
0
gboolean peer_get_is_encrypted(JsonObject * p)
{
    return json_object_get_boolean_member(p, TPEER_IS_ENCRYPTED);
}
Esempio n. 16
0
gboolean peer_get_is_uploading_to(JsonObject * p)
{
    return json_object_get_boolean_member(p, TPEER_IS_UPLOADING_TO);
}
Esempio n. 17
0
gboolean torrent_get_honors_session_limits(JsonObject * t)
{
    return json_object_get_boolean_member(t, FIELD_HONORS_SESSION_LIMITS);
}
Esempio n. 18
0
// FIXME: check for memory leaks
JSONcontext* Network::readJSON(const char* file){
   JsonParser *parser;
   JsonObject *obj;
   JsonArray *jnodes;
   JsonArray *jedges;
   int i,k;
   JSONcontext* ctx=new JSONcontext();
   GError *error;
   g_type_init ();
   parser = json_parser_new ();
   
   error = NULL;
   json_parser_load_from_file (parser, file, &error);
   if (error)
   {
      g_print ("Unable to parse `%s': %s\n", file, error->message);
      g_error_free (error);
      g_object_unref (parser);
      abort();
   }
   addCompartment(0,"unknown"); // add dummy compartment, may be overwritten by compartment from json
   ctx->root = json_node_copy(json_parser_get_root(parser)); // needs to be copied ??
   obj=json_node_get_object (ctx->root);
   jnodes=json_object_get_array_member(obj,"nodes");
   jedges=json_object_get_array_member(obj,"edges");
   g_print ("%i nodes\n",json_array_get_length(jnodes));
   for (i=0;i<json_array_get_length(jnodes);i++){
      JsonObject *n=json_array_get_object_element(jnodes,i);
      JsonObject *data=json_object_get_object_member(n,"data");
      const char* type=json_object_get_string_member(n,"type");
      const char* id=json_object_get_string_member(n,"id");
      if (json_object_has_member(n,"is_abstract") && (json_object_get_boolean_member(n,"is_abstract") || json_object_get_int_member(n,"is_abstract"))){
         continue;
      }
      if (!json_object_has_member(n,"index")){
         g_print ("no index defined for %s %s\n",type,id);
         abort();
      }
      int idx=json_object_get_int_member(n,"index");
      g_print ("node %d %s id %s\n",idx,type,id);
      if(strcmp(type,"Compartment")==0){
         addCompartment(idx,id);
      } else {
         double x=json_object_get_double_member(data,"x");
         double y=json_object_get_double_member(data,"y");
         double w=json_object_get_double_member(data,"width");
         double h=json_object_get_double_member(data,"height");
         double d=json_object_get_double_member(data,"dir");
         int c=json_object_get_int_member(data,"compartmentidx");
         for(k=0;k<7;k++){
            if(strcmp(jnodetypes[k],type)==0)break;
         }
         if (k==7){
            g_print ("unknown node type %s\n",type);
            abort();
         }
         addNode(idx,inodetypes[k],id,w,h,x,y,d,c);
         if (idx>=ctx->nodeidx->size()) ctx->nodeidx->resize(idx+1);
         (*(ctx->nodeidx))[idx]=i;
      }
   }
   g_print ("%i edges\n",json_array_get_length(jedges));
   for (i=0;i<json_array_get_length(jedges);i++){
      JsonObject *e=json_array_get_object_element(jedges,i);
      const char* type=json_object_get_string_member(e,"type");
      if ((!json_object_has_member(e,"sourceidx")) || (!json_object_has_member(e,"targetidx"))){
         g_print ("no source/targetindex defined for edge %s %i",type,i);
         abort;
      }
      for(k=0;k<7;k++){
         if(strcmp(edgetypes[k],type)==0)break;
      }
      int from=json_object_get_int_member(e,"sourceidx");
      int to=json_object_get_int_member(e,"targetidx");
      addEdge(from,to,(Edgetype)k);
      g_print ("edge %s %i -> %i\n",edgetypes[k],from,to);
   }
   g_object_unref(parser);
   return ctx;
}
Esempio n. 19
0
gboolean peer_get_is_downloading_from(JsonObject * p)
{
    return json_object_get_boolean_member(p, TPEER_IS_DOWNLOADING_FROM);
}
Esempio n. 20
0
static gboolean
gs_plugin_odrs_parse_success (const gchar *data, gssize data_len, GError **error)
{
	JsonNode *json_root;
	JsonObject *json_item;
	const gchar *msg = NULL;
	g_autoptr(JsonParser) json_parser = NULL;

	/* nothing */
	if (data == NULL) {
		g_set_error_literal (error,
				     GS_PLUGIN_ERROR,
				     GS_PLUGIN_ERROR_INVALID_FORMAT,
				     "server returned no data");
		return FALSE;
	}

	/* parse the data and find the success */
	json_parser = json_parser_new ();
	if (!json_parser_load_from_data (json_parser, data, data_len, error)) {
		gs_utils_error_convert_json_glib (error);
		return FALSE;
	}
	json_root = json_parser_get_root (json_parser);
	if (json_root == NULL) {
		g_set_error_literal (error,
				     GS_PLUGIN_ERROR,
				     GS_PLUGIN_ERROR_INVALID_FORMAT,
				     "no error root");
		return FALSE;
	}
	if (json_node_get_node_type (json_root) != JSON_NODE_OBJECT) {
		g_set_error_literal (error,
				     GS_PLUGIN_ERROR,
				     GS_PLUGIN_ERROR_INVALID_FORMAT,
				     "no error object");
		return FALSE;
	}
	json_item = json_node_get_object (json_root);
	if (json_item == NULL) {
		g_set_error_literal (error,
				     GS_PLUGIN_ERROR,
				     GS_PLUGIN_ERROR_INVALID_FORMAT,
				     "no error object");
		return FALSE;
	}

	/* failed? */
	if (json_object_has_member (json_item, "msg"))
		msg = json_object_get_string_member (json_item, "msg");
	if (!json_object_get_boolean_member (json_item, "success")) {
		g_set_error_literal (error,
				     GS_PLUGIN_ERROR,
				     GS_PLUGIN_ERROR_INVALID_FORMAT,
				     msg != NULL ? msg : "unknown failure");
		return FALSE;
	}

	/* just for the console */
	if (msg != NULL)
		g_debug ("success: %s", msg);
	return TRUE;
}
Esempio n. 21
0
static void
skypeweb_get_friend_list_cb(SkypeWebAccount *sa, JsonNode *node, gpointer user_data)
{
	JsonObject *obj;
	JsonArray *contacts;
	PurpleGroup *group = NULL;
	GSList *users_to_fetch = NULL;
	guint index, length;
	
	obj = json_node_get_object(node);
	contacts = json_object_get_array_member(obj, "contacts");
	length = json_array_get_length(contacts);
	
	for(index = 0; index < length; index++)
	{
		JsonObject *contact = json_array_get_object_element(contacts, index);
		const gchar *id = json_object_get_string_member(contact, "id");
		const gchar *display_name = json_object_get_string_member(contact, "display_name");
		const gchar *avatar_url = NULL;
		gboolean authorized = json_object_get_boolean_member(contact, "authorized");
		gboolean blocked = json_object_get_boolean_member(contact, "blocked");
		const gchar *type = json_object_get_string_member(contact, "type");
		
		JsonObject *name = json_object_get_object_member(contact, "name");
		const gchar *firstname = json_object_get_string_member(name, "first");
		const gchar *surname = NULL;
		PurpleBuddy *buddy;
		
		//TODO make this work for "pstn"
		if (!g_str_equal(type, "skype") && !g_str_equal(type, "msn"))
			continue;
		
		if (json_object_has_member(contact, "suggested") && json_object_get_boolean_member(contact, "suggested") && !authorized) {
			// suggested buddies wtf? some kind of advertising?
			continue;
		}
		
		buddy = purple_find_buddy(sa->account, id);
		if (!buddy)
		{
			if (!group)
			{
				group = purple_blist_find_group("Skype");
				if (!group)
				{
					group = purple_group_new("Skype");
					purple_blist_add_group(group, NULL);
				}
			}
			buddy = purple_buddy_new(sa->account, id, display_name);
			purple_blist_add_buddy(buddy, NULL, group, NULL);
		}
		
		if (json_object_has_member(name, "surname"))
			surname = json_object_get_string_member(name, "surname");

		// try to free the sbuddy here. no-op if it's not set before, otherwise prevents a leak.
		skypeweb_buddy_free(buddy);
		
		SkypeWebBuddy *sbuddy = g_new0(SkypeWebBuddy, 1);
		sbuddy->skypename = g_strdup(id);
		sbuddy->sa = sa;
		sbuddy->fullname = g_strconcat(firstname, (surname ? " " : NULL), surname, NULL);
		sbuddy->display_name = g_strdup(display_name);
		sbuddy->authorized = authorized;
		sbuddy->blocked = blocked;
		sbuddy->avatar_url = g_strdup(purple_buddy_icons_get_checksum_for_user(buddy));
		
		sbuddy->buddy = buddy;
		purple_buddy_set_protocol_data(buddy, sbuddy);
		
		purple_serv_got_alias(sa->pc, id, sbuddy->display_name);
		purple_blist_server_alias_buddy(buddy, sbuddy->fullname);
		
		if (json_object_has_member(contact, "avatar_url")) {
			avatar_url = json_object_get_string_member(contact, "avatar_url");
			if (avatar_url && *avatar_url && (!sbuddy->avatar_url || !g_str_equal(sbuddy->avatar_url, avatar_url))) {
				g_free(sbuddy->avatar_url);
				sbuddy->avatar_url = g_strdup(avatar_url);			
				skypeweb_get_icon(buddy);
			}
		}
		
		if (blocked == TRUE) {
			purple_privacy_deny_add(sa->account, id, TRUE);
		} else {
			users_to_fetch = g_slist_prepend(users_to_fetch, sbuddy->skypename);
		}
	}
	
	if (users_to_fetch)
	{
		//skypeweb_get_friend_profiles(sa, users_to_fetch);
		skypeweb_subscribe_to_contact_status(sa, users_to_fetch);
		g_slist_free(users_to_fetch);
	}
}