yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
wasm_settings.h
Go to the documentation of this file.
1#ifndef YAZE_APP_PLATFORM_WASM_SETTINGS_H_
2#define YAZE_APP_PLATFORM_WASM_SETTINGS_H_
3
4#ifdef __EMSCRIPTEN__
5
6#include <string>
7#include <vector>
8#include <chrono>
9
10#include "absl/status/status.h"
11#include "absl/status/statusor.h"
12#include "nlohmann/json.hpp"
13
14namespace yaze {
15namespace platform {
16
25class WasmSettings {
26 public:
27 // Theme Management
28
34 static absl::Status SaveTheme(const std::string& theme);
35
40 static std::string LoadTheme();
41
46 static std::string GetCurrentThemeData();
47
54 static absl::Status LoadUserFont(const std::string& name,
55 const std::string& data, float size);
56
57 // Recent Files Management
58
65 static absl::Status AddRecentFile(
66 const std::string& filename,
67 std::chrono::system_clock::time_point timestamp =
68 std::chrono::system_clock::now());
69
75 static std::vector<std::string> GetRecentFiles(size_t max_count = 10);
76
81 static absl::Status ClearRecentFiles();
82
88 static absl::Status RemoveRecentFile(const std::string& filename);
89
90 // Workspace Layout Management
91
98 static absl::Status SaveWorkspace(const std::string& name,
99 const std::string& layout_json);
100
106 static absl::StatusOr<std::string> LoadWorkspace(const std::string& name);
107
112 static std::vector<std::string> ListWorkspaces();
113
119 static absl::Status DeleteWorkspace(const std::string& name);
120
126 static absl::Status SetActiveWorkspace(const std::string& name);
127
132 static std::string GetActiveWorkspace();
133
134 // Undo History Persistence (for crash recovery)
135
142 static absl::Status SaveUndoHistory(const std::string& editor_id,
143 const std::vector<uint8_t>& history);
144
150 static absl::StatusOr<std::vector<uint8_t>> LoadUndoHistory(
151 const std::string& editor_id);
152
158 static absl::Status ClearUndoHistory(const std::string& editor_id);
159
164 static absl::Status ClearAllUndoHistory();
165
166 // General Settings
167
174 static absl::Status SaveSetting(const std::string& key,
175 const nlohmann::json& value);
176
182 static absl::StatusOr<nlohmann::json> LoadSetting(const std::string& key);
183
189 static bool HasSetting(const std::string& key);
190
196 static absl::Status SaveAllSettings(const nlohmann::json& settings);
197
202 static absl::StatusOr<nlohmann::json> LoadAllSettings();
203
208 static absl::Status ClearAllSettings();
209
210 // Utility
211
216 static absl::StatusOr<std::string> ExportSettings();
217
223 static absl::Status ImportSettings(const std::string& json_str);
224
229 static absl::StatusOr<std::chrono::system_clock::time_point> GetLastSaveTime();
230
231 private:
232 // Storage keys for localStorage
233 static constexpr const char* kThemeKey = "yaze_theme";
234 static constexpr const char* kRecentFilesKey = "yaze_recent_files";
235 static constexpr const char* kActiveWorkspaceKey = "yaze_active_workspace";
236 static constexpr const char* kSettingsPrefix = "yaze_setting_";
237 static constexpr const char* kLastSaveTimeKey = "yaze_last_save_time";
238
239 // Storage keys for IndexedDB (via WasmStorage)
240 static constexpr const char* kWorkspacePrefix = "workspace_";
241 static constexpr const char* kUndoHistoryPrefix = "undo_";
242
243 // Helper structure for recent files
244 struct RecentFile {
245 std::string filename;
246 std::chrono::system_clock::time_point timestamp;
247 };
248
249 // Helper to serialize/deserialize recent files
250 static nlohmann::json RecentFilesToJson(const std::vector<RecentFile>& files);
251 static std::vector<RecentFile> JsonToRecentFiles(const nlohmann::json& json);
252
253 // Prevent instantiation
254 WasmSettings() = delete;
255 ~WasmSettings() = delete;
256};
257
258} // namespace platform
259} // namespace yaze
260
261#endif // __EMSCRIPTEN__
262
263#endif // YAZE_APP_PLATFORM_WASM_SETTINGS_H_