Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 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
69320d0
Merge branch 'master' into template-args
dajimenezriv-internxt Sep 17, 2025
cf4b77a
Delete napi_safe_wrap.h
dajimenezriv-internxt Sep 18, 2025
3ab291b
Merge branch 'master' into template-args
dajimenezriv-internxt Sep 18, 2025
b160e28
Fix merge
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 @@ -42,6 +42,7 @@
"include_dirs": [
"include",
"include/logger",
"include/napi_helpers",
"include/placeholders_interface",
"include/sync_root_interface",
"include/sync_root_interface/callbacks",
Expand Down
Binary file modified dist/addon.node
Binary file not shown.
20 changes: 20 additions & 0 deletions include/napi_helpers/napi_extract_args.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#include <node_api.h>
#include <string>

template<size_t N>
std::array<std::wstring, N> napi_extract_args(napi_env env, napi_callback_info info) {
size_t argc = N;
napi_value argv[N];
napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);

std::array<std::wstring, N> result;

for (size_t i = 0; i < N; ++i) {
size_t length;
napi_get_value_string_utf16(env, argv[i], nullptr, 0, &length);
result[i].resize(length);
napi_get_value_string_utf16(env, argv[i], reinterpret_cast<char16_t*>(result[i].data()), length + 1, nullptr);
}

return result;
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,7 @@ napi_value napi_safe_wrap(napi_env env, napi_callback_info info, Fn&& fn, const
try {
return fn(env, info);
} catch (const winrt::hresult_error& e) {
oss << "[" << function_name << "] WinRT error: "
<< winrt::to_string(e.message())
<< " (HRESULT: 0x" << std::hex << e.code() << ")";
oss << "[" << function_name << "] WinRT error: " << winrt::to_string(e.message()) << " (HRESULT: 0x" << std::hex << e.code() << ")";
} catch (const std::exception& e) {
oss << "[" << function_name << "] " << e.what();
} catch (...) {
Expand Down
5 changes: 0 additions & 5 deletions include/virtual_drive/register_sync_root.h

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
#include <iostream>
#include <vector>

void register_sync_root(const wchar_t *syncRootPath, const wchar_t *providerName, const wchar_t *providerVersion, const wchar_t *providerId, const wchar_t *logoPath);
void register_sync_root(const wchar_t *syncRootPath, const wchar_t *providerName, const wchar_t *providerVersion, const wchar_t *providerId, const wchar_t *logoPath);
18 changes: 3 additions & 15 deletions native-src/virtual_drive/convert_to_placeholder.cpp
Original file line number Diff line number Diff line change
@@ -1,21 +1,9 @@
#include <Windows.h>
#include "napi_extract_args.h"
#include "Placeholders.h"

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

size_t pathLen, serverIdentityLen;
napi_get_value_string_utf8(env, argv[0], nullptr, 0, &pathLen);
napi_get_value_string_utf8(env, argv[1], nullptr, 0, &serverIdentityLen);

std::string path(pathLen, '\0');
std::string serverIdentity(serverIdentityLen, '\0');

napi_get_value_string_utf8(env, argv[0], &path[0], pathLen + 1, nullptr);
napi_get_value_string_utf8(env, argv[1], &serverIdentity[0], serverIdentityLen + 1, nullptr);
napi_value convert_to_placeholder_impl(napi_env env, napi_callback_info info) {
auto [path, serverIdentity] = napi_extract_args<2>(env, info);

std::wstring wPath(path.begin(), path.end());
std::wstring wServerIdentity(serverIdentity.begin(), serverIdentity.end());
Expand Down
23 changes: 4 additions & 19 deletions native-src/virtual_drive/get_file_identity.cpp
Original file line number Diff line number Diff line change
@@ -1,31 +1,16 @@
#include <Windows.h>
#include "napi_extract_args.h"
#include "Placeholders.h"

napi_value get_file_identity_impl(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);
napi_value get_file_identity_impl(napi_env env, napi_callback_info info) {
auto [path] = napi_extract_args<1>(env, info);

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

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

std::string fileIdentity = Placeholders::GetFileIdentity(fullPath);
std::string fileIdentity = Placeholders::GetFileIdentity(path);
fileIdentity.erase(std::remove(fileIdentity.begin(), fileIdentity.end(), '\0'), fileIdentity.end());
fileIdentity.erase(std::remove(fileIdentity.begin(), fileIdentity.end(), ' '), fileIdentity.end());

napi_value jsFileIdentity;
napi_create_string_utf8(env, fileIdentity.c_str(), fileIdentity.length(), &jsFileIdentity);

delete[] fullPath;
return jsFileIdentity;
}
23 changes: 6 additions & 17 deletions native-src/virtual_drive/hydrate_file.cpp
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#include <thread>
#include <string>
#include <Windows.h>
#include "Logger.h"
#include "napi_extract_args.h"
#include "SyncRoot.h"

struct AsyncWork {
napi_async_work work;
napi_deferred deferred;
std::wstring fullPath;
std::wstring path;
std::string error;
bool success;
};
Expand All @@ -16,8 +16,7 @@ void execute_work(napi_env env, void* data) {
AsyncWork* asyncWork = static_cast<AsyncWork*>(data);

try {
SyncRoot::HydrateFile(asyncWork->fullPath.c_str());
Logger::getInstance().log("finish... " + Logger::fromWStringToString(asyncWork->fullPath.c_str()), LogLevel::INFO);
SyncRoot::HydrateFile(asyncWork->path.c_str());
asyncWork->success = true;
} catch (const std::exception& e) {
asyncWork->error = e.what();
Expand Down Expand Up @@ -45,18 +44,8 @@ void complete_work(napi_env env, napi_status status, void* data) {
delete asyncWork;
}

napi_value hydrate_file_impl(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);

// Get string length and content
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<char16_t*>(&fullPath[0]), pathLength + 1, nullptr);
napi_value hydrate_file_impl(napi_env env, napi_callback_info info) {
auto [path] = napi_extract_args<1>(env, info);

// Create promise
napi_deferred deferred;
Expand All @@ -66,7 +55,7 @@ napi_value hydrate_file_impl(napi_env env, napi_callback_info args)
// Create and queue async work
AsyncWork* asyncWork = new AsyncWork{};
asyncWork->deferred = deferred;
asyncWork->fullPath = std::move(fullPath);
asyncWork->path = std::move(path);

napi_value resourceName;
napi_create_string_utf8(env, "HydrateFileAsync", NAPI_AUTO_LENGTH, &resourceName);
Expand Down
65 changes: 0 additions & 65 deletions native-src/virtual_drive/register_sync_root.cpp

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,35 +1,9 @@
#include <Windows.h>
#include "napi_extract_args.h"
#include "register_sync_root.h"

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

size_t syncRootPathLength;
napi_get_value_string_utf16(env, argv[0], nullptr, 0, &syncRootPathLength);
std::wstring syncRootPath(syncRootPathLength, L'\0');
napi_get_value_string_utf16(env, argv[0], reinterpret_cast<char16_t*>(&syncRootPath[0]), syncRootPathLength + 1, nullptr);

size_t providerNameLength;
napi_get_value_string_utf16(env, argv[1], nullptr, 0, &providerNameLength);
std::wstring providerName(providerNameLength, L'\0');
napi_get_value_string_utf16(env, argv[1], reinterpret_cast<char16_t*>(&providerName[0]), providerNameLength + 1, nullptr);

size_t providerVersionLength;
napi_get_value_string_utf16(env, argv[2], nullptr, 0, &providerVersionLength);
std::wstring providerVersion(providerVersionLength, L'\0');
napi_get_value_string_utf16(env, argv[2], reinterpret_cast<char16_t*>(&providerVersion[0]), providerVersionLength + 1, nullptr);

size_t providerIdLength;
napi_get_value_string_utf16(env, argv[3], nullptr, 0, &providerIdLength);
std::wstring providerId(providerIdLength, L'\0');
napi_get_value_string_utf16(env, argv[3], reinterpret_cast<char16_t*>(&providerId[0]), providerIdLength + 1, nullptr);

size_t logoPathLength;
napi_get_value_string_utf16(env, argv[4], nullptr, 0, &logoPathLength);
std::wstring logoPath(logoPathLength, L'\0');
napi_get_value_string_utf16(env, argv[4], reinterpret_cast<char16_t*>(&logoPath[0]), logoPathLength + 1, nullptr);
napi_value register_sync_root_wrapper(napi_env env, napi_callback_info info) {
auto [syncRootPath, providerName, providerVersion, providerId, logoPath] = napi_extract_args<5>(env, info);

register_sync_root(syncRootPath.c_str(), providerName.c_str(), providerVersion.c_str(), providerId.c_str(), logoPath.c_str());

Expand Down
12 changes: 3 additions & 9 deletions native-src/virtual_drive/unregister_sync_root_wrapper.cpp
Original file line number Diff line number Diff line change
@@ -1,17 +1,11 @@
#include <windows.h>
#include <node_api.h>
#include <string>
#include "napi_extract_args.h"
#include "stdafx.h"

napi_value unregister_sync_root_wrapper(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);

size_t providerIdLength;
napi_get_value_string_utf16(env, argv[0], nullptr, 0, &providerIdLength);
std::wstring providerId(providerIdLength, L'\0');
napi_get_value_string_utf16(env, argv[0], reinterpret_cast<char16_t*>(&providerId[0]), providerIdLength + 1, nullptr);
napi_value unregister_sync_root_wrapper(napi_env env, napi_callback_info info) {
auto [providerId] = napi_extract_args<1>(env, info);

winrt::StorageProviderSyncRootManager::Unregister(providerId);

Expand Down