Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 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
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
394f12d
Merge branch 'master' into extract-get-placeholder-state
dajimenezriv-internxt Sep 19, 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
2 changes: 2 additions & 0 deletions binding.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
"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_placeholder_state/get_placeholder_state_wrapper.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",
"native-src/virtual_drive/hydrate_file.cpp",
Expand All @@ -49,6 +50,7 @@
"include/sync_root_interface",
"include/sync_root_interface/callbacks",
"include/virtual_drive",
"include/virtual_drive/get_placeholder_state",
"include/virtual_drive/get_registered_sync_roots",
"include/virtual_drive/register_sync_root"
],
Expand Down
Binary file modified dist/addon.node
Binary file not shown.
11 changes: 0 additions & 11 deletions include/placeholders_interface/PlaceHolderInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,6 @@
#include "stdafx.h"
#include <optional>

enum class SyncState
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Remove all usage of SyncState. Previously we were using the SyncState to know if an item was in cloud and the PinState to know if it was hydrated or not, however, we migrated to use the placeholderId to know if an item was in cloud, so we can remove all SyncState usage.

{
/* status that occurs when an error occurs while reading the status*/
Undefined = -1,
NotInSync = 0,
InSync = 1,
};

enum class PinState
{
/* The pin state is derived from the state of the parent folder. For example new remote files start out in this state, following the state of their parent folder. This state is used purely for resetting pin states to their derived value. The effective state for an item will never be "Inherited". */
Expand All @@ -27,7 +19,6 @@ enum class PinState

struct FileState {
PinState pinstate;
SyncState syncstate;
};

class PlaceHolderInfo
Expand All @@ -43,7 +34,6 @@ class PlaceHolderInfo
inline explicit operator bool() const noexcept { return static_cast<bool>(_data); }

std::optional<PinState> pinState() const;
std::optional<SyncState> syncState() const;
std::optional<LARGE_INTEGER> FileId() const;
std::optional<BYTE> FileIdentity() const;

Expand All @@ -70,5 +60,4 @@ class FileHandle
FileHandle handleForPath(const std::wstring &path);

std::string pinStateToString(PinState state);
std::string syncStateToString(SyncState state);
CF_PIN_STATE pinStateToCfPinState(PinState state);
8 changes: 0 additions & 8 deletions include/placeholders_interface/Placeholders.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,6 @@
#include <string>
#include <PlaceholderInfo.h>

enum class PlaceholderAttribute
{
OTHER = 0,
NOT_PINNED = 1,
PINNED = 2,
};

struct PlaceholderResult {
bool success;
std::wstring errorMessage;
Expand Down Expand Up @@ -46,7 +39,6 @@ class Placeholders
static void ForceShellRefresh(const std::wstring &path);
static void UpdateSyncStatus(const std::wstring &filePath, bool syncState, bool isDirectory);
static HRESULT UpdatePinState(const std::wstring &path, const PinState state);
static CF_PLACEHOLDER_STATE GetPlaceholderState(const std::wstring &filePath);
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);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#pragma once

#include <node_api.h>

napi_value get_placeholder_state_wrapper(napi_env env, napi_callback_info info);
36 changes: 0 additions & 36 deletions native-src/placeholders_interface/PlaceHolderInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,32 +6,6 @@
#include <locale>
#include "Logger.h"

SyncState cfSyncStateToSyncState(CF_IN_SYNC_STATE state)
{
switch (state)
{
case CF_IN_SYNC_STATE_NOT_IN_SYNC:
return SyncState::NotInSync;
case CF_IN_SYNC_STATE_IN_SYNC:
return SyncState::InSync;
default:
return SyncState::NotInSync;
}
}

std::string syncStateToString(SyncState state)
{
switch (state)
{
case SyncState::NotInSync:
return "NotInSync";
case SyncState::InSync:
return "InSync";
default:
return "Unknown";
}
}

PinState cfPinStateToPinState(CF_PIN_STATE state)
{
switch (state)
Expand Down Expand Up @@ -109,16 +83,6 @@ std::optional<PinState> PlaceHolderInfo::pinState() const
return cfPinStateToPinState(_data->PinState);
}

std::optional<SyncState> PlaceHolderInfo::syncState() const
{
if (!_data)
{
return {};
}

return cfSyncStateToSyncState(_data->InSyncState);
}

std::optional<LARGE_INTEGER> PlaceHolderInfo::FileId() const
{
if (!_data)
Expand Down
10 changes: 0 additions & 10 deletions native-src/placeholders_interface/Planceholders.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,6 @@ FileState Placeholders::GetPlaceholderInfo(const std::wstring &directoryPath)
{
printf("Error: Invalid file handle.\n");
fileState.pinstate = PinState::Unspecified;
fileState.syncstate = SyncState::Undefined;
return fileState;
}

Expand All @@ -468,18 +467,10 @@ FileState Placeholders::GetPlaceholderInfo(const std::wstring &directoryPath)
{
printf("CfGetPlaceholderInfo failed with HRESULT %lx\n", result);
fileState.pinstate = PinState::Unspecified;
fileState.syncstate = SyncState::Undefined;
return fileState;
}

auto pinStateOpt = info.pinState();
auto syncStateOpt = info.syncState();

if (syncStateOpt.has_value())
{

SyncState syncState = syncStateOpt.value();
}

if (pinStateOpt.has_value())
{
Expand All @@ -488,7 +479,6 @@ FileState Placeholders::GetPlaceholderInfo(const std::wstring &directoryPath)
}

fileState.pinstate = pinStateOpt.value_or(PinState::Unspecified);
fileState.syncstate = syncStateOpt.value_or(SyncState::Undefined);

return fileState;
}
Expand Down
37 changes: 3 additions & 34 deletions native-src/virtual_drive/Wrappers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "unregister_sync_root_wrapper.h"
#include "dehydrate_file.h"
#include "disconnect_sync_root.h"
#include "get_placeholder_state_wrapper.h"
#include "NAPI_SAFE_WRAP.h"

napi_value CreatePlaceholderFile(napi_env env, napi_callback_info args) {
Expand Down Expand Up @@ -124,40 +125,8 @@ napi_value UpdateSyncStatusWrapper(napi_env env, napi_callback_info args)
return result;
}

napi_value GetPlaceholderStateWrapper(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 path is required for GetPlaceholderState");
return nullptr;
}

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

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

napi_get_value_string_utf16(env, argv[0], reinterpret_cast<char16_t *>(widePath.get()), pathLength + 1, nullptr);

// DWORD state = Placeholders::GetPlaceholderState(widePath.get());
FileState state = Placeholders::GetPlaceholderInfo(widePath.get());

napi_value result;
napi_create_object(env, &result);

napi_value jsPinState;
napi_create_int32(env, static_cast<int32_t>(state.pinstate), &jsPinState);
napi_set_named_property(env, result, "pinState", jsPinState);

napi_value jsSyncState;
napi_create_int32(env, static_cast<int32_t>(state.syncstate), &jsSyncState);
napi_set_named_property(env, result, "syncState", jsSyncState);

return result;
napi_value GetPlaceholderStateWrapper(napi_env env, napi_callback_info args) {
return NAPI_SAFE_WRAP(env, args, get_placeholder_state_wrapper);
}

napi_value ConvertToPlaceholderWrapper(napi_env env, napi_callback_info args) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#include <windows.h>
#include "napi_extract_args.h"
#include "Placeholders.h"

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

FileState state = Placeholders::GetPlaceholderInfo(path);

napi_value result;
napi_create_object(env, &result);

napi_value jsPinState;
napi_create_int32(env, static_cast<int32_t>(state.pinstate), &jsPinState);
napi_set_named_property(env, result, "pinState", jsPinState);

return result;
}