fix(vfs/cfapi): Preserve FILE_ATTRIBUTE_SYSTEM to prevent custom folder icons from being reset #9235
+23
−4
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
FILE_ATTRIBUTE_SYSTEM) when updating CFAPI placeholdersFixes #9197
Problem
On Windows, custom folder icons are implemented using:
desktop.inifile inside the folderFILE_ATTRIBUTE_SYSTEMattribute set on the folderWhen Nextcloud Desktop syncs folders, the CFAPI wrapper was resetting the
FileAttributesfield inCF_FS_METADATAto eitherFILE_ATTRIBUTE_NORMALorFILE_ATTRIBUTE_DIRECTORY, causing theFILE_ATTRIBUTE_SYSTEMflag to be lost. This resulted in custom folder icons being reset to the default folder icon after every sync.Solution
Before setting file attributes during CFAPI placeholder operations, the code now reads the current file attributes using
GetFileAttributesW()and preserves them. This ensures thatFILE_ATTRIBUTE_SYSTEM(and any other user-set attributes) are not lost during sync operations.Changes made to
src/libsync/vfs/cfapi/cfapiwrapper.cpp:updatePlaceholderState(): Added code to read and preserve existing file attributes before callingCfUpdatePlaceholder()createPlaceholderInfo(): Modified to check for existing file attributes before setting defaultscreatePlaceholdersInfo(): Same fix applied to the batch placeholder creation functionTest plan
Signed-off-by: hsachdeva9 hiteshsachdeva343@gmail.com