Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 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
e17ca28
Extract get placeholder state
dajimenezriv-internxt Sep 17, 2025
a5e3dc7
Remove sync state
dajimenezriv-internxt Sep 17, 2025
18b57ba
Extract update sync status
dajimenezriv-internxt Sep 17, 2025
8d97f38
Update publish-npm.yml
dajimenezriv-internxt Sep 18, 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
d65af96
Merge branch 'extract-disconnect-sync-root' into extract-get-placehol…
dajimenezriv-internxt Sep 18, 2025
71f1c31
Merge branch 'extract-get-placeholder-state' into extract-update-sync…
dajimenezriv-internxt Sep 18, 2025
5729e8e
Update addon.node
dajimenezriv-internxt Sep 18, 2025
394f12d
Merge branch 'master' into extract-get-placeholder-state
dajimenezriv-internxt Sep 19, 2025
470f12e
Merge branch 'extract-get-placeholder-state' into extract-update-sync…
dajimenezriv-internxt Sep 19, 2025
5bd5c36
Clean
dajimenezriv-internxt Sep 19, 2025
9e35bf5
Refactor cancel fetch data
dajimenezriv-internxt Sep 19, 2025
fa70622
Update CancelFetchDataCallback.cpp
dajimenezriv-internxt Sep 19, 2025
0c2fd4d
Update addon.node
dajimenezriv-internxt Sep 19, 2025
5d9d904
Merge branch 'master' into refactor-cancel-fetch-data
dajimenezriv-internxt Sep 19, 2025
73ea30d
Simplify fetch data
dajimenezriv-internxt Sep 20, 2025
370eac2
Remove AddFolderToSearchIndexer
dajimenezriv-internxt Sep 24, 2025
aa5b393
Merge branch 'master' into refactor-cancel-fetch-data
dajimenezriv-internxt Sep 24, 2025
5bbd137
Update node
dajimenezriv-internxt Sep 24, 2025
d11ce7e
Merge branch 'refactor-cancel-fetch-data' into simplify-fetch-data
dajimenezriv-internxt Sep 24, 2025
fa6e930
Update FetchData.cpp
dajimenezriv-internxt Sep 24, 2025
558770b
Merge branch 'master' into simplify-fetch-data
dajimenezriv-internxt Sep 26, 2025
279b1ff
Update addon.node
dajimenezriv-internxt Sep 26, 2025
913c88f
Update sonar-analysis.yml
dajimenezriv-internxt Sep 26, 2025
88a497e
Fix pipelines
dajimenezriv-internxt Sep 26, 2025
bd3a6b4
Update package.json
dajimenezriv-internxt Sep 26, 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
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Publish package to npmjs
name: Publish

on:
release:
Expand Down
12 changes: 3 additions & 9 deletions .github/workflows/sonar-analysis.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Pull request checks
name: Sonar analysis

on:
pull_request:
Expand All @@ -9,8 +9,8 @@ on:

jobs:
sonar_analysis:
runs-on: windows-latest
timeout-minutes: 15
runs-on: windows-2022
timeout-minutes: 10

env:
BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory
Expand All @@ -26,12 +26,6 @@ jobs:
with:
node-version: 20

- name: Install Windows SDK 10.0.22621.0
uses: ChristopheLav/windows-sdk-install@88d72875fb873886ea398ed04041446da6f26f86 # v1.0.3
with:
version-sdk: 22621
features: "OptionId.DesktopCPPx86,OptionId.DesktopCPPx64"

- name: Install node-gyp
run: npm install -g node-gyp

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/stale-prs.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Mark stale PRs
name: Stale PRs

on:
schedule:
Expand Down
Binary file modified dist/addon.node
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,6 @@ struct CancelFetchDataArgs {
: fileIdentityArg(fileId), context(ctx) {}
};

void setup_global_tsfn_cancel_fetch_data(napi_threadsafe_function tsfn)
{
g_cancel_fetch_data_threadsafe_callback = tsfn;
}

void notify_cancel_fetch_data_call(napi_env env, napi_value js_callback, void *context, void *data)
{
CancelFetchDataArgs *args = static_cast<CancelFetchDataArgs *>(data);
Expand Down Expand Up @@ -89,7 +84,7 @@ void register_threadsafe_cancel_fetch_data_callback(const std::string &resource_
return;
}

setup_global_tsfn_cancel_fetch_data(tsfn_cancel_fetch_data);
g_cancel_fetch_data_threadsafe_callback = tsfn_cancel_fetch_data;
}

void CALLBACK cancel_fetch_data_callback_wrapper(
Expand Down
70 changes: 11 additions & 59 deletions native-src/sync_root_interface/callbacks/FetchData/FetchData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,6 @@

napi_threadsafe_function g_fetch_data_threadsafe_callback = nullptr;

inline std::mutex mtx;
inline std::mutex mtx_download;
inline std::condition_variable cv;
inline std::condition_variable cv_download;
inline bool ready_download = false;
inline bool callbackResult = false;

#define FIELD_SIZE(type, field) (sizeof(((type *)0)->field))

#define CF_SIZE_OF_OP_PARAM(field) \
Expand All @@ -38,18 +31,6 @@ inline bool callbackResult = false;

#define CHUNKDELAYMS 250

std::wstring g_full_client_path;

struct FetchDataArgs
{
std::wstring fileIdentityArg;
};

void load_data()
{
printf("load_data called");
}

napi_value create_response(napi_env env, bool finished, float progress)
{
napi_value result_object;
Expand All @@ -72,25 +53,6 @@ napi_value create_response(napi_env env, bool finished, float progress)
return promise;
}

std::string WStringToString(const std::wstring &wstr)
{
try
{
if (wstr.empty())
return std::string();

std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::string utf8_str = converter.to_bytes(wstr);

return utf8_str;
}
catch (const std::exception &e)
{
Logger::getInstance().log("Error converting wstring to string: " + std::string(e.what()), LogLevel::ERROR);
return "";
}
}

static size_t file_incremental_reading(napi_env env,
TransferContext &ctx,
bool final_step,
Expand Down Expand Up @@ -342,20 +304,14 @@ static void notify_fetch_data_call(napi_env env, napi_value js_callback, void *c

void register_threadsafe_fetch_data_callback(const std::string &resource_name, napi_env env, InputSyncCallbacks input)
{
Logger::getInstance().log("register_threadsafe_fetch_data_callback called", LogLevel::DEBUG);
std::u16string converted_resource_name = std::u16string(resource_name.begin(), resource_name.end());
std::u16string converted_resource_name(resource_name.begin(), resource_name.end());

napi_value resource_name_value;
napi_create_string_utf16(env,
converted_resource_name.c_str(),
NAPI_AUTO_LENGTH,
&resource_name_value);
napi_create_string_utf16(env, converted_resource_name.c_str(), NAPI_AUTO_LENGTH, &resource_name_value);

napi_threadsafe_function tsfn_fetch_data;
napi_value fetch_data_value;
napi_status status_ref = napi_get_reference_value(env, input.fetch_data_callback_ref, &fetch_data_value);

Logger::getInstance().log("status_ref: " + std::to_string(status_ref), LogLevel::DEBUG);
napi_get_reference_value(env, input.fetch_data_callback_ref, &fetch_data_value);

napi_status status = napi_create_threadsafe_function(
env,
Expand All @@ -370,8 +326,9 @@ void register_threadsafe_fetch_data_callback(const std::string &resource_name, n
notify_fetch_data_call,
&tsfn_fetch_data);

if (status != napi_ok) {
Logger::getInstance().log("Failed to create threadsafe function (fetch_data).", LogLevel::ERROR);
if (status != napi_ok)
{
napi_throw_error(env, nullptr, "Failed to create fetch data threadsafe function");
return;
}

Expand All @@ -392,9 +349,10 @@ void CALLBACK fetch_data_callback_wrapper(
ctx->requiredLength = callbackParameters->FetchData.RequiredLength;
ctx->requiredOffset = callbackParameters->FetchData.RequiredFileOffset;
ctx->callbackInfo = *callbackInfo;
std::wstring fullClientPath(callbackInfo->VolumeDosName);
fullClientPath.append(callbackInfo->NormalizedPath);
ctx->fullClientPath = fullClientPath;

std::wstring fullClientPath(callbackInfo->VolumeDosName); // e.g., "C:"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these comments really necessary?

fullClientPath.append(callbackInfo->NormalizedPath); // e.g., "\Users\file.txt"
ctx->fullClientPath = fullClientPath; // Result: "C:\Users\file.txt"

Logger::getInstance().log("Full download path: "
+ Logger::fromWStringToString(fullClientPath),
Expand All @@ -406,13 +364,7 @@ void CALLBACK fetch_data_callback_wrapper(
return;
}

napi_status status = napi_call_threadsafe_function(
g_fetch_data_threadsafe_callback,
ctx.get(),
napi_tsfn_blocking);
if (status != napi_ok) {
Logger::getInstance().log("Callback called unsuccessfully in fetch_data_callback_wrapper.", LogLevel::ERROR);
}
napi_call_threadsafe_function(g_fetch_data_threadsafe_callback, ctx.get(), napi_tsfn_blocking);

Logger::getInstance().log("fetch_data_callback_wrapper after napi_call_threadsafe_function", LogLevel::DEBUG);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,16 @@
#include "TransferContext.h"

struct CfTransferKeyLess {
bool operator()(const CF_TRANSFER_KEY &a, const CF_TRANSFER_KEY &b) const
{
bool operator()(const CF_TRANSFER_KEY &a, const CF_TRANSFER_KEY &b) const {
return a.QuadPart < b.QuadPart;
}
};

static std::map<CF_TRANSFER_KEY, std::shared_ptr<TransferContext>, CfTransferKeyLess> g_transferContextMap;


static std::mutex g_contextMapMutex;

std::shared_ptr<TransferContext> GetOrCreateTransferContext(
CF_CONNECTION_KEY connKey,
CF_TRANSFER_KEY transferKey)
{
std::shared_ptr<TransferContext> GetOrCreateTransferContext(CF_CONNECTION_KEY connKey, CF_TRANSFER_KEY transferKey) {
std::lock_guard<std::mutex> lock(g_contextMapMutex);

auto it = g_transferContextMap.find(transferKey);
Expand All @@ -30,8 +25,7 @@ std::shared_ptr<TransferContext> GetOrCreateTransferContext(
return ctx;
}

void RemoveTransferContext(CF_TRANSFER_KEY transferKey)
{
void RemoveTransferContext(CF_TRANSFER_KEY transferKey) {
std::lock_guard<std::mutex> lock(g_contextMapMutex);
g_transferContextMap.erase(transferKey);
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@internxt/node-win",
"version": "1.0.24",
"version": "1.0.25",
"author": "Internxt <hello@internxt.com>",
"description": "Drive desktop node addon",
"main": "dist/index.js",
Expand Down