/* * Copyright (c) 2020, Andreas Kling * Copyright (c) 2022, the SerenityOS developers. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Core { class MimeData : public EventReceiver { C_OBJECT(MimeData); public: virtual ~MimeData() = default; ByteBuffer data(StringView mime_type) const { return m_data.get(mime_type).value_or({}); } void set_data(String const& mime_type, ByteBuffer&& data) { m_data.set(mime_type, move(data)); } bool has_format(StringView mime_type) const { return m_data.contains(mime_type); } Vector formats() const { return m_data.keys(); } // Convenience helpers for "text/plain" bool has_text() const { return has_format("text/plain"sv); } ByteString text() const; void set_text(ByteString const&); // Convenience helpers for "text/uri-list" bool has_urls() const { return has_format("text/uri-list"sv); } Vector urls() const; ErrorOr set_urls(Vector const&); HashMap const& all_data() const { return m_data; } private: MimeData() = default; explicit MimeData(HashMap const& data) : m_data(data.clone().release_value_but_fixme_should_propagate_errors()) { } HashMap m_data; }; StringView guess_mime_type_based_on_filename(StringView); Optional guess_mime_type_based_on_sniffed_bytes(ReadonlyBytes); Optional guess_mime_type_based_on_sniffed_bytes(Core::File&); struct MimeType { StringView name {}; Vector common_extensions {}; StringView description {}; Optional> magic_bytes {}; u64 offset { 0 }; }; Optional get_mime_type_data(StringView); }