gchar* tags_dialog (GtkWidget *win, JamAccountLJ *acc, gchar *journal, gchar *typed) { GtkWidget *dlg, *sw, *tv; GSList *list = NULL; gchar *taglist = NULL; GSList *prev; if (acc == NULL) return NULL; load_tags (GTK_WINDOW (win), acc, journal, &list); dlg = gtk_dialog_new_with_buttons (_("Select tags"), GTK_WINDOW (win), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_OK, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), sw, TRUE, TRUE, 0); prev = tags_split(typed); tv = taglist_create (list, &prev); gtk_container_add (GTK_CONTAINER (sw), tv); gtk_window_resize(dlg, 60, 210); gtk_widget_show_all (sw); if (gtk_dialog_run (GTK_DIALOG (dlg)) == GTK_RESPONSE_OK) { taglist = g_strdup (""); gtk_tree_model_foreach (gtk_tree_view_get_model (tv), create_tag_string, &taglist); if (g_ascii_strcasecmp (taglist, "") == 0) { g_free (taglist); taglist = NULL; } } gtk_widget_destroy (dlg); /* free rest of prev list */ if (prev) { GSList *p; for (p = prev; p; p = g_slist_next(p)) { g_free(p->data); } g_slist_free(prev); } return taglist; }
int main() { char uri_string[] = "mongodb://localhost:27017/"; char db_name[] = "test"; char collection_name[] = "test"; mongoc_client_t *client; mongoc_collection_t *collection; mongoc_cursor_t *cursor; linked_list_tag_t **tags; const bson_t *document; bson_t *query; bson_t *update; json_object *json; enum json_type json_type; size_t len; char *str; char *tags_str; char **strings; char **pointer; // mongoc_init(); client = mongoc_client_new(uri_string); collection = mongoc_client_get_collection(client, db_name, collection_name); query = bson_new(); cursor = mongoc_collection_find(collection, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL); while (mongoc_cursor_next(cursor, &document)) { str = bson_as_json(document, NULL); json = json_tokener_parse(str); json_object_object_foreach(json, key, val) { if (strcmp(key, "tags") == 0) { json_type = json_object_get_type(val); if (json_type == json_type_string) { tags_str = strdup(json_object_get_string(val)); tags = tags_split(tags_str, " "); free(tags_str); //linked_list_tag_print(tags); update = create_bson_update(tags); //printf("%s\n", bson_as_json(update, NULL)); linked_list_tag_clear(tags); free(tags); } } else if (strcmp(key, "id") == 0) { query = create_bson_selector(json_object_get_int(val)); printf("%s\n", bson_as_json(query, NULL)); } } mongoc_collection_update(collection, MONGOC_QUERY_NONE, query, update, NULL, NULL); bson_destroy(update); bson_destroy(query); bson_free(str); json_object_put(json); } mongoc_cursor_destroy(cursor); mongoc_collection_destroy(collection); mongoc_client_destroy(client); return 0; }