diff --git a/src/app/browser/main/tab/page.cpp b/src/app/browser/main/tab/page.cpp index 87b044e6..1d372265 100644 --- a/src/app/browser/main/tab/page.cpp +++ b/src/app/browser/main/tab/page.cpp @@ -193,38 +193,42 @@ void Page::navigation_reload( G_URI_FLAGS_NONE, NULL // @TODO GError * ); - // Try auto prepend default scheme on fail + // On parse fail if (uri == NULL) { - uri = g_uri_parse( - Glib::ustring::sprintf( - "gemini://%s", - pageNavigation->get_request_text() - ).c_str(), - G_URI_FLAGS_NONE, - NULL // @TODO GError * - ); - - // Still not parsed, redirect to search provider - if (uri == NULL) - { - // @TODO + // Request contain host substring + if (Glib::Regex::match_simple( + R"regex(^[^\/\s]+\.[\w]{2,})regex", + pageNavigation->get_request_text().c_str() + )) { + // Append default scheme + pageNavigation->set_request_text( + Glib::ustring::sprintf( + "gemini://%s", + pageNavigation->get_request_text() + ) + ); } - // URI parsed, redirect + // Plain text given, build search request to default provider else { - // Redirect to fixed URI pageNavigation->set_request_text( - g_uri_to_string( - uri - ) - ); - - navigation_reload( - false + Glib::ustring::sprintf( + "gemini://tlgs.one/search?%s", // @TODO settings + g_uri_escape_string( + pageNavigation->get_request_text().c_str(), + NULL, + true + ) + ).c_str() ); } + + // Redirect @TODO limit attempts + navigation_reload( + false + ); } // Reset page data