From d0a0e2499d5233ef1cb495040c78dec91f74dcda Mon Sep 17 00:00:00 2001 From: Romain de Laage Date: Thu, 18 Feb 2021 16:27:41 +0100 Subject: [PATCH] Handle file url --- src/main.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 77 insertions(+), 7 deletions(-) diff --git a/src/main.c b/src/main.c index 6bbe938..1345269 100644 --- a/src/main.c +++ b/src/main.c @@ -14,15 +14,85 @@ static void makeRender (FILE *file); static void loadPage (const char *link) { - FILE *file = tmpfile (); - if (file != NULL) - { - GEM_send_request ("gemini://rdelaage.ovh\r\n", "rdelaage.ovh:1965", file); - makeRender (file); - gtk_container_foreach (GTK_CONTAINER (render), (GtkCallback)gtk_widget_show_all, NULL); + char *cursor = strchr (link, ':'); - fclose (file); + if (cursor == NULL) + { + gtk_container_foreach (GTK_CONTAINER (render), (GtkCallback)gtk_widget_destroy, NULL); + addH1 (render, "Invalid URL !"); } + else + { + int len = cursor - link; + char scheme[30]; + strncpy (scheme, link, len); + scheme[len] = '\0'; + + if (strcmp (scheme, "gemini") == 0) + { + FILE *file = tmpfile (); + if (file != NULL) + { + GEM_send_request ("gemini://rdelaage.ovh\r\n", "rdelaage.ovh:1965", file); + makeRender (file); + + fclose (file); + } + else + { + gtk_container_foreach (GTK_CONTAINER (render), (GtkCallback)gtk_widget_destroy, NULL); + addH1 (render, "Failed to open a temp file !"); + } + } + else if (strcmp (scheme, "file") == 0) + { + cursor++; + len = strlen (cursor); + + if (len >= 2 && cursor[0] == '/' && cursor[1] != '/') + { + FILE *file = fopen (cursor, "r"); + + if (file != NULL) + { + makeRender (file); + fclose (file); + } + else + { + gtk_container_foreach (GTK_CONTAINER (render), (GtkCallback)gtk_widget_destroy, NULL); + addH1 (render, "Failed to open the file !"); + } + } + else if (len > 3 && cursor[0] == '/' && cursor[1] == '/' && cursor[2] == '/') + { + FILE *file; + cursor += 2; + file = fopen (cursor, "r"); + if (file != NULL) + { + makeRender (file); + fclose (file); + } + else + { + gtk_container_foreach (GTK_CONTAINER (render), (GtkCallback)gtk_widget_destroy, NULL); + addH1 (render, "Failed to open the file !"); + } + } + else + { + gtk_container_foreach (GTK_CONTAINER (render), (GtkCallback)gtk_widget_destroy, NULL); + addH1 (render, "File url not supported !"); + } + } + else + { + gtk_container_foreach (GTK_CONTAINER (render), (GtkCallback)gtk_widget_destroy, NULL); + addH1 (render, "This type of URL is not supported yet"); + } + } + gtk_container_foreach (GTK_CONTAINER (render), (GtkCallback)gtk_widget_show_all, NULL); } void