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; }
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; }
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); }
/* 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; }
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); }
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)); } }
/** * 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; }
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 }
gboolean torrent_get_download_limited(JsonObject * t) { return json_object_get_boolean_member(t, FIELD_DOWNLOAD_LIMITED); }
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); } } }
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; }
gboolean torrent_get_is_private(JsonObject * t) { return json_object_get_boolean_member(t, FIELD_ISPRIVATE); }
gboolean peer_get_is_encrypted(JsonObject * p) { return json_object_get_boolean_member(p, TPEER_IS_ENCRYPTED); }
gboolean peer_get_is_uploading_to(JsonObject * p) { return json_object_get_boolean_member(p, TPEER_IS_UPLOADING_TO); }
gboolean torrent_get_honors_session_limits(JsonObject * t) { return json_object_get_boolean_member(t, FIELD_HONORS_SESSION_LIMITS); }
// 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; }
gboolean peer_get_is_downloading_from(JsonObject * p) { return json_object_get_boolean_member(p, TPEER_IS_DOWNLOADING_FROM); }
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; }
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); } }