mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 11:12:45 +00:00 
			
		
		
		
	 1b5b1e4153
			
		
	
	
		1b5b1e4153
		
	
	
	
	
		
			
			The user can now save, load, and view calendars. A calendar is made up of an array of events which are saved in a JSON file. In the future we should implement the iCalendar standard instead of using a custom format.
		
			
				
	
	
		
			63 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2023, the SerenityOS developers.
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #include "EventManager.h"
 | |
| #include <AK/JsonParser.h>
 | |
| #include <LibConfig/Client.h>
 | |
| #include <LibFileSystemAccessClient/Client.h>
 | |
| 
 | |
| namespace Calendar {
 | |
| 
 | |
| EventManager::EventManager()
 | |
| {
 | |
| }
 | |
| 
 | |
| OwnPtr<EventManager> EventManager::create()
 | |
| {
 | |
|     return adopt_own(*new EventManager());
 | |
| }
 | |
| 
 | |
| ErrorOr<void> EventManager::add_event(JsonObject event)
 | |
| {
 | |
|     TRY(m_events.append(move(event)));
 | |
|     set_dirty(true);
 | |
|     on_events_change();
 | |
| 
 | |
|     return {};
 | |
| }
 | |
| 
 | |
| void EventManager::set_events(JsonArray events)
 | |
| {
 | |
|     m_events = move(events);
 | |
|     on_events_change();
 | |
| }
 | |
| 
 | |
| ErrorOr<void> EventManager::save(FileSystemAccessClient::File& file)
 | |
| {
 | |
|     set_filename(file.filename());
 | |
|     set_dirty(false);
 | |
| 
 | |
|     auto stream = file.release_stream();
 | |
|     TRY(stream->write_some(m_events.to_deprecated_string().bytes()));
 | |
|     stream->close();
 | |
| 
 | |
|     return {};
 | |
| }
 | |
| 
 | |
| ErrorOr<void> EventManager::load_file(FileSystemAccessClient::File& file)
 | |
| {
 | |
|     set_filename(file.filename());
 | |
|     set_dirty(false);
 | |
| 
 | |
|     auto content = TRY(file.stream().read_until_eof());
 | |
|     auto events = TRY(AK::JsonParser(content).parse());
 | |
| 
 | |
|     set_events(events.as_array());
 | |
| 
 | |
|     return {};
 | |
| }
 | |
| 
 | |
| }
 |