mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 07:17:35 +00:00
Browser: Move search engine definitions to a json file
This both makes them configurable, and means that we can read them from other applications, such as BrowserSettings. :^)
This commit is contained in:
parent
1933076143
commit
e927048754
2 changed files with 62 additions and 22 deletions
26
Base/home/anon/.config/SearchEngines.json
Normal file
26
Base/home/anon/.config/SearchEngines.json
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"title": "Bing",
|
||||||
|
"url_format": "https://www.bing.com/search?q={}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "DuckDuckGo",
|
||||||
|
"url_format": "https://duckduckgo.com/?q={}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "FrogFind",
|
||||||
|
"url_format": "https://frogfind.com/?q={}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "GitHub",
|
||||||
|
"url_format": "https://github.com/search?q={}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Google",
|
||||||
|
"url_format": "https://google.com/search?q={}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Yandex",
|
||||||
|
"url_format": "https://yandex.com/search/?text={}"
|
||||||
|
}
|
||||||
|
]
|
|
@ -46,6 +46,14 @@ static String bookmarks_file_path()
|
||||||
return builder.to_string();
|
return builder.to_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static String search_engines_file_path()
|
||||||
|
{
|
||||||
|
StringBuilder builder;
|
||||||
|
builder.append(Core::StandardPaths::config_directory());
|
||||||
|
builder.append("/SearchEngines.json");
|
||||||
|
return builder.to_string();
|
||||||
|
}
|
||||||
|
|
||||||
BrowserWindow::BrowserWindow(CookieJar& cookie_jar, URL url)
|
BrowserWindow::BrowserWindow(CookieJar& cookie_jar, URL url)
|
||||||
: m_cookie_jar(cookie_jar)
|
: m_cookie_jar(cookie_jar)
|
||||||
, m_window_actions(*this)
|
, m_window_actions(*this)
|
||||||
|
@ -243,22 +251,6 @@ void BrowserWindow::build_menus()
|
||||||
auto& search_engine_menu = settings_menu.add_submenu("&Search Engine");
|
auto& search_engine_menu = settings_menu.add_submenu("&Search Engine");
|
||||||
search_engine_menu.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png").release_value_but_fixme_should_propagate_errors());
|
search_engine_menu.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/find.png").release_value_but_fixme_should_propagate_errors());
|
||||||
bool search_engine_set = false;
|
bool search_engine_set = false;
|
||||||
auto add_search_engine = [&](auto& name, auto& url_format) {
|
|
||||||
auto action = GUI::Action::create_checkable(
|
|
||||||
name, [&](auto&) {
|
|
||||||
g_search_engine = url_format;
|
|
||||||
Config::write_string("Browser", "Preferences", "SearchEngine", g_search_engine);
|
|
||||||
},
|
|
||||||
this);
|
|
||||||
search_engine_menu.add_action(action);
|
|
||||||
m_search_engine_actions.add_action(action);
|
|
||||||
|
|
||||||
if (g_search_engine == url_format) {
|
|
||||||
action->set_checked(true);
|
|
||||||
search_engine_set = true;
|
|
||||||
}
|
|
||||||
action->set_status_tip(url_format);
|
|
||||||
};
|
|
||||||
|
|
||||||
m_disable_search_engine_action = GUI::Action::create_checkable(
|
m_disable_search_engine_action = GUI::Action::create_checkable(
|
||||||
"Disable", [](auto&) {
|
"Disable", [](auto&) {
|
||||||
|
@ -270,12 +262,34 @@ void BrowserWindow::build_menus()
|
||||||
m_search_engine_actions.add_action(*m_disable_search_engine_action);
|
m_search_engine_actions.add_action(*m_disable_search_engine_action);
|
||||||
m_disable_search_engine_action->set_checked(true);
|
m_disable_search_engine_action->set_checked(true);
|
||||||
|
|
||||||
add_search_engine("Bing", "https://www.bing.com/search?q={}");
|
auto search_engines_file = Core::File::construct(Browser::search_engines_file_path());
|
||||||
add_search_engine("DuckDuckGo", "https://duckduckgo.com/?q={}");
|
if (search_engines_file->open(Core::OpenMode::ReadOnly)) {
|
||||||
add_search_engine("FrogFind", "https://frogfind.com/?q={}");
|
if (auto maybe_json = JsonValue::from_string(search_engines_file->read_all()); !maybe_json.is_error() && maybe_json.value().is_array()) {
|
||||||
add_search_engine("GitHub", "https://github.com/search?q={}");
|
auto json = maybe_json.release_value().as_array();
|
||||||
add_search_engine("Google", "https://google.com/search?q={}");
|
for (auto& json_item : json.values()) {
|
||||||
add_search_engine("Yandex", "https://yandex.com/search/?text={}");
|
if (!json_item.is_object())
|
||||||
|
continue;
|
||||||
|
auto search_engine = json_item.as_object();
|
||||||
|
auto name = search_engine.get("title").to_string();
|
||||||
|
auto url_format = search_engine.get("url_format").to_string();
|
||||||
|
|
||||||
|
auto action = GUI::Action::create_checkable(
|
||||||
|
name, [&, url_format](auto&) {
|
||||||
|
g_search_engine = url_format;
|
||||||
|
Config::write_string("Browser", "Preferences", "SearchEngine", g_search_engine);
|
||||||
|
},
|
||||||
|
this);
|
||||||
|
search_engine_menu.add_action(action);
|
||||||
|
m_search_engine_actions.add_action(action);
|
||||||
|
|
||||||
|
if (g_search_engine == url_format) {
|
||||||
|
action->set_checked(true);
|
||||||
|
search_engine_set = true;
|
||||||
|
}
|
||||||
|
action->set_status_tip(url_format);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
auto custom_search_engine_action = GUI::Action::create_checkable("Custom...", [&](auto& action) {
|
auto custom_search_engine_action = GUI::Action::create_checkable("Custom...", [&](auto& action) {
|
||||||
String search_engine;
|
String search_engine;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue