From 4d4ac769c1e1f5cfd8648d2912926c1f8f5c6734 Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Wed, 12 Apr 2023 17:38:18 +0100 Subject: [PATCH] Assistant: Cache AppFile objects on AppProvider creation This avoids unnecesarily recreating AppFiles on every query. --- Userland/Applications/Assistant/Providers.cpp | 15 +++++++++++---- Userland/Applications/Assistant/Providers.h | 5 +++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Userland/Applications/Assistant/Providers.cpp b/Userland/Applications/Assistant/Providers.cpp index aed186af00..59ae6a0c5d 100644 --- a/Userland/Applications/Assistant/Providers.cpp +++ b/Userland/Applications/Assistant/Providers.cpp @@ -62,6 +62,13 @@ void URLResult::activate() const Desktop::Launcher::open(URL::create_with_url_or_path(title())); } +AppProvider::AppProvider() +{ + Desktop::AppFile::for_each([this](NonnullRefPtr app_file) { + m_app_file_cache.append(move(app_file)); + }); +} + void AppProvider::query(DeprecatedString const& query, Function>)> on_complete) { if (query.starts_with('=') || query.starts_with('$')) @@ -69,17 +76,17 @@ void AppProvider::query(DeprecatedString const& query, Function> results; - Desktop::AppFile::for_each([&](NonnullRefPtr app_file) { + for (auto const& app_file : m_app_file_cache) { auto query_and_arguments = query.split_limit(' ', 2); auto app_name = query_and_arguments.is_empty() ? query : query_and_arguments[0]; auto arguments = query_and_arguments.size() < 2 ? DeprecatedString::empty() : query_and_arguments[1]; auto match_result = fuzzy_match(app_name, app_file->name()); if (!match_result.matched) - return; + continue; auto icon = GUI::FileIconProvider::icon_for_executable(app_file->executable()); - results.append(adopt_ref(*new AppResult(icon.bitmap_for_size(16), app_file->name(), {}, app_file, arguments, match_result.score))); - }); + results.append(make_ref_counted(icon.bitmap_for_size(16), app_file->name(), DeprecatedString::empty(), app_file, arguments, match_result.score)); + }; on_complete(move(results)); } diff --git a/Userland/Applications/Assistant/Providers.h b/Userland/Applications/Assistant/Providers.h index a802a1ec29..d7a5a10e74 100644 --- a/Userland/Applications/Assistant/Providers.h +++ b/Userland/Applications/Assistant/Providers.h @@ -141,7 +141,12 @@ public: class AppProvider final : public Provider { public: + AppProvider(); + void query(DeprecatedString const& query, Function>)> on_complete) override; + +private: + Vector> m_app_file_cache; }; class CalculatorProvider final : public Provider {