1#ifndef YAZE_APP_PLATFORM_WASM_WASM_FILE_DIALOG_H_
2#define YAZE_APP_PLATFORM_WASM_WASM_FILE_DIALOG_H_
10#include <unordered_map>
13#include "absl/status/status.h"
14#include "absl/status/statusor.h"
33 using FileLoadCallback = std::function<void(
34 const std::string& filename,
const std::vector<uint8_t>& data)>;
40 using ErrorCallback = std::function<void(
const std::string& error_message)>;
48 static void OpenFileDialog(
const std::string& accept,
49 FileLoadCallback on_load,
50 ErrorCallback on_error =
nullptr);
58 static void OpenTextFileDialog(
const std::string& accept,
59 std::function<
void(
const std::string& filename,
60 const std::string& content)>
62 ErrorCallback on_error =
nullptr);
70 static absl::Status DownloadFile(
const std::string& filename,
71 const std::vector<uint8_t>& data);
80 static absl::Status DownloadTextFile(
81 const std::string& filename,
const std::string& content,
82 const std::string& mime_type =
"text/plain");
88 static bool IsSupported();
93 struct PendingOperation {
95 FileLoadCallback binary_callback;
96 std::function<void(
const std::string&,
const std::string&)> text_callback;
97 ErrorCallback error_callback;
103 static int next_callback_id_;
104 static std::unordered_map<int, PendingOperation> pending_operations_;
105 static std::mutex operations_mutex_;
112 static int RegisterCallback(PendingOperation operation);
119 static std::unique_ptr<PendingOperation> GetPendingOperation(
int callback_id);
130 static void HandleFileLoaded(
int callback_id,
const char* filename,
131 const uint8_t* data,
size_t size);
139 static void HandleTextFileLoaded(
int callback_id,
const char* filename,
140 const char* content);
147 static void HandleFileError(
int callback_id,
const char* error_message);
155void yazeHandleFileLoaded(
int callback_id,
const char* filename,
156 const uint8_t* data,
size_t size);
157void yazeHandleTextFileLoaded(
int callback_id,
const char* filename,
158 const char* content);
159void yazeHandleFileError(
int callback_id,
const char* error_message);