/* * Copyright (c) 2020, Linus Groh * Copyright (c) 2022, the SerenityOS developers. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Desktop { class AppFile : public RefCounted { public: static constexpr auto APP_FILES_DIRECTORY = "/res/apps"sv; static bool exists_for_app(StringView app_name); static ByteString file_for_app(StringView app_name); static ByteString app_file_path_for_app(StringView app_name); static NonnullRefPtr get_for_app(StringView app_name); static NonnullRefPtr open(StringView path); static void for_each(Function)>, StringView directory = APP_FILES_DIRECTORY); ~AppFile() = default; bool is_valid() const { return m_valid; } ByteString filename() const { return m_config->filename(); } ByteString name() const; ByteString menu_name() const; ByteString executable() const; ByteString category() const; ByteString description() const; ByteString working_directory() const; ByteString icon_path() const; GUI::Icon icon() const; bool run_in_terminal() const; bool requires_root() const; bool exclude_from_system_menu() const; Vector launcher_mime_types() const; Vector launcher_file_types() const; Vector launcher_protocols() const; bool spawn(ReadonlySpan arguments = {}) const; bool spawn_with_escalation(ReadonlySpan arguments = {}) const; void spawn_with_escalation_or_show_error(GUI::Window&, ReadonlySpan arguments = {}) const; private: explicit AppFile(StringView path); bool validate() const; RefPtr m_config; bool m_valid { false }; }; }