diff --git a/binding.gyp b/binding.gyp index ca45c750..c929117f 100644 --- a/binding.gyp +++ b/binding.gyp @@ -28,8 +28,6 @@ "native-src/sync_root_interface/callbacks/FetchData/TransferContext.cpp", "native-src/sync_root_interface/callbacks/FetchPlaceholder/FetchPlaceholder.cpp", "native-src/sync_root_interface/callbacks/NotifyDelete/NotifyDeleteCallback.cpp", - "native-src/sync_root_interface/callbacks/NotifyRename/NotifyRenameCallback.cpp", - "native-src/sync_root_interface/callbacks/NotifyRename/RenameTransferContext.cpp", "native-src/virtual_drive/Wrappers.cpp" ], "include_dirs": [ diff --git a/dist/addon.node b/dist/addon.node index 2ebbacd3..60df547f 100644 Binary files a/dist/addon.node and b/dist/addon.node differ diff --git a/include/sync_root_interface/RenameTransferContext.h b/include/sync_root_interface/RenameTransferContext.h deleted file mode 100644 index 0929e0ca..00000000 --- a/include/sync_root_interface/RenameTransferContext.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include -#include "stdafx.h" - -struct RenameContext { - CF_CONNECTION_KEY connectionKey; - CF_TRANSFER_KEY transferKey; - std::wstring targetPath; - std::wstring fileIdentity; - - std::mutex mtx; - std::condition_variable cv; - bool ready = false; - bool callbackResult = false; -}; - -std::shared_ptr GetOrCreateRenameContext( - CF_CONNECTION_KEY connKey, - CF_TRANSFER_KEY transferKey); - -void RemoveRenameContext(CF_TRANSFER_KEY transferKey); diff --git a/include/sync_root_interface/callbacks/Callbacks.h b/include/sync_root_interface/callbacks/Callbacks.h index c52e89a5..293bb7aa 100644 --- a/include/sync_root_interface/callbacks/Callbacks.h +++ b/include/sync_root_interface/callbacks/Callbacks.h @@ -8,10 +8,6 @@ void register_threadsafe_callbacks(napi_env env, InputSyncCallbacks input); void register_threadsafe_notify_delete_callback(const std::string &resource_name, napi_env env, InputSyncCallbacks input); void CALLBACK notify_delete_callback_wrapper(_In_ CONST CF_CALLBACK_INFO *callbackInfo, _In_ CONST CF_CALLBACK_PARAMETERS *callbackParameters); -// Rename Callback -void register_threadsafe_notify_rename_callback(const std::string &resource_name, napi_env env, InputSyncCallbacks input); -void CALLBACK notify_rename_callback_wrapper(_In_ CONST CF_CALLBACK_INFO *callbackInfo, _In_ CONST CF_CALLBACK_PARAMETERS *callbackParameters); - // Fetch Placeholders Callback void register_threadsafe_fetch_placeholders_callback(const std::string &resource_name, napi_env env, InputSyncCallbacks input); void CALLBACK fetch_placeholders_callback_wrapper(_In_ CONST CF_CALLBACK_INFO *callbackInfo, _In_ CONST CF_CALLBACK_PARAMETERS *callbackParameters); diff --git a/include/sync_root_interface/callbacks/CallbacksContext.h b/include/sync_root_interface/callbacks/CallbacksContext.h index f0080182..ef40bdd2 100644 --- a/include/sync_root_interface/callbacks/CallbacksContext.h +++ b/include/sync_root_interface/callbacks/CallbacksContext.h @@ -21,7 +21,5 @@ struct InputSyncCallbacks { napi_ref notify_dehydrate_completion_callback_ref; napi_ref notify_delete_callback_ref; napi_ref notify_delete_completion_callback_ref; - napi_ref notify_rename_callback_ref; - napi_ref notify_rename_completion_callback_ref; napi_ref none_callback_ref; }; \ No newline at end of file diff --git a/include/types/ProcessTypes.h b/include/types/ProcessTypes.h index 3ab8229b..5a6dba3e 100644 --- a/include/types/ProcessTypes.h +++ b/include/types/ProcessTypes.h @@ -17,7 +17,6 @@ enum class FileOperationError { UPLOAD_ERROR, DOWNLOAD_ERROR, - RENAME_ERROR, DELETE_ERROR, METADATA_READ_ERROR }; \ No newline at end of file diff --git a/native-src/sync_root_interface/SyncRoot.cpp b/native-src/sync_root_interface/SyncRoot.cpp index 6049075b..f0ef8ec3 100644 --- a/native-src/sync_root_interface/SyncRoot.cpp +++ b/native-src/sync_root_interface/SyncRoot.cpp @@ -258,7 +258,6 @@ HRESULT SyncRoot::ConnectSyncRoot(const wchar_t *syncRootPath, InputSyncCallback CF_CALLBACK_REGISTRATION callbackTable[] = { {CF_CALLBACK_TYPE_NOTIFY_DELETE, notify_delete_callback_wrapper}, - {CF_CALLBACK_TYPE_NOTIFY_RENAME, notify_rename_callback_wrapper}, {CF_CALLBACK_TYPE_FETCH_PLACEHOLDERS, fetch_placeholders_callback_wrapper}, {CF_CALLBACK_TYPE_FETCH_DATA, fetch_data_callback_wrapper}, {CF_CALLBACK_TYPE_CANCEL_FETCH_DATA, cancel_fetch_data_callback_wrapper}, diff --git a/native-src/sync_root_interface/Utilities.cpp b/native-src/sync_root_interface/Utilities.cpp index 35b824bd..fc38fdab 100644 --- a/native-src/sync_root_interface/Utilities.cpp +++ b/native-src/sync_root_interface/Utilities.cpp @@ -278,8 +278,6 @@ std::wstring Utilities::FileOperationErrorToWString(FileOperationError error) return L"UPLOAD_ERROR"; case FileOperationError::DOWNLOAD_ERROR: return L"DOWNLOAD_ERROR"; - case FileOperationError::RENAME_ERROR: - return L"RENAME_ERROR"; case FileOperationError::DELETE_ERROR: return L"DELETE_ERROR"; case FileOperationError::METADATA_READ_ERROR: diff --git a/native-src/sync_root_interface/callbacks/Callbacks.cpp b/native-src/sync_root_interface/callbacks/Callbacks.cpp index 5e04e4ed..6858e04d 100644 --- a/native-src/sync_root_interface/callbacks/Callbacks.cpp +++ b/native-src/sync_root_interface/callbacks/Callbacks.cpp @@ -4,7 +4,6 @@ void register_threadsafe_callbacks(napi_env env, InputSyncCallbacks input) { register_threadsafe_notify_delete_callback("NotifyDeleteThreadSafe", env, input); - register_threadsafe_notify_rename_callback("NotifyRenameThreadSafe", env, input); register_threadsafe_fetch_data_callback("FetchDataThreadSafe", env, input); register_threadsafe_cancel_fetch_data_callback("CancelFetchDataThreadSafe", env, input); } \ No newline at end of file diff --git a/native-src/sync_root_interface/callbacks/NotifyRename/NotifyRenameCallback.cpp b/native-src/sync_root_interface/callbacks/NotifyRename/NotifyRenameCallback.cpp deleted file mode 100644 index fa9691ab..00000000 --- a/native-src/sync_root_interface/callbacks/NotifyRename/NotifyRenameCallback.cpp +++ /dev/null @@ -1,153 +0,0 @@ -#include "stdafx.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include "RenameTransferContext.h" - -napi_threadsafe_function g_notify_rename_tsfn = nullptr; -napi_value response_callback_fn(napi_env env, napi_callback_info info) -{ - size_t argc = 1; - napi_value argv[1]; - napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); - if (argc < 1) - return nullptr; - bool response; - napi_get_value_bool(env, argv[0], &response); - - void* data; - napi_get_cb_info(env, info, nullptr, nullptr, nullptr, &data); - RenameContext* renameCtx = static_cast(data); - { - Logger::getInstance().log("response_callback_fn: Setting callback result.", LogLevel::DEBUG, FOREGROUND_BLUE); - std::lock_guard lock(renameCtx->mtx); - renameCtx->ready = true; - renameCtx->callbackResult = response; - } - renameCtx->cv.notify_one(); - return nullptr; -} - -void notify_rename_call(napi_env env, napi_value js_callback, void* context, void* data) -{ - RenameContext* renameCtx = static_cast(data); - napi_value js_targetPathArg, js_fileIdentityArg, undefined, result; - std::u16string u16_targetPath(renameCtx->targetPath.begin(), renameCtx->targetPath.end()); - std::u16string u16_fileIdentity(renameCtx->fileIdentity.begin(), renameCtx->fileIdentity.end()); - - napi_status status = napi_create_string_utf16(env, u16_targetPath.c_str(), u16_targetPath.size(), &js_targetPathArg); - if (status != napi_ok) - return; - status = napi_create_string_utf16(env, u16_fileIdentity.c_str(), u16_fileIdentity.size(), &js_fileIdentityArg); - if (status != napi_ok) - return; - napi_value js_response_callback_fn; - napi_create_function(env, "responseCallback", NAPI_AUTO_LENGTH, response_callback_fn, renameCtx, &js_response_callback_fn); - - napi_value args_to_js_callback[3] = { js_targetPathArg, js_fileIdentityArg, js_response_callback_fn }; - - status = napi_get_undefined(env, &undefined); - if (status != napi_ok) - return; - status = napi_call_function(env, undefined, js_callback, 3, args_to_js_callback, &result); - if (status != napi_ok) - Logger::getInstance().log("Failed to call JS function in notifyRenameCallback.", LogLevel::ERROR); -} - -void register_threadsafe_notify_rename_callback(const std::string &resource_name, napi_env env, InputSyncCallbacks input) -{ - 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_value notify_rename_value; - napi_status status_ref = napi_get_reference_value(env, input.notify_rename_callback_ref, ¬ify_rename_value); - napi_valuetype valuetype; - napi_status type_status = napi_typeof(env, notify_rename_value, &valuetype); - if (type_status != napi_ok || valuetype != napi_function) - { - fprintf(stderr, "notify_rename_value is not a function.\n"); - abort(); - } - - napi_status status = napi_create_threadsafe_function( - env, - notify_rename_value, - nullptr, - resource_name_value, - 0, - 1, - nullptr, - nullptr, - nullptr, - notify_rename_call, - &g_notify_rename_tsfn); - if (status != napi_ok) - { - const napi_extended_error_info *errorInfo = nullptr; - napi_get_last_error_info(env, &errorInfo); - fprintf(stderr, "Failed to create threadsafe function: %s\n", errorInfo->error_message); - abort(); - } -} - -void CALLBACK notify_rename_callback_wrapper( - _In_ CONST CF_CALLBACK_INFO *callbackInfo, - _In_ CONST CF_CALLBACK_PARAMETERS *callbackParameters) -{ - LPCVOID fileIdentity = callbackInfo->FileIdentity; - DWORD fileIdentityLength = callbackInfo->FileIdentityLength; - const wchar_t *wchar_ptr = static_cast(fileIdentity); - std::wstring fileIdentityStr(wchar_ptr, fileIdentityLength / sizeof(wchar_t)); - PCWSTR targetPathArg = callbackParameters->Rename.TargetPath; - - auto renameCtx = GetOrCreateRenameContext(callbackInfo->ConnectionKey, callbackInfo->TransferKey); - renameCtx->targetPath = std::wstring(targetPathArg); - renameCtx->fileIdentity = fileIdentityStr; - - napi_status status = napi_call_threadsafe_function(g_notify_rename_tsfn, renameCtx.get(), napi_tsfn_blocking); - if (status != napi_ok) - wprintf(L"Callback called unsuccessfully.\n"); - - CF_OPERATION_PARAMETERS opParams = {0}; - { - std::unique_lock lock(renameCtx->mtx); - while (!renameCtx->ready) - renameCtx->cv.wait(lock); - } - opParams.AckRename.CompletionStatus = renameCtx->callbackResult ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; - opParams.ParamSize = sizeof(CF_OPERATION_PARAMETERS); - - CF_OPERATION_INFO opInfo = {0}; - opInfo.StructSize = sizeof(CF_OPERATION_INFO); - opInfo.Type = CF_OPERATION_TYPE_ACK_RENAME; - opInfo.ConnectionKey = callbackInfo->ConnectionKey; - opInfo.TransferKey = callbackInfo->TransferKey; - - HRESULT hr = CfExecute(&opInfo, &opParams); - if (FAILED(hr)) - wprintf(L"Error in CfExecute() rename action, HRESULT: %lx\n", hr); - { - std::lock_guard lock(renameCtx->mtx); - renameCtx->ready = false; - } - printf("Mark item as async: %ls\n", targetPathArg); - WCHAR systemPath[MAX_PATH]; - if (!GetWindowsDirectoryW(systemPath, sizeof(systemPath) / sizeof(WCHAR))) - { - wprintf(L"Error al obtener el directorio de Windows: %d\n", GetLastError()); - return; - } - std::wstring driveLetter(systemPath, 2); - std::wstring absolutePath = targetPathArg; - if (PathFileExistsW(absolutePath.c_str()) == FALSE) - absolutePath = driveLetter + L"\\" + targetPathArg; - bool isDirectory = std::filesystem::is_directory(absolutePath); - - RemoveRenameContext(callbackInfo->TransferKey); -} \ No newline at end of file diff --git a/native-src/sync_root_interface/callbacks/NotifyRename/RenameTransferContext.cpp b/native-src/sync_root_interface/callbacks/NotifyRename/RenameTransferContext.cpp deleted file mode 100644 index 6e764636..00000000 --- a/native-src/sync_root_interface/callbacks/NotifyRename/RenameTransferContext.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "RenameTransferContext.h" - -struct CfRenameKeyLess { - bool operator()(const CF_TRANSFER_KEY &a, const CF_TRANSFER_KEY &b) const { - return a.QuadPart < b.QuadPart; - } -}; - -static std::map, CfRenameKeyLess> g_renameContextMap; -static std::mutex g_renameContextMapMutex; - -std::shared_ptr GetOrCreateRenameContext( - CF_CONNECTION_KEY connKey, - CF_TRANSFER_KEY transferKey) -{ - std::lock_guard lock(g_renameContextMapMutex); - auto it = g_renameContextMap.find(transferKey); - if (it != g_renameContextMap.end()) - return it->second; - auto ctx = std::make_shared(); - ctx->connectionKey = connKey; - ctx->transferKey = transferKey; - g_renameContextMap[transferKey] = ctx; - return ctx; -} - -void RemoveRenameContext(CF_TRANSFER_KEY transferKey) -{ - std::lock_guard lock(g_renameContextMapMutex); - g_renameContextMap.erase(transferKey); -} diff --git a/native-src/virtual_drive/Wrappers.cpp b/native-src/virtual_drive/Wrappers.cpp index ae426a86..2c51689a 100644 --- a/native-src/virtual_drive/Wrappers.cpp +++ b/native-src/virtual_drive/Wrappers.cpp @@ -317,7 +317,6 @@ napi_value ConnectSyncRootWrapper(napi_env env, napi_callback_info args) InputSyncCallbacks callbacks = {}; napi_value notifyDeleteCompletionCallback; - napi_value notifyRenameCallback; napi_value fetchDataCallback; napi_value cancelFetchDataCallback; @@ -334,19 +333,6 @@ napi_value ConnectSyncRootWrapper(napi_env env, napi_callback_info args) return nullptr; } - if (napi_get_named_property(env, argv[1], "notifyRenameCallback", ¬ifyRenameCallback) == napi_ok) - { - napi_create_reference(env, notifyRenameCallback, 1, &callbacks.notify_rename_callback_ref); - } - - napi_valuetype valuetype_rename; - napi_status type_status_rename = napi_typeof(env, notifyRenameCallback, &valuetype_rename); - if (type_status_rename != napi_ok || valuetype_rename != napi_function) - { - napi_throw_error(env, nullptr, "notifyRenameCallback should be a function."); - return nullptr; - } - if (napi_get_named_property(env, argv[1], "fetchDataCallback", &fetchDataCallback) == napi_ok) { napi_create_reference(env, fetchDataCallback, 1, &callbacks.fetch_data_callback_ref); diff --git a/package.json b/package.json index 7858ba40..ec713fb0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@internxt/node-win", - "version": "1.0.18", + "version": "1.0.19", "description": "Drive desktop node addon", "main": "dist/index.js", "types": "dist/index.d.ts",