summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Base/home/anon/.config/SearchEngines.json26
-rw-r--r--Userland/Applications/Browser/BrowserWindow.cpp58
2 files changed, 62 insertions, 22 deletions
diff --git a/Base/home/anon/.config/SearchEngines.json b/Base/home/anon/.config/SearchEngines.json
new file mode 100644
index 0000000000..249d42ae3a
--- /dev/null
+++ b/Base/home/anon/.config/SearchEngines.json
@@ -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={}"
+ }
+]
diff --git a/Userland/Applications/Browser/BrowserWindow.cpp b/Userland/Applications/Browser/BrowserWindow.cpp
index 91c836229e..b425208cdc 100644
--- a/Userland/Applications/Browser/BrowserWindow.cpp
+++ b/Userland/Applications/Browser/BrowserWindow.cpp
@@ -46,6 +46,14 @@ static String bookmarks_file_path()
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)
: m_cookie_jar(cookie_jar)
, m_window_actions(*this)
@@ -243,22 +251,6 @@ void BrowserWindow::build_menus()
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());
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(
"Disable", [](auto&) {
@@ -270,12 +262,34 @@ void BrowserWindow::build_menus()
m_search_engine_actions.add_action(*m_disable_search_engine_action);
m_disable_search_engine_action->set_checked(true);
- add_search_engine("Bing", "https://www.bing.com/search?q={}");
- add_search_engine("DuckDuckGo", "https://duckduckgo.com/?q={}");
- add_search_engine("FrogFind", "https://frogfind.com/?q={}");
- add_search_engine("GitHub", "https://github.com/search?q={}");
- add_search_engine("Google", "https://google.com/search?q={}");
- add_search_engine("Yandex", "https://yandex.com/search/?text={}");
+ auto search_engines_file = Core::File::construct(Browser::search_engines_file_path());
+ if (search_engines_file->open(Core::OpenMode::ReadOnly)) {
+ if (auto maybe_json = JsonValue::from_string(search_engines_file->read_all()); !maybe_json.is_error() && maybe_json.value().is_array()) {
+ auto json = maybe_json.release_value().as_array();
+ for (auto& json_item : json.values()) {
+ 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) {
String search_engine;