/* * Copyright (c) 2023, the SerenityOS developers. * Copyright (c) 2023, David Ganz * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include namespace Calendar { struct Event { String summary; Core::DateTime start; Core::DateTime end; }; class EventManager { AK_MAKE_NONCOPYABLE(EventManager); AK_MAKE_NONMOVABLE(EventManager); public: static OwnPtr create(); ByteString const& current_filename() const { return m_current_filename; } void set_filename(ByteString filename) { m_current_filename = move(filename); } ErrorOr save(FileSystemAccessClient::File& file); ErrorOr load_file(FileSystemAccessClient::File& file); void add_event(Event); void set_events(Vector); void clear() { m_events.clear(); } bool is_dirty() const { return m_dirty; } Span events() const { return m_events.span(); } Function on_events_change; private: explicit EventManager(); ErrorOr serialize_events(); ErrorOr> deserialize_events(JsonArray const& json); Vector m_events; bool m_dirty { false }; ByteString m_current_filename; }; }