@@ -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
968972winrt::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,
0 commit comments