diff --git a/Ladybird/Qt/Settings.cpp b/Ladybird/Qt/Settings.cpp index e81d602c70c..a77ab7ed7ab 100644 --- a/Ladybird/Qt/Settings.cpp +++ b/Ladybird/Qt/Settings.cpp @@ -8,6 +8,7 @@ #include "Settings.h" #include "StringUtils.h" +#include #include namespace Ladybird { @@ -29,6 +30,11 @@ Settings::Settings() set_search_engine(move(default_search_engine)); } +ByteString Settings::directory() +{ + return LexicalPath::dirname(ak_byte_string_from_qstring(m_qsettings->fileName())); +} + Optional Settings::last_position() { if (m_qsettings->contains("last_position")) diff --git a/Ladybird/Qt/Settings.h b/Ladybird/Qt/Settings.h index 1ee7012ee05..06a5fa23bc7 100644 --- a/Ladybird/Qt/Settings.h +++ b/Ladybird/Qt/Settings.h @@ -30,6 +30,8 @@ public: return &instance; } + ByteString directory(); + Optional last_position(); void set_last_position(QPoint const& last_position); diff --git a/Ladybird/Qt/main.cpp b/Ladybird/Qt/main.cpp index 869a2a7d869..a9c4d9648cd 100644 --- a/Ladybird/Qt/main.cpp +++ b/Ladybird/Qt/main.cpp @@ -153,6 +153,8 @@ ErrorOr serenity_main(Main::Arguments arguments) }; #endif + copy_default_config_files(Ladybird::Settings::the()->directory()); + RefPtr database; if (!disable_sql_database) database = TRY(WebView::Database::create()); diff --git a/Ladybird/Utilities.cpp b/Ladybird/Utilities.cpp index 1e8c994965e..37a7121d063 100644 --- a/Ladybird/Utilities.cpp +++ b/Ladybird/Utilities.cpp @@ -8,7 +8,9 @@ #include "Utilities.h" #include #include +#include #include +#include #include #include #include @@ -77,6 +79,24 @@ void platform_init() Core::ResourceImplementation::install(make(MUST(String::from_byte_string(s_serenity_resource_root)))); } +void copy_default_config_files(StringView config_path) +{ + MUST(Core::Directory::create(config_path, Core::Directory::CreateDirectories::Yes)); + + auto config_resources = MUST(Core::Resource::load_from_uri("resource://ladybird/default-config"sv)); + + config_resources->for_each_descendant_file([config_path](Core::Resource const& resource) -> IterationDecision { + auto file_path = ByteString::formatted("{}/{}", config_path, resource.filename()); + + if (Core::System::stat(file_path).is_error()) { + auto file = MUST(Core::File::open(file_path, Core::File::OpenMode::Write)); + MUST(file->write_until_depleted(resource.data())); + } + + return IterationDecision::Continue; + }); +} + ErrorOr> get_paths_for_helper_process(StringView process_name) { auto application_path = TRY(application_directory()); diff --git a/Ladybird/Utilities.h b/Ladybird/Utilities.h index 83436e7278b..2c8873cb2ae 100644 --- a/Ladybird/Utilities.h +++ b/Ladybird/Utilities.h @@ -13,6 +13,7 @@ #include void platform_init(); +void copy_default_config_files(StringView config_path); ErrorOr application_directory(); ErrorOr> get_paths_for_helper_process(StringView process_name);