Handle file url

This commit is contained in:
Romain de Laage 2021-02-18 16:27:41 +01:00
parent 2dfbf78259
commit d0a0e2499d
Signed by: rdelaage
GPG Key ID: 534845FADDF0C329
1 changed files with 77 additions and 7 deletions

View File

@ -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