This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository minilauncher-for-slippi.

View the commit online.

commit 414a31e711f74a83d35934ae563ae112c69a7ead
Author: Nekobit <m...@ow.nekobit.net>
AuthorDate: Sat Sep 16 23:48:30 2023 -0400

    Start gg started
---
 Makefile                 |   2 +-
 gg.c                     | 132 +++++++++++++++++++++++++++++++++++++++++++++++
 gg.h                     |  22 ++++++++
 home.c                   |  37 +++----------
 http.c                   |  32 ++++++++++++
 http.h                   |  16 ++++++
 main.c                   |  18 +++++--
 minilauncher4slippi.cfg  |   1 +
 start.gg - Get Token.jpg | Bin 0 -> 87126 bytes
 9 files changed, 225 insertions(+), 35 deletions(-)

diff --git a/Makefile b/Makefile
index 4bc77d9..f8f6dbf 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 CC=cc
 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
+OBJS=main.o replay.o home.o input.o http.o gg.o
 
 minilauncher4slippi: $(OBJS)
 	$(CC) -o minilauncher4slippi $(OBJS) $(LDFLAGS)
diff --git a/gg.c b/gg.c
new file mode 100644
index 0000000..98d66c2
--- /dev/null
+++ b/gg.c
@@ -0,0 +1,132 @@
+#include <cjson/cJSON.h>
+#include "gg.h"
+#include "http.h"
+
+Evas_Object* tab_gg = NULL;
+static Evas_Object* tab_gg_sidebar;
+static Evas_Object* tab_gg_content;
+extern char* start_gg_api;
+
+static void
+_gg_sidebar_cb(void *_data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+	Evas_Object** data = ""
+	//update_tab(*data);
+}
+
+static Eina_Bool
+_gg_scrape_result(void *data EINA_UNUSED, int type EINA_UNUSED, void *event_info)
+{
+	Ecore_Con_Event_Url_Complete* ev = event_info;
+	struct memory_chunk* dd = ecore_con_url_data_get(ev->url_con);
+	
+#define magiccode "script id=\"__NEXT_DATA__\" type=\"application/json\">"
+	char* start_json = strstr(dd->data, magiccode);
+	if (!start_json)
+		return EINA_FALSE; // Some error
+	start_json += sizeof(magiccode) - 1;
+	
+	char* end_json = strstr(start_json, "</script><script>");
+	if (!end_json)
+		return EINA_FALSE;
+	*end_json = '\0';
+#undef magiccode
+
+	puts(start_json);
+
+	// Data required is scraped now!
+	cJSON* json = cJSON_Parse(start_json);
+	if (!json)
+	{
+		fprintf(stderr, "Something happened.\n");
+		return EINA_FALSE;
+	}
+	
+	cJSON* props = cJSON_GetObjectItemCaseSensitive(json, "props");
+	cJSON* pageProps = cJSON_GetObjectItemCaseSensitive(props, "pageProps");
+	cJSON* currentUserFetchSpec = cJSON_GetObjectItemCaseSensitive(
+	                                  pageProps, "currentUserFetchSpec");
+	cJSON* entities = cJSON_GetObjectItemCaseSensitive(currentUserFetchSpec, "entities");
+	cJSON* tournament = cJSON_GetObjectItemCaseSensitive(entities, "tournament");
+	int i = 0;
+	for (cJSON* c = tournament->child; c->next != NULL; (++i, c = c->next))
+	{
+		printf("name: %s\n", cJSON_GetObjectItemCaseSensitive(c, "name")->valuestring);
+	}
+}
+
+static void
+_gg_scrape_homepage(char* token)
+{
+	Ecore_Con_Url* ec_url = ecore_con_url_custom_new("https://www.start.gg/", "GET");
+	ecore_con_url_data_set(ec_url, memory_chunk_alloc());
+	ecore_event_handler_add(ECORE_CON_EVENT_URL_DATA, memory_chunk_data, NULL);
+	ecore_event_handler_add(ECORE_CON_EVENT_URL_COMPLETE, _gg_scrape_result, NULL);
+	ecore_con_url_additional_header_add(ec_url, "User-Agent", ":^)'); DROP TABLE users; --");
+	ecore_con_url_additional_header_add(ec_url, "Accept", "*/*");
+
+	// "API" Token
+	Eina_Strbuf* sesh = eina_strbuf_new();
+	eina_strbuf_append_printf(sesh, "gg_session=%s;", token);
+	ecore_con_url_additional_header_add(ec_url, "Cookie", eina_strbuf_string_get(sesh));
+	free(eina_strbuf_release(sesh));
+
+	ecore_con_url_get(ec_url);
+}
+
+Evas_Object*
+gg_create_view(Evas_Object* parent)
+{
+	Evas_Object* tb_it;
+	tab_gg = elm_box_add(parent);
+	elm_box_horizontal_set(tab_gg, EINA_TRUE);
+	evas_object_size_hint_weight_set(tab_gg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+	evas_object_size_hint_align_set(tab_gg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+	evas_object_show(tab_gg);
+	
+	tab_gg_sidebar = elm_toolbar_add(tab_gg);
+	elm_toolbar_horizontal_set(tab_gg_sidebar, EINA_FALSE);
+	//elm_object_style_set(tab_gg_sidebar, "item_vertical");
+	elm_toolbar_homogeneous_set(tab_gg_sidebar, EINA_TRUE);
+	elm_toolbar_shrink_mode_set(tab_gg_sidebar, ELM_TOOLBAR_SHRINK_MENU);
+	evas_object_size_hint_weight_set(tab_gg_sidebar, 0.0, EVAS_HINT_EXPAND);
+	evas_object_size_hint_align_set(tab_gg_sidebar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+	elm_box_pack_end(tab_gg, tab_gg_sidebar);
+	
+	tb_it = elm_toolbar_item_append(tab_gg_sidebar, "home", NULL, _gg_sidebar_cb, NULL);
+	elm_toolbar_item_priority_set(tb_it, 100);
+	tb_it = elm_toolbar_item_append(tab_gg_sidebar, "mail-unread", NULL, _gg_sidebar_cb, NULL);
+	elm_toolbar_item_priority_set(tb_it, 100);
+	//-----
+	elm_toolbar_item_separator_set(
+		elm_toolbar_item_append(tab_gg_sidebar, NULL, NULL, NULL, NULL), EINA_TRUE);
+	_gg_scrape_homepage(start_gg_api);
+	//-----
+#if 0
+	elm_toolbar_item_separator_set(
+		elm_toolbar_item_append(tab_gg_sidebar, NULL, NULL, NULL, NULL), EINA_TRUE);
+	tb_it = elm_toolbar_item_append(tab_gg_sidebar, "view-list-compact", "", _gg_sidebar_cb, NULL);
+	elm_toolbar_item_priority_set(tb_it, 100);
+#endif
+
+	
+	
+	Evas_Object* tab_gg_scr = elm_scroller_add(tab_gg);
+	evas_object_size_hint_weight_set(tab_gg_scr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+	evas_object_size_hint_align_set(tab_gg_scr, EVAS_HINT_FILL, EVAS_HINT_FILL);
+	elm_box_pack_end(tab_gg, tab_gg_scr);
+	evas_object_show(tab_gg_scr);
+	
+	tab_gg_content = elm_box_add(tab_gg_scr);
+	evas_object_size_hint_weight_set(tab_gg_content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+	evas_object_size_hint_align_set(tab_gg_content, EVAS_HINT_FILL, EVAS_HINT_FILL);
+	evas_object_show(tab_gg_content);
+	
+	elm_object_content_set(tab_gg_scr, tab_gg_content);
+	evas_object_show(tab_gg_content);
+	evas_object_show(tab_gg_scr);
+	evas_object_show(tab_gg_sidebar);
+	evas_object_show(tab_gg);
+	
+	return tab_gg;
+}
diff --git a/gg.h b/gg.h
new file mode 100644
index 0000000..21879d7
--- /dev/null
+++ b/gg.h
@@ -0,0 +1,22 @@
+/* A question worth asking: Why not make the GG stuff an actual library?
+ *  The reason: start.gg is DOGSHIT, there are several API's, all of which are functionally
+ *  different and broken in their own ways. You have no real clue when stuff is going
+ *  to change, and some parts are _COMPLETELY_ undocumented. Some of the API's return
+ *  up to 88kb (!!!) of data... it's so horrific and bade i do not want to... go into it.
+ *
+ * Alas, I have no motivation to make this its own API. There are also Python wrappers and
+ *  such, which is good especially if you need statistics from matches.
+ */
+
+#ifndef GG_API_H
+#define GG_API_H
+#define EFL_BETA_API_SUPPORT
+#include <Ecore.h>
+#include <Elementary.h>
+
+extern Evas_Object* tab_gg;
+
+Evas_Object*
+gg_create_view(Evas_Object* parent);
+
+#endif /* GG_API_H */
diff --git a/home.c b/home.c
index 739d08a..83c64cb 100644
--- a/home.c
+++ b/home.c
@@ -2,30 +2,12 @@
 #include <cjson/cJSON.h>
 #include <stdint.h>
 #include "replay.h"
+#include "http.h"
 
 Evas_Object* tab_home = NULL;
-static Evas_Object* tab_home_scr = NULL;
 static Evas_Object* tab_home_content = NULL;
 char const* home_url = "https://api.github.com/repos/project-slippi/Ishiiruka/releases";
 
-struct memory_chunk {
-	char* data;
-	size_t size;
-};
-
-static Eina_Bool
-releases_data(void *data EINA_UNUSED, int type EINA_UNUSED, void *event_info)
-{
-	Ecore_Con_Event_Url_Data* ev = event_info;
-	struct memory_chunk* dd = ecore_con_url_data_get(ev->url_con);
-
-	dd->data = "" dd->size + ev->size + 1);
-	
-	memcpy(dd->data + dd->size, ev->data, ev->size);
-	dd->size += ev->size;
-	dd->data[dd->size] = 0;
-	return EINA_TRUE;
-}
 	
 static Eina_Bool
 releases_result(void *data EINA_UNUSED, int type EINA_UNUSED, void *event_info)
@@ -109,13 +91,13 @@ releases_result(void *data EINA_UNUSED, int type EINA_UNUSED, void *event_info)
 void
 _tab_home_make_da_damn_request(Evas_Object* parent)
 {
-	ecore_con_init();
-	ecore_con_url_init();
+	//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_con_url_data_set(ec_url, memory_chunk_alloc());
+	ecore_event_handler_add(ECORE_CON_EVENT_URL_DATA, memory_chunk_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, "User-Agent", ":^)'); DROP TABLE issues; --");
 	ecore_con_url_additional_header_add(ec_url, "Accept", "application/vnd.github.html");
 	ecore_con_url_get(ec_url);
 }
@@ -126,18 +108,15 @@ tab_home_setup(Evas_Object* parent)
 	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);
-	evas_object_show(tab_home);
 	
-	tab_home_scr = elm_scroller_add(tab_home);
+	Evas_Object* tab_home_scr = elm_scroller_add(tab_home);
 	evas_object_size_hint_weight_set(tab_home_scr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
 	evas_object_size_hint_align_set(tab_home_scr, EVAS_HINT_FILL, EVAS_HINT_FILL);
 	elm_box_pack_end(tab_home, tab_home_scr);
-	evas_object_show(tab_home_scr);
 	
 	tab_home_content = elm_box_add(tab_home_scr);
 	evas_object_size_hint_weight_set(tab_home_content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
 	evas_object_size_hint_align_set(tab_home_content, EVAS_HINT_FILL, EVAS_HINT_FILL);
-	evas_object_show(tab_home_content);
 	
 	elm_object_content_set(tab_home_scr, tab_home_content);
 	
@@ -145,7 +124,7 @@ 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_content);
+//   	_tab_home_make_da_damn_request(tab_home_content);
 	
 	// Add progress bar for noa
 	Evas_Object* speen = elm_progressbar_add(tab_home_content);
diff --git a/http.c b/http.c
new file mode 100644
index 0000000..a1213e4
--- /dev/null
+++ b/http.c
@@ -0,0 +1,32 @@
+#define EFL_BETA_API_SUPPORT
+#include <Ecore.h>
+#include <Ecore_Con.h>
+#include <stdio.h>
+#include "http.h"
+
+struct memory_chunk*
+memory_chunk_alloc(void)
+{
+	struct memory_chunk* data = "" sizeof(struct memory_chunk));
+	if (!data)
+	{
+		perror("memory_chunk_alloc");
+		exit(1);
+	}
+	
+	return data;
+}
+
+Eina_Bool
+memory_chunk_data(void *data EINA_UNUSED, int type EINA_UNUSED, void *event_info)
+{
+	Ecore_Con_Event_Url_Data* ev = event_info;
+	struct memory_chunk* dd = ecore_con_url_data_get(ev->url_con);
+
+	dd->data = "" dd->size + ev->size + 1);
+	
+	memcpy(dd->data + dd->size, ev->data, ev->size);
+	dd->size += ev->size;
+	dd->data[dd->size] = 0;
+	return EINA_TRUE;
+}
diff --git a/http.h b/http.h
new file mode 100644
index 0000000..ec2a55c
--- /dev/null
+++ b/http.h
@@ -0,0 +1,16 @@
+#ifndef HTTP_H
+#define HTTP_H
+#include <Ecore.h>
+
+struct memory_chunk {
+	char* data;
+	size_t size;
+};
+
+struct memory_chunk*
+memory_chunk_alloc(void);
+
+Eina_Bool
+memory_chunk_data(void *data EINA_UNUSED, int type EINA_UNUSED, void *event_info);
+
+#endif /* HTTP_H */
diff --git a/main.c b/main.c
index b76d472..0e1d019 100644
--- a/main.c
+++ b/main.c
@@ -1,7 +1,6 @@
 #include <stdio.h>
 #define EFL_BETA_API_SUPPORT
 #include <Ecore.h>
-#include <Efl_Ui.h>
 #include <Elementary.h>
 #include <libusb.h>
 #include "replay.h"
@@ -14,6 +13,7 @@ int opt_mallocd = -1;
 char* game_path = "SSBM.iso";
 char* dolphin_emu_file = "slippi-netplay-dolphin";
 char* dolphin_replay_file = "slippi-playback-dolphin";
+char* start_gg_api = ":^)";
 #ifndef DATA_DIR
 #define DATA_DIR "data/"
 #endif
@@ -24,6 +24,7 @@ Evas_Object* win;
 Evas_Object* _tab_curr;
 extern Evas_Object* tab_home;
 extern Evas_Object* tab_replays;
+extern Evas_Object* tab_gg;
 Evas_Object* _tabs[] = { NULL, NULL };
 Evas_Object* _scrollers[] = { NULL, NULL };
 int _tabs_len = 2;
@@ -72,9 +73,10 @@ parse_config(char* file)
 			*rdpnt = '\0';
 		switch (i)
 		{
-			case 0: game_path = strdup(buf); break;
-			case 1: dolphin_emu_file = strdup(buf); break;
-			case 2: dolphin_replay_file = strdup(buf); break;
+		case 0: game_path = strdup(buf); break;
+		case 1: dolphin_emu_file = strdup(buf); break;
+		case 2: dolphin_replay_file = strdup(buf); break;
+		case 3: start_gg_api = strdup(buf); break;
 		}
     	++opt_mallocd;
     }
@@ -155,6 +157,8 @@ tabs_init()
 	// BEGIN tab_replays
 	_tabs[1] = tab_replays_setup(mainer);
 	
+	_tabs[2] = gg_create_view(mainer);
+	
 	// Show home tab at start
 	_tab_curr = tab_home;
 	evas_object_show(_tab_curr);
@@ -229,9 +233,13 @@ elm_main(int argc, char **argv)
 	tb_it = elm_toolbar_item_append(tb, "media-seek-backward", "Replays", _tab_switch_cb, &tab_replays);
 	elm_toolbar_item_priority_set(tb_it, -100);
 
+	tb_it = elm_toolbar_item_append(tb, "network-cellular-gprs", "Start.gg", _tab_switch_cb, &tab_gg);
+	elm_toolbar_item_priority_set(tb_it, 149);
+
 	tb_it = elm_toolbar_item_append(tb, "preferences-system", "Settings", _tab_switch_cb, &tab_config);
 	elm_toolbar_item_priority_set(tb_it, 150);
 
+
 	tb_it = elm_toolbar_item_append(tb, "network-wireless", NULL, NULL, NULL);
 	elm_toolbar_item_menu_set(tb_it, EINA_TRUE);
 	elm_toolbar_item_priority_set(tb_it, -9999);
@@ -318,7 +326,7 @@ elm_main(int argc, char **argv)
 	if (opt_mallocd >= 0) free(game_path);
 	if (opt_mallocd >= 1) free(dolphin_emu_file);
 	if (opt_mallocd >= 2) free(dolphin_replay_file);
-	
+	if (opt_mallocd >= 3) free(start_gg_api);
 	return 0;
 }
 ELM_MAIN()
diff --git a/minilauncher4slippi.cfg b/minilauncher4slippi.cfg
index 6c3e146..dc12a9c 100644
--- a/minilauncher4slippi.cfg
+++ b/minilauncher4slippi.cfg
@@ -1,3 +1,4 @@
 SSBM.iso
 slippi-netplay-dolphin
 slippi-playback-dolphin
+37f23dbe87a3ed1abd77df833fbf6088
diff --git a/start.gg - Get Token.jpg b/start.gg - Get Token.jpg
new file mode 100644
index 0000000..86420e0
Binary files /dev/null and b/start.gg - Get Token.jpg differ

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to