MCPcopy Create free account
hub / github.com/CommE2E/comm / readBufferFromFile

Method readBufferFromFile

native/cpp/CommonCpp/NativeModules/CommUtilsModule.cpp:57–106  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

55}
56
57jsi::Value
58CommUtilsModule::readBufferFromFile(jsi::Runtime &rt, jsi::String path) {
59 auto filePath = path.utf8(rt);
60 return createPromiseAsJSIValue(
61 rt, [=](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) {
62 taskType job = [=, &innerRt]() {
63 std::string error;
64 std::streampos file_size;
65 std::shared_ptr<uint8_t> data{nullptr};
66 try {
67 // Open a file
68 std::ifstream file;
69 file.exceptions(std::fstream::failbit | std::fstream::badbit);
70 file.open(filePath, std::ios::binary);
71
72 // Get file size
73 std::streampos current_pos = file.tellg();
74 file.seekg(0, std::ios::end);
75 file_size = file.tellg();
76 file.seekg(current_pos);
77
78 // Read file content
79 data = std::shared_ptr<uint8_t>{new uint8_t[file_size]};
80 file.read((char *)data.get(), file_size);
81 file.close();
82 } catch (const std::exception &e) {
83 error = "Failed to read file " + filePath + ": " + e.what();
84 }
85
86 this->jsInvoker_->invokeAsync([=, &innerRt]() {
87 if (error.size()) {
88 promise->reject(error);
89 return;
90 }
91 auto arrayBuffer =
92 innerRt.global()
93 .getPropertyAsFunction(innerRt, "ArrayBuffer")
94 // ArrayBuffer constructor takes one parameter: byte length
95 .callAsConstructor(
96 innerRt, {static_cast<double>(file_size)})
97 .asObject(innerRt)
98 .getArrayBuffer(innerRt);
99 auto bufferPtr = arrayBuffer.data(innerRt);
100 memcpy((void *)bufferPtr, data.get(), file_size);
101 promise->resolve(std::move(arrayBuffer));
102 });
103 };
104 this->utilsThread->scheduleTask(job);
105 });
106}
107
108jsi::String
109CommUtilsModule::base64EncodeBuffer(jsi::Runtime &rt, jsi::Object data) {

Callers

nothing calls this directly

Calls 7

rejectMethod · 0.80
resolveMethod · 0.80
scheduleTaskMethod · 0.80
openMethod · 0.65
readMethod · 0.65
getMethod · 0.65
closeMethod · 0.65

Tested by

no test coverage detected