2019-07-20 23:50:50 +02:00
|
|
|
#include "cart_item.h"
|
2019-07-24 20:22:10 +02:00
|
|
|
#include <json-glib/json-glib.h>
|
|
|
|
|
|
|
|
typedef struct _YacosCartItemPriv {
|
|
|
|
GtkWidget *label_title;
|
|
|
|
GtkWidget *label_description;
|
|
|
|
GtkWidget *label_comment;
|
|
|
|
GtkWidget *label_id;
|
|
|
|
|
|
|
|
GtkWidget *button_properties;
|
|
|
|
GtkWidget *button_delete;
|
|
|
|
|
|
|
|
GtkWidget *image;
|
|
|
|
|
|
|
|
GtkStack *stack_image_loader;
|
|
|
|
|
|
|
|
yacos_tag_id tag_id;
|
|
|
|
|
|
|
|
struct api {
|
|
|
|
gchar *url_base;
|
2019-07-24 21:35:40 +02:00
|
|
|
gchar *token;
|
2019-07-24 20:22:10 +02:00
|
|
|
|
|
|
|
SoupSession *soup_session_meta;
|
|
|
|
} api;
|
|
|
|
} YacosCartItemPriv;
|
|
|
|
|
|
|
|
struct _YacosCartItem {
|
|
|
|
/* Inheritance */
|
|
|
|
GtkListBoxRow parent;
|
|
|
|
/* Custom Elements */
|
|
|
|
YacosCartItemPriv priv;
|
|
|
|
};
|
2019-07-20 23:50:50 +02:00
|
|
|
|
|
|
|
G_DEFINE_TYPE(YacosCartItem, yacos_cart_item, GTK_TYPE_LIST_BOX_ROW)
|
|
|
|
|
|
|
|
static void yacos_cart_item_dispose(GObject *obj)
|
|
|
|
{
|
|
|
|
/* destroy parent container. This destroys all widgets inside */
|
|
|
|
G_OBJECT_CLASS(yacos_cart_item_parent_class)->dispose(obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void yacos_cart_item_constructed(GObject *obj)
|
|
|
|
{
|
|
|
|
G_OBJECT_CLASS(yacos_cart_item_parent_class)->constructed(obj);
|
|
|
|
}
|
|
|
|
|
2019-07-24 20:22:10 +02:00
|
|
|
static void yacos_cart_item_finalize(GObject *gobject)
|
|
|
|
{
|
|
|
|
YacosCartItem *self = yacos_cart_item_get_instance_private(YACOS_CART_ITEM(gobject));
|
|
|
|
|
|
|
|
g_free(self->priv.api.url_base);
|
2019-07-24 21:35:40 +02:00
|
|
|
g_free(self->priv.api.token);
|
2019-07-24 20:22:10 +02:00
|
|
|
|
|
|
|
G_OBJECT_CLASS(yacos_cart_item_parent_class)->constructed(gobject);
|
|
|
|
}
|
|
|
|
|
2019-07-20 23:50:50 +02:00
|
|
|
static void yacos_cart_item_class_init(YacosCartItemClass *klass)
|
|
|
|
{
|
|
|
|
GObjectClass *oclass = G_OBJECT_CLASS(klass);
|
|
|
|
oclass->dispose = yacos_cart_item_dispose;
|
|
|
|
oclass->constructed = yacos_cart_item_constructed;
|
2019-07-24 20:22:10 +02:00
|
|
|
oclass->finalize = yacos_cart_item_finalize;
|
2019-07-20 23:50:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static void yacos_cart_item_init(YacosCartItem *self)
|
|
|
|
{
|
|
|
|
GtkBuilder *builder;
|
|
|
|
GtkWidget *box;
|
|
|
|
builder = gtk_builder_new_from_resource("/net/notsyncing/yacos/glade/cartItem.glade");
|
|
|
|
box = GTK_WIDGET(gtk_builder_get_object(builder, "cart_item"));
|
|
|
|
|
2019-07-24 20:22:10 +02:00
|
|
|
self->priv.label_id = GTK_WIDGET(gtk_builder_get_object(builder, "label_id"));
|
|
|
|
self->priv.label_title = GTK_WIDGET(gtk_builder_get_object(builder, "label_title"));
|
|
|
|
self->priv.label_comment = GTK_WIDGET(gtk_builder_get_object(builder, "label_comment"));
|
|
|
|
self->priv.label_description = GTK_WIDGET(gtk_builder_get_object(builder, "label_description"));
|
|
|
|
|
|
|
|
self->priv.button_delete = GTK_WIDGET(gtk_builder_get_object(builder, "button_delete"));
|
|
|
|
self->priv.button_properties = GTK_WIDGET(gtk_builder_get_object(builder, "button_properties"));
|
|
|
|
|
|
|
|
self->priv.image = GTK_WIDGET(gtk_builder_get_object(builder, "image_item"));
|
|
|
|
|
|
|
|
self->priv.stack_image_loader = GTK_STACK(gtk_builder_get_object(builder, "stack_image_loader"));
|
|
|
|
|
|
|
|
self->priv.api.url_base = g_strdup("http://localhost:8080/api.php");
|
2019-07-24 21:35:40 +02:00
|
|
|
self->priv.api.token = g_strdup("123456");
|
2019-07-24 20:22:10 +02:00
|
|
|
|
|
|
|
self->priv.api.soup_session_meta = soup_session_new();
|
|
|
|
|
|
|
|
gtk_container_add(GTK_CONTAINER(self), box);
|
2019-07-20 23:50:50 +02:00
|
|
|
|
|
|
|
g_object_unref(builder);
|
|
|
|
}
|
|
|
|
|
|
|
|
GtkWidget *yacos_cart_item_new(void)
|
|
|
|
{
|
|
|
|
return GTK_WIDGET(g_object_new(TYPE_YACOS_CART_ITEM, NULL));
|
|
|
|
}
|
2019-07-24 20:22:10 +02:00
|
|
|
|
|
|
|
void yacos_cart_item_set_id(YacosCartItem *self, yacos_tag_id tag_id)
|
|
|
|
{
|
|
|
|
gchar *id_str;
|
2019-07-24 21:19:26 +02:00
|
|
|
gchar *id_str2;
|
2019-07-24 20:22:10 +02:00
|
|
|
|
|
|
|
self->priv.tag_id = tag_id;
|
|
|
|
|
|
|
|
id_str = yacos_tag_id_to_str(tag_id);
|
2019-07-24 21:19:26 +02:00
|
|
|
id_str2 = g_strdup_printf("#%s", id_str);
|
2019-07-24 20:22:10 +02:00
|
|
|
g_free(id_str);
|
2019-07-24 21:19:26 +02:00
|
|
|
gtk_label_set_text(GTK_LABEL(self->priv.label_id), id_str2);
|
|
|
|
|
|
|
|
g_free(id_str2);
|
2019-07-24 20:22:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static void yacos_cart_item_fetch_meta_cb (SoupSession *session, SoupMessage *msg, gpointer user_data)
|
|
|
|
{
|
|
|
|
YacosCartItem *self = YACOS_CART_ITEM(user_data);
|
|
|
|
const char *temp;
|
|
|
|
JsonParser *parser;
|
|
|
|
JsonReader *reader;
|
|
|
|
|
|
|
|
if (msg->status_code != 200) {
|
|
|
|
// TODO: Make this somewhat error tolerant
|
|
|
|
g_error("Received error code %d from server.", msg->status_code);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
parser = json_parser_new ();
|
|
|
|
json_parser_load_from_data (parser,
|
|
|
|
msg->response_body->data,
|
|
|
|
msg->response_body->length,
|
|
|
|
NULL);
|
|
|
|
|
|
|
|
reader = json_reader_new (json_parser_get_root (parser));
|
|
|
|
|
|
|
|
json_reader_read_member (reader, "title");
|
|
|
|
temp = json_reader_get_string_value (reader);
|
|
|
|
gtk_label_set_text(GTK_LABEL(self->priv.label_title), temp);
|
|
|
|
json_reader_end_member (reader);
|
|
|
|
|
|
|
|
json_reader_read_member (reader, "description");
|
|
|
|
temp = json_reader_get_string_value (reader);
|
|
|
|
gtk_label_set_text(GTK_LABEL(self->priv.label_description), temp);
|
|
|
|
json_reader_end_member (reader);
|
|
|
|
|
|
|
|
json_reader_read_member (reader, "comment");
|
|
|
|
temp = json_reader_get_string_value (reader);
|
|
|
|
gtk_label_set_text(GTK_LABEL(self->priv.label_comment), temp);
|
|
|
|
json_reader_end_member (reader);
|
|
|
|
|
|
|
|
g_object_unref (reader);
|
|
|
|
g_object_unref (parser);
|
|
|
|
}
|
|
|
|
|
|
|
|
void yacos_cart_item_fetch_meta(YacosCartItem *self)
|
|
|
|
{
|
|
|
|
SoupMessage *msg;
|
|
|
|
gchar *url;
|
|
|
|
gchar *id_str;
|
|
|
|
|
2019-07-24 21:19:26 +02:00
|
|
|
gtk_label_set_text(GTK_LABEL(self->priv.label_title), "Loading ...");
|
|
|
|
gtk_label_set_text(GTK_LABEL(self->priv.label_description), "");
|
|
|
|
gtk_label_set_text(GTK_LABEL(self->priv.label_comment), "");
|
|
|
|
|
|
|
|
|
2019-07-24 20:22:10 +02:00
|
|
|
id_str = yacos_tag_id_to_str(self->priv.tag_id);
|
|
|
|
|
|
|
|
url = g_strdup_printf("%s?meta&id=%s", self->priv.api.url_base, id_str);
|
|
|
|
msg = soup_message_new("GET", url);
|
2019-07-24 21:35:40 +02:00
|
|
|
soup_message_headers_append (msg->request_headers, "x-token", self->priv.api.token);
|
|
|
|
|
2019-07-24 20:22:10 +02:00
|
|
|
g_free(url);
|
|
|
|
g_free(id_str);
|
|
|
|
|
|
|
|
soup_session_queue_message(self->priv.api.soup_session_meta,
|
|
|
|
msg,
|
|
|
|
yacos_cart_item_fetch_meta_cb,
|
|
|
|
self);
|
2019-07-24 21:43:39 +02:00
|
|
|
|
|
|
|
// TODO: The soup 's probably memory-leaking all over the place. Check this some time..
|
2019-07-24 20:22:10 +02:00
|
|
|
}
|
2019-07-24 21:19:26 +02:00
|
|
|
|
|
|
|
void yacos_cart_item_fetch_image(YacosCartItem *self)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
yacos_tag_id yacos_cart_item_get_id(YacosCartItem *self)
|
|
|
|
{
|
|
|
|
return self->priv.tag_id;
|
|
|
|
}
|