KonaSearch: Added code to clear the search again

master
Markus Koch 2016-09-10 13:19:01 +02:00
parent 41574f12b6
commit 555edeb10c
3 changed files with 33 additions and 7 deletions

View File

@ -2,7 +2,7 @@
#include "konaimage.h" #include "konaimage.h"
#include "konasearch.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) { void cb_meta_changed(KonaImage* ki) {
kona_image_meta *meta; kona_image_meta *meta;

View File

@ -1,8 +1,9 @@
#include "konasearch.h" #include "konasearch.h"
#include "konaimage.h"
#include <stdio.h> #include <stdio.h>
#include <libsoup/soup.h> #include <libsoup/soup.h>
#include <libxml2/libxml/parser.h> #include <libxml2/libxml/parser.h>
#include "konaimage.h"
// Function prototypes for local functions // Function prototypes for local functions
static void kona_search_posts_soup_cb (SoupSession *session, SoupMessage *msg, gpointer user_data); 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) static void kona_search_finalize(GObject *self)
{ {
KonaSearch *ks = (KonaSearch*) self; KonaSearch *ks = (KonaSearch*) self;
//g_free(ks->postsSession);
g_free(ks->searchString); g_free(ks->searchString);
// TODO: Free SoupSession ks->postsSession
G_OBJECT_CLASS (kona_search_parent_class)->finalize ((GObject*) self); 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; meta.tags = NULL;
tagsplit = g_strsplit(xmlGetProp(xNodePtr, "tags"), " ", 100); tagsplit = g_strsplit(xmlGetProp(xNodePtr, "tags"), " ", 100);
for (tagsplitc = tagsplit; *tagsplitc; tagsplitc++) { 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 // Create new KonaImage
ki = kona_image_new(); ki = kona_image_new();
g_value_set_pointer(&val, (gpointer) &meta); g_value_set_pointer(&val, (gpointer) &meta);
g_object_set_property((GObject*) ki, "meta", &val); g_object_set_property((GObject*) ki, "meta", &val);
// Free temp string (copied by g_object_set_property)
g_strfreev(tagsplit);
// Add to list // Add to list
ks->searchResult.images = g_list_append(ks->searchResult.images, ki); ks->searchResult.images = g_list_append(ks->searchResult.images, ki);
} }
} while (xNodePtr = xNodePtr->next); } while (xNodePtr = xNodePtr->next);
} }
else { else
{
fprintf(stderr, "Error: Invalid XML root node!\n"); 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"); 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;
} }

View File

@ -18,7 +18,12 @@ static void kona_search_init (KonaSearch *self);
static void kona_search_dispose(GObject *self); static void kona_search_dispose(GObject *self);
static void kona_search_finalize(GObject *self); static void kona_search_finalize(GObject *self);
// Starts a search.
void kona_search_start(KonaSearch *self); 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 G_END_DECLS