diff --git a/binding.gyp b/binding.gyp index 525f60c9..35d5c1ac 100644 --- a/binding.gyp +++ b/binding.gyp @@ -31,6 +31,7 @@ "native-src/virtual_drive/create_file_placeholder.cpp", "native-src/virtual_drive/create_folder_placeholder.cpp", "native-src/virtual_drive/get_file_identity.cpp", + "native-src/virtual_drive/hydrate_file.cpp", "native-src/virtual_drive/register_sync_root.cpp" ], "include_dirs": [ diff --git a/dist/addon.node b/dist/addon.node index 856a5c92..3d315aa6 100644 Binary files a/dist/addon.node and b/dist/addon.node differ diff --git a/include/virtual_drive/hydrate_file.h b/include/virtual_drive/hydrate_file.h new file mode 100644 index 00000000..4eaa0e3d --- /dev/null +++ b/include/virtual_drive/hydrate_file.h @@ -0,0 +1,5 @@ +#pragma once + +#include + +napi_value hydrate_file_impl(napi_env env, napi_callback_info args); diff --git a/native-src/sync_root_interface/SyncRoot.cpp b/native-src/sync_root_interface/SyncRoot.cpp index 16ed6027..e0a1ec92 100644 --- a/native-src/sync_root_interface/SyncRoot.cpp +++ b/native-src/sync_root_interface/SyncRoot.cpp @@ -68,12 +68,6 @@ void SyncRoot::HydrateFile(const wchar_t *filePath) wprintf(L"Hydration finished %ls\n", filePath); } } - // } - // else - // { - // wprintf(L"File is already hydrated: %ls\n", filePath); - // Logger::getInstance().log("File is already hydrated " + Logger::fromWStringToString(filePath), LogLevel::INFO); - // } } } } diff --git a/native-src/virtual_drive/Wrappers.cpp b/native-src/virtual_drive/Wrappers.cpp index e6eedbfd..2ee7f6b9 100644 --- a/native-src/virtual_drive/Wrappers.cpp +++ b/native-src/virtual_drive/Wrappers.cpp @@ -13,6 +13,7 @@ #include "create_file_placeholder.h" #include "get_file_identity.h" #include "connect_sync_root.h" +#include "hydrate_file.h" #include "napi_safe_wrap.h" std::string WStringToUTF8(const std::wstring &wstr) @@ -408,50 +409,7 @@ napi_value UpdateFileIdentityWrapper(napi_env env, napi_callback_info args) napi_value HydrateFileWrapper(napi_env env, napi_callback_info args) { - size_t argc = 1; - napi_value argv[1]; - napi_value thisArg; - napi_get_cb_info(env, args, &argc, argv, &thisArg, nullptr); - - if (argc < 1) - { - napi_throw_type_error(env, nullptr, "The file path is required for HydrateFile"); - return nullptr; - } - - // Obtener el argumento de JavaScript y convertirlo a una cadena de C++ - size_t pathLength; - napi_get_value_string_utf16(env, argv[0], nullptr, 0, &pathLength); - std::wstring fullPath(pathLength, L'\0'); - napi_get_value_string_utf16(env, argv[0], reinterpret_cast(&fullPath[0]), pathLength + 1, nullptr); - - // Crear una promesa - napi_deferred deferred; - napi_value promise; - napi_create_promise(env, &deferred, &promise); - - // Lanzar la operación asíncrona en un hilo separado - std::thread([deferred, fullPath, env]() - { - try { - SyncRoot::HydrateFile(fullPath.c_str()); - Logger::getInstance().log("finish... " + Logger::fromWStringToString(fullPath.c_str()), LogLevel::INFO); - - napi_value result; - napi_get_undefined(env, &result); - napi_resolve_deferred(env, deferred, result); - } catch (const std::exception& e) { - napi_value error; - napi_create_string_utf8(env, e.what(), NAPI_AUTO_LENGTH, &error); - napi_reject_deferred(env, deferred, error); - } catch (...) { - napi_value error; - napi_create_string_utf8(env, "Unknown error", NAPI_AUTO_LENGTH, &error); - napi_reject_deferred(env, deferred, error); - } }) - .detach(); - - return promise; + return napi_safe_wrap(env, args, hydrate_file_impl); } napi_value DehydrateFileWrapper(napi_env env, napi_callback_info args) diff --git a/native-src/virtual_drive/hydrate_file.cpp b/native-src/virtual_drive/hydrate_file.cpp new file mode 100644 index 00000000..28b32cea --- /dev/null +++ b/native-src/virtual_drive/hydrate_file.cpp @@ -0,0 +1,53 @@ +#include +#include "Logger.h" +#include "SyncRoot.h" + +napi_value hydrate_file_impl(napi_env env, napi_callback_info args) +{ + size_t argc = 1; + napi_value argv[1]; + napi_value thisArg; + napi_get_cb_info(env, args, &argc, argv, &thisArg, nullptr); + + if (argc < 1) + { + napi_throw_type_error(env, nullptr, "The file path is required for HydrateFile"); + return nullptr; + } + + // Obtener el argumento de JavaScript y convertirlo a una cadena de C++ + size_t pathLength; + napi_get_value_string_utf16(env, argv[0], nullptr, 0, &pathLength); + std::wstring fullPath(pathLength, L'\0'); + napi_get_value_string_utf16(env, argv[0], reinterpret_cast(&fullPath[0]), pathLength + 1, nullptr); + + // Crear una promesa + napi_deferred deferred; + napi_value promise; + napi_create_promise(env, &deferred, &promise); + + // Lanzar la operación asíncrona en un hilo separado + std::thread([deferred, fullPath, env]() + { + try { + SyncRoot::HydrateFile(fullPath.c_str()); + Logger::getInstance().log("finish... " + Logger::fromWStringToString(fullPath.c_str()), LogLevel::INFO); + + napi_value result; + napi_get_undefined(env, &result); + napi_resolve_deferred(env, deferred, result); + } catch (const std::exception& e) { + napi_value error; + napi_create_string_utf8(env, e.what(), NAPI_AUTO_LENGTH, &error); + napi_reject_deferred(env, deferred, error); + } catch (...) { + napi_value error; + napi_create_string_utf8(env, "Unknown error", NAPI_AUTO_LENGTH, &error); + napi_reject_deferred(env, deferred, error); + } }) + .detach(); + + wprintf(L"FINISHHHHHn"); + + return promise; +}