@@ -62,76 +62,33 @@ void Placeholders::MaintainIdentity(std::wstring &fullPath, PCWSTR itemIdentity,
6262 }
6363}
6464
65- /* *
66- * @brief Mark a file or directory as synchronized
67- * @param filePath path to the file or directory
68- * @param isDirectory true if the path is a directory, false if it is a file
69- * @return void
70- */
71- void Placeholders::UpdateSyncStatus (const std::wstring &filePath,
72- bool inputSyncState,
73- bool isDirectory /* = false */ )
65+ void Placeholders::UpdateSyncStatus (const std::wstring &path, bool isDirectory)
7466{
75- wprintf (L" [UpdateSyncStatus] Path: %ls\n " , filePath.c_str ());
76-
7767 DWORD flags = FILE_FLAG_OPEN_REPARSE_POINT;
7868 if (isDirectory)
7969 flags |= FILE_FLAG_BACKUP_SEMANTICS;
8070
81- HANDLE h = CreateFileW (filePath.c_str (),
82- FILE_WRITE_ATTRIBUTES,
83- FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
84- nullptr ,
85- OPEN_EXISTING,
86- flags,
87- nullptr );
88-
89- if (h == INVALID_HANDLE_VALUE)
90- {
91- wprintf (L" [UpdateSyncStatus] CreateFileW falló: %lu\n " , GetLastError ());
92- CloseHandle (h);
93- return ;
94- }
95-
96- CF_IN_SYNC_STATE sync = inputSyncState ? CF_IN_SYNC_STATE_IN_SYNC
97- : CF_IN_SYNC_STATE_NOT_IN_SYNC;
98-
99- HRESULT hr = CfSetInSyncState (h, sync, CF_SET_IN_SYNC_FLAG_NONE, nullptr );
71+ winrt::file_handle fileHandle{CreateFileW (
72+ path.c_str (),
73+ FILE_WRITE_ATTRIBUTES,
74+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
75+ nullptr ,
76+ OPEN_EXISTING,
77+ flags,
78+ nullptr )};
10079
101- if (FAILED (hr))
102- {
103- switch (HRESULT_CODE (hr))
104- {
105- case ERROR_RETRY:
106- Sleep (50 );
107- hr = CfSetInSyncState (h, sync, CF_SET_IN_SYNC_FLAG_NONE, nullptr );
108- wprintf (L" [UpdateSyncStatus] Retry CfSetInSyncState\n " );
109- break ;
110-
111- case ERROR_CLOUD_FILE_PROVIDER_NOT_RUNNING: // 0x1A94
112- SHChangeNotify (SHCNE_UPDATEITEM, SHCNF_PATH, filePath.c_str (), nullptr );
113- wprintf (L" [UpdateSyncStatus] Retry CfSetInSyncState\n " );
114- break ;
115-
116- case ERROR_CLOUD_FILE_NOT_IN_SYNC:
117- convert_to_placeholder (filePath, L" temp_identity" );
118- hr = CfSetInSyncState (h, sync, CF_SET_IN_SYNC_FLAG_NONE, nullptr );
119- wprintf (L" [UpdateSyncStatus] Retry CfSetInSyncState\n " );
120- break ;
121-
122- default :
123- wprintf (L" [UpdateSyncStatus] CfSetInSyncState 0x%08X\n " , hr);
124- break ;
125- }
126- }
127- else
80+ if (!fileHandle)
12881 {
129- wprintf ( L" [UpdateSyncStatus] Estado actualizado \n " );
82+ throw std::runtime_error ( " Failed to open item: " + std::to_string ( GetLastError ()) );
13083 }
13184
132- CloseHandle (h);
85+ winrt::check_hresult (CfSetInSyncState (
86+ fileHandle.get (),
87+ CF_IN_SYNC_STATE_IN_SYNC,
88+ CF_SET_IN_SYNC_FLAG_NONE,
89+ nullptr ));
13390
134- SHChangeNotify (SHCNE_UPDATEITEM, SHCNF_PATH, filePath .c_str (), nullptr );
91+ SHChangeNotify (SHCNE_UPDATEITEM, SHCNF_PATH, path .c_str (), nullptr );
13592}
13693
13794void Placeholders::UpdateFileIdentity (const std::wstring &filePath, const std::wstring &fileIdentity, bool isDirectory)
0 commit comments