Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
21bd1ad
Create napi safe wrap
dajimenezriv-internxt Aug 15, 2025
819a1f1
Extract create folder placeholder
dajimenezriv-internxt Aug 16, 2025
cc1b678
Extract create file placeholder
dajimenezriv-internxt Aug 16, 2025
444a2d5
Extract get file identity
dajimenezriv-internxt Aug 19, 2025
b5eff5e
Update package.json
dajimenezriv-internxt Aug 19, 2025
fe31746
Extract connect sync root
dajimenezriv-internxt Aug 27, 2025
32c5ea9
Extract hydrate file
dajimenezriv-internxt Sep 8, 2025
75681d6
Hydrate file thread safe
dajimenezriv-internxt Sep 8, 2025
205f2be
Improve safe wrap
dajimenezriv-internxt Sep 8, 2025
9648c94
Remove delete file from c++
dajimenezriv-internxt Sep 8, 2025
46ee84c
Extract convert to placeholder
dajimenezriv-internxt Sep 10, 2025
313dfbf
Refactor register sync root
dajimenezriv-internxt Sep 15, 2025
ff28084
Extract code
dajimenezriv-internxt Sep 15, 2025
d1a7164
Improve
dajimenezriv-internxt Sep 15, 2025
70d004e
Simplify providerId
dajimenezriv-internxt Sep 15, 2025
69ce991
Commit
dajimenezriv-internxt Sep 15, 2025
1020526
Commit
dajimenezriv-internxt Sep 15, 2025
e94646e
Commit
dajimenezriv-internxt Sep 15, 2025
0601df9
Update get_registered_sync_roots.cpp
dajimenezriv-internxt Sep 15, 2025
73a1c9e
Update addon.node
dajimenezriv-internxt Sep 15, 2025
ae38d77
Commt
dajimenezriv-internxt Sep 15, 2025
f7b6a44
Commit
dajimenezriv-internxt Sep 16, 2025
41028a0
Simplify unregister
dajimenezriv-internxt Sep 16, 2025
38a0e29
Fix wrapper
dajimenezriv-internxt Sep 16, 2025
4832626
Remove context
dajimenezriv-internxt Sep 16, 2025
d947054
Improve napi
dajimenezriv-internxt Sep 16, 2025
9d096c0
Template napi_extract_args
dajimenezriv-internxt Sep 16, 2025
249d71c
Extract dehydrate file wrapper
dajimenezriv-internxt Sep 17, 2025
2d39fb1
Refactor dehydrate file
dajimenezriv-internxt Sep 17, 2025
0a6216f
Throw exceptions
dajimenezriv-internxt Sep 17, 2025
4577789
Commit
dajimenezriv-internxt Sep 17, 2025
bc748b0
Extract disconnect sync root
dajimenezriv-internxt Sep 17, 2025
0fe50fb
Merge branch 'master' into extract-disconnect-sync-root
dajimenezriv-internxt Sep 18, 2025
20b0533
Merge branch 'master' into extract-disconnect-sync-root
dajimenezriv-internxt Sep 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions binding.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
"native-src/virtual_drive/create_file_placeholder.cpp",
"native-src/virtual_drive/create_folder_placeholder.cpp",
"native-src/virtual_drive/dehydrate_file.cpp",
"native-src/virtual_drive/disconnect_sync_root.cpp",
"native-src/virtual_drive/get_file_identity.cpp",
"native-src/virtual_drive/get_registered_sync_roots/get_registered_sync_roots.cpp",
"native-src/virtual_drive/get_registered_sync_roots/get_registered_sync_roots_wrapper.cpp",
Expand Down
Binary file modified dist/addon.node
Binary file not shown.
1 change: 0 additions & 1 deletion include/placeholders_interface/Placeholders.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,5 @@ class Placeholders
static PlaceholderResult ConvertToPlaceholder(const std::wstring &fullPath, const std::wstring &serverIdentity);
static std::string GetFileIdentity(const std::wstring &filePath);
static void UpdateFileIdentity(const std::wstring &filePath, const std::wstring &fileIdentity, bool isDirectory);
static PlaceholderAttribute GetAttribute(const std::wstring &filePath);
static FileState GetPlaceholderInfo(const std::wstring &directoryPath);
};
2 changes: 0 additions & 2 deletions include/virtual_drive/Wrappers.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,5 @@ napi_value addLoggerPathWrapper(napi_env env, napi_callback_info args);
napi_value UpdateSyncStatusWrapper(napi_env env, napi_callback_info args);
napi_value GetPlaceholderStateWrapper(napi_env env, napi_callback_info args);
napi_value ConvertToPlaceholderWrapper(napi_env env, napi_callback_info args);
napi_value UpdateFileIdentityWrapper(napi_env env, napi_callback_info args);
napi_value DehydrateFileWrapper(napi_env env, napi_callback_info args);
napi_value HydrateFileWrapper(napi_env env, napi_callback_info args);
napi_value GetPlaceholderAttributeWrapper(napi_env env, napi_callback_info args);
5 changes: 5 additions & 0 deletions include/virtual_drive/disconnect_sync_root.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#pragma once

#include <node_api.h>

napi_value disconnect_sync_root(napi_env env, napi_callback_info args);
34 changes: 0 additions & 34 deletions native-src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -207,23 +207,6 @@ napi_value init(napi_env env, napi_value exports)
return nullptr;
}

napi_property_descriptor updateFileIdentityDesc = {
"updateFileIdentity",
nullptr,
UpdateFileIdentityWrapper,
nullptr,
nullptr,
nullptr,
napi_default,
nullptr};

napi_status updateFileIdentityStatus = napi_define_properties(env, exports, 1, &updateFileIdentityDesc);
if (updateFileIdentityStatus != napi_ok)
{
napi_throw_error(env, nullptr, "Failed to define closeMutex function");
return nullptr;
}

napi_property_descriptor hydrateFileDesc = {
"hydrateFile",
nullptr,
Expand Down Expand Up @@ -258,23 +241,6 @@ napi_value init(napi_env env, napi_value exports)
return nullptr;
}

napi_property_descriptor getPlaceholderAttributeDesc = {
"getPlaceholderAttribute",
nullptr,
GetPlaceholderAttributeWrapper,
nullptr,
nullptr,
nullptr,
napi_default,
nullptr};

napi_status getPlaceholderAttributeStatus = napi_define_properties(env, exports, 1, &getPlaceholderAttributeDesc);
if (getPlaceholderAttributeStatus != napi_ok)
{
napi_throw_error(env, nullptr, "Failed to define getPlaceholderAttribute function");
return nullptr;
}

return exports;
}
NAPI_MODULE(NODE_GYP_MODULE_NAME, init)
35 changes: 0 additions & 35 deletions native-src/placeholders_interface/Planceholders.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -514,38 +514,3 @@ HRESULT Placeholders::UpdatePinState(const std::wstring &path, const PinState st

return result;
}

PlaceholderAttribute Placeholders::GetAttribute(const std::wstring &filePath)
{
DWORD attrib = GetFileAttributesW(filePath.c_str());
if (!(attrib & FILE_ATTRIBUTE_DIRECTORY))
{
winrt::handle placeholder(CreateFileW(filePath.c_str(), 0, FILE_READ_DATA, nullptr, OPEN_EXISTING, 0, nullptr));

LARGE_INTEGER offset;
offset.QuadPart = 0;
LARGE_INTEGER length;
GetFileSizeEx(placeholder.get(), &length);
// length.QuadPart = MAXLONGLONG;
// bool isHydrated = fileState.pinstate == PinState::AlwaysLocal && fileState.syncstate == SyncState::InSync;
if (attrib & FILE_ATTRIBUTE_PINNED) // && !(isHydrated)
{
Logger::getInstance().log("Attribute: PINNED", LogLevel::INFO);

return PlaceholderAttribute::PINNED;
}
else if (attrib & FILE_ATTRIBUTE_UNPINNED)
{
Logger::getInstance().log("Attribute: NO PINNED", LogLevel::INFO);

return PlaceholderAttribute::NOT_PINNED;
}
Logger::getInstance().log("Attribute: Other", LogLevel::INFO);

return PlaceholderAttribute::OTHER;
}

Logger::getInstance().log("Attribute: Other", LogLevel::DEBUG);

return PlaceholderAttribute::OTHER;
}
106 changes: 4 additions & 102 deletions native-src/virtual_drive/Wrappers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "get_registered_sync_roots_wrapper.h"
#include "unregister_sync_root_wrapper.h"
#include "dehydrate_file.h"
#include "disconnect_sync_root.h"
#include "NAPI_SAFE_WRAP.h"

napi_value CreatePlaceholderFile(napi_env env, napi_callback_info args) {
Expand All @@ -44,37 +45,11 @@ napi_value CreateEntryWrapper(napi_env env, napi_callback_info args) {
return NAPI_SAFE_WRAP(env, args, create_folder_placeholder_impl);
}

// disconection wrapper
napi_value DisconnectSyncRootWrapper(napi_env env, napi_callback_info args)
{
size_t argc = 1;
napi_value argv[1];

napi_get_cb_info(env, args, &argc, argv, nullptr, nullptr);

if (argc < 1)
{
napi_throw_error(env, nullptr, "The sync root path is required for DisconnectSyncRoot");
return nullptr;
}

LPCWSTR syncRootPath;
size_t pathLength;
napi_get_value_string_utf16(env, argv[0], nullptr, 0, &pathLength);
syncRootPath = new WCHAR[pathLength + 1];
napi_get_value_string_utf16(env, argv[0], reinterpret_cast<char16_t *>(const_cast<wchar_t *>(syncRootPath)), pathLength + 1, nullptr);

HRESULT result = SyncRoot::DisconnectSyncRoot(syncRootPath);

delete[] syncRootPath;

napi_value napiResult;
napi_create_int32(env, static_cast<int32_t>(result), &napiResult);
return napiResult;
napi_value DisconnectSyncRootWrapper(napi_env env, napi_callback_info args) {
return NAPI_SAFE_WRAP(env, args, disconnect_sync_root);
}

napi_value GetFileIdentityWrapper(napi_env env, napi_callback_info args)
{
napi_value GetFileIdentityWrapper(napi_env env, napi_callback_info args) {
return NAPI_SAFE_WRAP(env, args, get_file_identity_impl);
}

Expand Down Expand Up @@ -189,83 +164,10 @@ napi_value ConvertToPlaceholderWrapper(napi_env env, napi_callback_info args) {
return NAPI_SAFE_WRAP(env, args, convert_to_placeholder_impl);
}

napi_value UpdateFileIdentityWrapper(napi_env env, napi_callback_info args)
{

size_t argc = 3;
napi_value argv[3];

napi_get_cb_info(env, args, &argc, argv, nullptr, nullptr);

if (argc < 3)
{
napi_throw_error(env, nullptr, "Both full path and placeholder ID are required for UpdateFileIdentityWrapper");
return nullptr;
}

size_t pathLength;
napi_get_value_string_utf16(env, argv[0], nullptr, 0, &pathLength);

std::unique_ptr<char16_t[]> widePath(new char16_t[pathLength + 1]);

napi_get_value_string_utf16(env, argv[0], widePath.get(), pathLength + 1, nullptr);

size_t placeholderIdLength;
napi_get_value_string_utf16(env, argv[1], nullptr, 0, &placeholderIdLength);

std::unique_ptr<char16_t[]> widePlaceholderId(new char16_t[placeholderIdLength + 1]);

napi_get_value_string_utf16(env, argv[1], widePlaceholderId.get(), placeholderIdLength + 1, nullptr);

bool isDirectory;
napi_get_value_bool(env, argv[2], &isDirectory);

Placeholders::UpdateFileIdentity(
reinterpret_cast<wchar_t *>(widePath.get()),
reinterpret_cast<wchar_t *>(widePlaceholderId.get()),
isDirectory);

napi_value result;
return result;
}

napi_value HydrateFileWrapper(napi_env env, napi_callback_info args) {
return NAPI_SAFE_WRAP(env, args, hydrate_file_impl);
}

napi_value DehydrateFileWrapper(napi_env env, napi_callback_info args) {
return NAPI_SAFE_WRAP(env, args, dehydrate_file);
}

napi_value GetPlaceholderAttributeWrapper(napi_env env, napi_callback_info args)
{
size_t argc = 1;
napi_value argv[1];
napi_get_cb_info(env, args, &argc, argv, nullptr, nullptr);

if (argc < 1)
{
napi_throw_type_error(env, nullptr, "Both source and destination paths are required");
return nullptr;
}

// Obtener los argumentos de JavaScript y convertirlos a cadenas de C++
std::wstring sourcePath, destinationPath;
size_t sourcePathLength, destinationPathLength;

napi_get_value_string_utf16(env, argv[0], nullptr, 0, &sourcePathLength);
sourcePath.resize(sourcePathLength);
napi_get_value_string_utf16(env, argv[0], reinterpret_cast<char16_t *>(&sourcePath[0]), sourcePathLength + 1, nullptr);

// Llamar a la función TransferData
PlaceholderAttribute attribute = Placeholders::GetAttribute(sourcePath);

napi_value result;
napi_create_object(env, &result);

napi_value jsAtrtibute;
napi_create_int32(env, static_cast<int32_t>(attribute), &jsAtrtibute);
napi_set_named_property(env, result, "attribute", jsAtrtibute);

return result;
}
11 changes: 11 additions & 0 deletions native-src/virtual_drive/disconnect_sync_root.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#include <windows.h>
#include "napi_extract_args.h"
#include "SyncRoot.h"

napi_value disconnect_sync_root(napi_env env, napi_callback_info info) {
auto [syncRootPath] = napi_extract_args<1>(env, info);

HRESULT result = SyncRoot::DisconnectSyncRoot(syncRootPath.c_str());

return nullptr;
}