diff --git a/libkonaclient-test/main.c b/libkonaclient-test/main.c index 240e072..3dbaaa9 100644 --- a/libkonaclient-test/main.c +++ b/libkonaclient-test/main.c @@ -2,7 +2,7 @@ #include "konaimage.h" #include "konasearch.h" -#define PRINT_TEST_HEADER() printf("\n========= %s =========\n", __func__) +#define PRINT_TEST_HEADER() printf("\n========= %s =========\n", __func__); fflush(stdout); void cb_meta_changed(KonaImage* ki) { kona_image_meta *meta; diff --git a/libkonaclient/konasearch.c b/libkonaclient/konasearch.c index 7da3fb8..bd9a541 100644 --- a/libkonaclient/konasearch.c +++ b/libkonaclient/konasearch.c @@ -1,8 +1,9 @@ #include "konasearch.h" +#include "konaimage.h" + #include #include #include -#include "konaimage.h" // Function prototypes for local functions static void kona_search_posts_soup_cb (SoupSession *session, SoupMessage *msg, gpointer user_data); @@ -49,8 +50,8 @@ static void kona_search_dispose(GObject *self) static void kona_search_finalize(GObject *self) { KonaSearch *ks = (KonaSearch*) self; - //g_free(ks->postsSession); g_free(ks->searchString); + // TODO: Free SoupSession ks->postsSession G_OBJECT_CLASS (kona_search_parent_class)->finalize ((GObject*) self); } @@ -116,21 +117,24 @@ static void kona_search_posts_soup_cb (SoupSession *session, SoupMessage *msg, g meta.tags = NULL; tagsplit = g_strsplit(xmlGetProp(xNodePtr, "tags"), " ", 100); for (tagsplitc = tagsplit; *tagsplitc; tagsplitc++) { - meta.tags = g_list_append(meta.tags, g_strdup(*tagsplitc)); + meta.tags = g_list_append(meta.tags, *tagsplitc); } - g_strfreev(tagsplit); // Create new KonaImage ki = kona_image_new(); g_value_set_pointer(&val, (gpointer) &meta); g_object_set_property((GObject*) ki, "meta", &val); + // Free temp string (copied by g_object_set_property) + g_strfreev(tagsplit); + // Add to list ks->searchResult.images = g_list_append(ks->searchResult.images, ki); } } while (xNodePtr = xNodePtr->next); } - else { + else + { fprintf(stderr, "Error: Invalid XML root node!\n"); } } @@ -138,5 +142,22 @@ static void kona_search_posts_soup_cb (SoupSession *session, SoupMessage *msg, g { fprintf(stderr, "Error parsing XML result!\n"); } - fflush(stdout); + + xmlFreeDoc(xDocPtr); +} + +void kona_search_clear_full(KonaSearch *ks) +{ + ks->searchResult.count = -1; + + g_list_free_full(ks->searchResult.images, g_object_unref); + ks->searchResult.images = NULL; +} + +void kona_search_clear(KonaSearch *ks) +{ + ks->searchResult.count = -1; + + g_list_free(ks->searchResult.images); + ks->searchResult.images = NULL; } diff --git a/libkonaclient/konasearch.h b/libkonaclient/konasearch.h index 8d355f7..911ab04 100644 --- a/libkonaclient/konasearch.h +++ b/libkonaclient/konasearch.h @@ -18,7 +18,12 @@ static void kona_search_init (KonaSearch *self); static void kona_search_dispose(GObject *self); static void kona_search_finalize(GObject *self); +// Starts a search. void kona_search_start(KonaSearch *self); +// Clears the search results and deallocates ALL buffer - including all created KonaImages +void kona_search_clear_full(KonaSearch *ks); +// Clears the search, but leaves the KonaImages intact +void kona_search_clear(KonaSearch *ks); G_END_DECLS