Skip to content

Commit 0f8571b

Browse files
committed
use co_await instead of get()
1 parent 0a12326 commit 0f8571b

File tree

2 files changed

+57
-54
lines changed

2 files changed

+57
-54
lines changed

windows/ReactNativeBlobUtil/ReactNativeBlobUtil.cpp

Lines changed: 55 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -251,9 +251,9 @@ namespace winrt::ReactNativeBlobUtil
251251
std::string contentPath = data.substr(strlen("file://"));
252252
winrt::hstring directoryPath, fileName;
253253
splitPath(contentPath, directoryPath, fileName);
254-
auto folder = winrt::Windows::Storage::StorageFolder::GetFolderFromPathAsync(directoryPath).get();
255-
auto storageFile = folder.GetFileAsync(fileName).get();
256-
auto requestBuffer = winrt::Windows::Storage::FileIO::ReadBufferAsync(storageFile).get();
254+
auto folder = co_await winrt::Windows::Storage::StorageFolder::GetFolderFromPathAsync(directoryPath);
255+
auto storageFile = co_await folder.GetFileAsync(fileName);
256+
auto requestBuffer = co_await winrt::Windows::Storage::FileIO::ReadBufferAsync(storageFile);
257257

258258
winrt::Windows::Web::Http::HttpBufferContent requestBufferContent{ requestBuffer };
259259
if (!items["type"].IsNull())
@@ -306,12 +306,12 @@ namespace winrt::ReactNativeBlobUtil
306306
requestMessage.Content(requestContent);
307307

308308
winrt::Windows::Web::Http::HttpClient httpClient{ filter };
309-
auto response = httpClient.SendRequestAsync(requestMessage).get();
309+
auto response = co_await httpClient.SendRequestAsync(requestMessage);
310310

311311
std::string responseBody;
312312
if (response.Content() != nullptr)
313313
{
314-
responseBody = winrt::to_string(response.Content().ReadAsStringAsync().get());
314+
responseBody = winrt::to_string(co_await response.Content().ReadAsStringAsync());
315315
}
316316

317317
::React::JSValueArray resultArray;
@@ -395,9 +395,9 @@ namespace winrt::ReactNativeBlobUtil
395395
bool hasTrailingSlash = contentPath[fileLength - 1] == '\\' || contentPath[fileLength - 1] == '/';
396396
winrt::hstring directoryPath, fileName;
397397
splitPath(hasTrailingSlash ? contentPath.substr(0, fileLength - 1) : contentPath, directoryPath, fileName);
398-
auto folder = winrt::Windows::Storage::StorageFolder::GetFolderFromPathAsync(directoryPath).get();
399-
auto storageFile = folder.GetFileAsync(fileName).get();
400-
auto requestBuffer = winrt::Windows::Storage::FileIO::ReadBufferAsync(storageFile).get();
398+
auto folder = co_await winrt::Windows::Storage::StorageFolder::GetFolderFromPathAsync(directoryPath);
399+
auto storageFile = co_await folder.GetFileAsync(fileName);
400+
auto requestBuffer = co_await winrt::Windows::Storage::FileIO::ReadBufferAsync(storageFile);
401401

402402
winrt::Windows::Web::Http::HttpBufferContent requestContent{ requestBuffer };
403403

@@ -430,12 +430,12 @@ namespace winrt::ReactNativeBlobUtil
430430
}
431431

432432
// Send the request
433-
auto response = httpClient.SendRequestAsync(requestMessage).get();
433+
auto response = co_await httpClient.SendRequestAsync(requestMessage);
434434

435435
std::string responseBody;
436436
if (response.Content() != nullptr)
437437
{
438-
responseBody = winrt::to_string(response.Content().ReadAsStringAsync().get());
438+
responseBody = winrt::to_string(co_await response.Content().ReadAsStringAsync());
439439
}
440440

441441
::React::JSValueArray resultArray;
@@ -728,9 +728,9 @@ winrt::fire_and_forget ReactNativeBlobUtil::writeStream(
728728
{
729729
winrt::hstring directoryPath, fileName;
730730
splitPath(path, directoryPath, fileName);
731-
auto folder = StorageFolder::GetFolderFromPathAsync(directoryPath).get();
732-
auto file = folder.CreateFileAsync(fileName, CreationCollisionOption::OpenIfExists).get();
733-
auto stream = file.OpenAsync(FileAccessMode::ReadWrite).get();
731+
auto folder = co_await StorageFolder::GetFolderFromPathAsync(directoryPath);
732+
auto file = co_await folder.CreateFileAsync(fileName, CreationCollisionOption::OpenIfExists);
733+
auto stream = co_await file.OpenAsync(FileAccessMode::ReadWrite);
734734
if (appendData)
735735
{
736736
stream.Seek(stream.Size());
@@ -901,25 +901,23 @@ winrt::fire_and_forget ReactNativeBlobUtil::unlink(
901901
std::string path,
902902
std::function<void(::React::JSValueArray)> callback) noexcept
903903
{
904-
winrt::Windows::System::Threading::ThreadPool::RunAsync([this, path, callback](auto&&)
905-
{
906-
try
904+
try
907905
{
908906
if (std::filesystem::is_directory(path))
909907
{
910908
std::filesystem::path unlinkPath(path);
911909
unlinkPath.make_preferred();
912910
auto folderOp = winrt::Windows::Storage::StorageFolder::GetFolderFromPathAsync(
913911
winrt::to_hstring(unlinkPath.c_str()));
914-
folderOp.get().DeleteAsync().get();
912+
co_await folderOp.get().DeleteAsync();
915913
}
916914
else
917915
{
918916
winrt::hstring directoryPath, fileName;
919917
splitPath(path, directoryPath, fileName);
920-
auto folder = winrt::Windows::Storage::StorageFolder::GetFolderFromPathAsync(directoryPath).get();
921-
auto item = folder.GetItemAsync(fileName).get();
922-
item.DeleteAsync().get();
918+
auto folder = co_await winrt::Windows::Storage::StorageFolder::GetFolderFromPathAsync(directoryPath);
919+
auto item = co_await folder.GetItemAsync(fileName);
920+
co_await item.DeleteAsync();
923921
}
924922

925923
::React::JSValueArray result;
@@ -933,36 +931,42 @@ winrt::fire_and_forget ReactNativeBlobUtil::unlink(
933931
errorResult.push_back(::React::JSValue(winrt::to_string(ex.message())));
934932
callback(std::move(errorResult));
935933
}
936-
});
934+
937935
}
938936

939-
void ReactNativeBlobUtil::removeSession(
940-
::React::JSValueArray&& paths,
941-
std::function<void(::React::JSValueArray const&)> const& callback) noexcept
937+
winrt::fire_and_forget ReactNativeBlobUtil::removeSession(::React::JSValueArray paths, std::function<void(::React::JSValueArray)> callback) noexcept
942938
{
943-
winrt::Windows::System::Threading::ThreadPool::RunAsync([paths = std::move(paths), callback](auto&&)
939+
try
944940
{
945-
::React::JSValueArray resultArray;
946-
try
941+
for (const auto& pathValue : paths)
947942
{
948-
for (const auto& path : paths)
943+
if (pathValue)
949944
{
950-
std::filesystem::path toDelete{ path.AsString() };
951-
toDelete.make_preferred();
952-
auto fileOp = winrt::Windows::Storage::StorageFile::GetFileFromPathAsync(winrt::to_hstring(toDelete.c_str()));
953-
auto file = fileOp.get();
954-
file.DeleteAsync().get();
945+
std::string path = pathValue.AsString();
946+
auto folder = co_await winrt::Windows::Storage::StorageFolder::GetFolderFromPathAsync(winrt::to_hstring(path));
947+
auto file = co_await folder.GetFileAsync(winrt::to_hstring(path));
948+
co_await file.DeleteAsync();
955949
}
956-
// Success: return empty array
957-
callback(resultArray);
958-
}
959-
catch (const winrt::hresult_error& ex)
960-
{
961-
resultArray.push_back("EUNSPECIFIED");
962-
resultArray.push_back(winrt::to_string(ex.message()));
963-
callback(resultArray);
964950
}
965-
});
951+
952+
::React::JSValueArray resultArray;
953+
resultArray.push_back("SUCCESS");
954+
callback(std::move(resultArray));
955+
}
956+
catch (const winrt::hresult_error& ex)
957+
{
958+
::React::JSValueArray errorArray;
959+
errorArray.push_back("ERROR");
960+
errorArray.push_back(winrt::to_string(ex.message()));
961+
callback(std::move(errorArray));
962+
}
963+
catch (...)
964+
{
965+
::React::JSValueArray errorArray;
966+
errorArray.push_back("ERROR");
967+
errorArray.push_back("Unknown error in removeSession");
968+
callback(std::move(errorArray));
969+
}
966970
}
967971

968972
winrt::fire_and_forget ReactNativeBlobUtil::ls(
@@ -1332,10 +1336,9 @@ winrt::fire_and_forget ReactNativeBlobUtil::readFile(
13321336
winrt::hstring directoryPath, fileName;
13331337
splitPath(path, directoryPath, fileName);
13341338

1335-
// Use .get() to synchronously wait for async operations
1336-
auto folder = StorageFolder::GetFolderFromPathAsync(directoryPath).get();
1337-
auto file = folder.GetFileAsync(fileName).get();
1338-
auto buffer = FileIO::ReadBufferAsync(file).get();
1339+
auto folder = co_await StorageFolder::GetFolderFromPathAsync(directoryPath);
1340+
auto file = co_await folder.GetFileAsync(fileName);
1341+
auto buffer = co_await FileIO::ReadBufferAsync(file);
13391342

13401343
::React::JSValueArray resultArray;
13411344
if (encoding == "base64")
@@ -1431,7 +1434,7 @@ winrt::fire_and_forget ReactNativeBlobUtil::hash(
14311434
}
14321435
}
14331436

1434-
void ReactNativeBlobUtil::readStream(
1437+
winrt::fire_and_forget ReactNativeBlobUtil::readStream(
14351438
std::string path,
14361439
std::string encoding,
14371440
double bufferSize,
@@ -1461,7 +1464,7 @@ void ReactNativeBlobUtil::readStream(
14611464
{"event", "error"},
14621465
{"EINVAL", "Unsupported encoding: " + encoding}
14631466
});
1464-
return;
1467+
co_return;
14651468
}
14661469

14671470
uint32_t chunkSize = (usedEncoding == EncodingOptions::BASE64) ? 4095 : 4096;
@@ -1473,15 +1476,15 @@ void ReactNativeBlobUtil::readStream(
14731476
winrt::hstring directoryPath, fileName;
14741477
splitPath(path, directoryPath, fileName);
14751478

1476-
StorageFolder folder = StorageFolder::GetFolderFromPathAsync(directoryPath).get();
1477-
StorageFile file = folder.GetFileAsync(fileName).get();
1478-
Streams::IRandomAccessStream stream = file.OpenAsync(FileAccessMode::Read).get();
1479+
StorageFolder folder = co_await StorageFolder::GetFolderFromPathAsync(directoryPath);
1480+
StorageFile file = co_await folder.GetFileAsync(fileName);
1481+
Streams::IRandomAccessStream stream = co_await file.OpenAsync(FileAccessMode::Read);
14791482

14801483
Buffer buffer{ chunkSize };
14811484

14821485
for (;;)
14831486
{
1484-
auto readBuffer = stream.ReadAsync(buffer, buffer.Capacity(), InputStreamOptions::None).get();
1487+
auto readBuffer = co_await stream.ReadAsync(buffer, buffer.Capacity(), InputStreamOptions::None);
14851488
if (readBuffer.Length() == 0)
14861489
{
14871490
m_reactContext.CallJSFunction(L"RCTDeviceEventEmitter", L"emit", streamId,

windows/ReactNativeBlobUtil/ReactNativeBlobUtil.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ struct ReactNativeBlobUtil
195195
winrt::fire_and_forget unlink(std::string path, std::function<void(::React::JSValueArray)> callback) noexcept;
196196

197197
REACT_METHOD(removeSession)
198-
void removeSession(::React::JSValueArray&& paths, std::function<void(::React::JSValueArray const&)> const& callback) noexcept;
198+
winrt::fire_and_forget removeSession(::React::JSValueArray paths, std::function<void(::React::JSValueArray)> callback) noexcept;
199199

200200
// readFile
201201
REACT_METHOD(readFile)
@@ -261,7 +261,7 @@ struct ReactNativeBlobUtil
261261
void mkdir(std::string path, ::React::ReactPromise<bool>&& result) noexcept;
262262

263263
REACT_METHOD(readStream)
264-
void readStream(std::string path, std::string encoding, double bufferSize, double tick, std::string streamId) noexcept;
264+
winrt::fire_and_forget readStream(std::string path, std::string encoding, double bufferSize, double tick, std::string streamId) noexcept;
265265

266266
REACT_METHOD(getEnvironmentDirs)
267267
void getEnvironmentDirs(std::function<void(::React::JSValueArray const&)> const& callback) noexcept;

0 commit comments

Comments
 (0)