Use ecore instead of libcurl
Well, it's technically still libcurl, but now in the Event loop, and a lot cleaner as well
This commit is contained in:
parent
3195a05567
commit
1c017747dd
4
Makefile
4
Makefile
|
@ -1,6 +1,6 @@
|
|||
CC=cc
|
||||
CFLAGS=--std=c99 -g `pkg-config --cflags efl ecore elementary libusb-1.0` `sdl2-config --cflags` `curl-config --cflags`
|
||||
LDFLAGS=`pkg-config --libs efl ecore elementary libusb-1.0` `sdl2-config --libs` `curl-config --libs` -lcjson
|
||||
CFLAGS=--std=c99 -g `pkg-config --cflags efl ecore elementary libusb-1.0` `sdl2-config --cflags`
|
||||
LDFLAGS=`pkg-config --libs efl ecore elementary libusb-1.0` `sdl2-config --libs` -lcjson
|
||||
OBJS=main.o replay.o home.o input.o
|
||||
|
||||
minilauncher4slippi: $(OBJS)
|
||||
|
|
119
home.c
119
home.c
|
@ -1,5 +1,4 @@
|
|||
#include <stdio.h>
|
||||
#include <curl/curl.h>
|
||||
#include <cjson/cJSON.h>
|
||||
#include <stdint.h>
|
||||
#include "replay.h"
|
||||
|
@ -14,36 +13,36 @@ struct memory_chunk {
|
|||
size_t size;
|
||||
};
|
||||
|
||||
size_t
|
||||
write_callback(char* ptr, size_t size, size_t nmemb, void* userp)
|
||||
static Eina_Bool
|
||||
releases_data(void *data EINA_UNUSED, int type EINA_UNUSED, void *event_info)
|
||||
{
|
||||
size_t realsize = size * nmemb;
|
||||
struct memory_chunk* mem = userp;
|
||||
Ecore_Con_Event_Url_Data* ev = event_info;
|
||||
struct memory_chunk* dd = ecore_con_url_data_get(ev->url_con);
|
||||
|
||||
char *nptr = realloc(mem->data, mem->size + realsize + 1);
|
||||
if(!nptr) {
|
||||
/* out of memory! */
|
||||
printf("not enough memory (realloc returned NULL)\n");
|
||||
return 0;
|
||||
}
|
||||
dd->data = realloc(dd->data, dd->size + ev->size + 1);
|
||||
|
||||
mem->data = nptr;
|
||||
memcpy(&(mem->data[mem->size]), ptr, realsize);
|
||||
mem->size += realsize;
|
||||
mem->data[mem->size] = 0;
|
||||
return realsize;
|
||||
memcpy(dd->data + dd->size, ev->data, ev->size);
|
||||
dd->size += ev->size;
|
||||
dd->data[dd->size] = 0;
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
int
|
||||
releases_result(struct memory_chunk chunk)
|
||||
|
||||
static Eina_Bool
|
||||
releases_result(void *data EINA_UNUSED, int type EINA_UNUSED, void *event_info)
|
||||
{
|
||||
cJSON* json = cJSON_ParseWithLength(chunk.data, chunk.size);
|
||||
Evas_Object* parent = data;
|
||||
Ecore_Con_Event_Url_Complete* ev = event_info;
|
||||
struct memory_chunk* dd = ecore_con_url_data_get(ev->url_con);
|
||||
cJSON* json = cJSON_ParseWithLength(dd->data, dd->size);
|
||||
if (!json)
|
||||
{
|
||||
fprintf(stderr, "Something happened.\n");
|
||||
return 1;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
// Clear out
|
||||
elm_obj_box_clear(parent);
|
||||
|
||||
cJSON* release = NULL;
|
||||
//cJSON_ArrayForEach(release, json)
|
||||
int i = 0;
|
||||
|
@ -51,12 +50,12 @@ releases_result(struct memory_chunk chunk)
|
|||
{
|
||||
if (i == 6)
|
||||
{
|
||||
Evas_Object* notice = elm_label_add(tab_home_content);
|
||||
Evas_Object* notice = elm_label_add(parent);
|
||||
elm_object_text_set(notice, "Older releases are collapsed, click to expand");
|
||||
elm_box_pack_end(tab_home_content, notice);
|
||||
elm_box_pack_end(parent, notice);
|
||||
evas_object_show(notice);
|
||||
}
|
||||
Evas_Object* release_fr = elm_frame_add(tab_home_content);
|
||||
Evas_Object* release_fr = elm_frame_add(parent);
|
||||
// Size
|
||||
evas_object_size_hint_weight_set(release_fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
evas_object_size_hint_align_set(release_fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
|
@ -64,7 +63,7 @@ releases_result(struct memory_chunk chunk)
|
|||
elm_frame_autocollapse_set(release_fr, EINA_TRUE);
|
||||
if (i > 5)
|
||||
elm_frame_collapse_set(release_fr, EINA_TRUE);
|
||||
elm_box_pack_end(tab_home_content, release_fr);
|
||||
elm_box_pack_end(parent, release_fr);
|
||||
cJSON* title = cJSON_GetObjectItemCaseSensitive(c, "name");
|
||||
if (!title) // (((Rate limit))) and/or whatever bullshit crops up.
|
||||
return 1;
|
||||
|
@ -83,6 +82,8 @@ releases_result(struct memory_chunk chunk)
|
|||
|
||||
/* Get body_html and manipulate it */
|
||||
cJSON* body = cJSON_GetObjectItemCaseSensitive(c, "body_html");
|
||||
if (!body)
|
||||
return 1;
|
||||
Eina_Strbuf* body_fmt = eina_strbuf_manage_new(body->valuestring);
|
||||
eina_strbuf_replace_all(body_fmt, "\n", "<br>");
|
||||
eina_strbuf_replace_all(body_fmt, "<h1>", "<title>");
|
||||
|
@ -102,61 +103,26 @@ releases_result(struct memory_chunk chunk)
|
|||
|
||||
//elm_box_pack_end(tab_home_box, fr_box);
|
||||
}
|
||||
return 0;
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
_tab_home_make_da_damn_request()
|
||||
_tab_home_make_da_damn_request(Evas_Object* parent)
|
||||
{
|
||||
|
||||
char curl_errbuf[CURL_ERROR_SIZE];
|
||||
int res;
|
||||
struct memory_chunk data;
|
||||
|
||||
data.data = malloc(1);
|
||||
data.size = 0;
|
||||
|
||||
CURL* curl = curl_easy_init();
|
||||
curl_easy_setopt(curl, CURLOPT_URL, home_url);
|
||||
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, curl_errbuf);
|
||||
//curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1);
|
||||
//curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);
|
||||
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5);
|
||||
curl_easy_setopt(curl, CURLOPT_USERAGENT, "Minilauncher4slippi/1.0");
|
||||
//application/vnd.github.html+json
|
||||
struct curl_slist *hs=NULL;
|
||||
hs = curl_slist_append(hs, "Accept: application/vnd.github.html");
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, hs);
|
||||
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
if(res != CURLE_OK) {
|
||||
fprintf(stderr, "curl_easy_perform() failed: %s\n",
|
||||
curl_easy_strerror(res));
|
||||
}
|
||||
else {
|
||||
printf("%lu bytes retrieved\n", (unsigned long)data.size);
|
||||
/* cleanup curl stuff */
|
||||
|
||||
releases_result(data);
|
||||
free(data.data);
|
||||
}
|
||||
|
||||
curl_easy_cleanup(curl);
|
||||
|
||||
|
||||
/* we are done with libcurl, so clean it up */
|
||||
curl_global_cleanup();
|
||||
|
||||
ecore_con_init();
|
||||
ecore_con_url_init();
|
||||
Ecore_Con_Url* ec_url = ecore_con_url_custom_new(home_url, "GET");
|
||||
ecore_con_url_data_set(ec_url, calloc(1, sizeof(struct memory_chunk)));
|
||||
ecore_event_handler_add(ECORE_CON_EVENT_URL_DATA, releases_data, NULL);
|
||||
ecore_event_handler_add(ECORE_CON_EVENT_URL_COMPLETE, releases_result, parent);
|
||||
ecore_con_url_additional_header_add(ec_url, "User-Agent", "blablabla");
|
||||
ecore_con_url_additional_header_add(ec_url, "Accept", "application/vnd.github.html");
|
||||
ecore_con_url_get(ec_url);
|
||||
}
|
||||
|
||||
Evas_Object*
|
||||
tab_home_setup(Evas_Object* parent)
|
||||
{
|
||||
curl_global_init(CURL_GLOBAL_ALL);
|
||||
|
||||
tab_home = elm_box_add(parent); // Scroller
|
||||
evas_object_size_hint_weight_set(tab_home, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
evas_object_size_hint_align_set(tab_home, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
|
@ -179,6 +145,15 @@ tab_home_setup(Evas_Object* parent)
|
|||
evas_object_show(tab_home_scr);
|
||||
evas_object_show(tab_home);
|
||||
|
||||
_tab_home_make_da_damn_request();
|
||||
_tab_home_make_da_damn_request(tab_home_content);
|
||||
|
||||
// Add progress bar for noa
|
||||
Evas_Object* speen = elm_progressbar_add(tab_home_content);
|
||||
elm_object_style_set(speen, "wheel");
|
||||
elm_progressbar_pulse_set(speen, EINA_TRUE);
|
||||
elm_progressbar_pulse(speen, EINA_TRUE);
|
||||
elm_box_pack_end(tab_home_content, speen);
|
||||
evas_object_show(speen);
|
||||
|
||||
return tab_home;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue