Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
16 changes: 8 additions & 8 deletions src/Files.App/Data/Models/SelectedItemsPropertiesViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -663,8 +663,8 @@ public ObservableCollection<FileProperty> FileProperties
set => SetProperty(ref fileProperties, value);
}

private bool isReadOnly;
public bool IsReadOnly
private bool? isReadOnly;
public bool? IsReadOnly
{
get => isReadOnly;
set
Expand All @@ -675,8 +675,8 @@ public bool IsReadOnly
}
}

private bool isReadOnlyEditedValue;
public bool IsReadOnlyEditedValue
private bool? isReadOnlyEditedValue;
public bool? IsReadOnlyEditedValue
{
get => isReadOnlyEditedValue;
set
Expand All @@ -693,8 +693,8 @@ public bool IsReadOnlyEnabled
set => SetProperty(ref isReadOnlyEnabled, value);
}

private bool isHidden;
public bool IsHidden
private bool? isHidden;
public bool? IsHidden
{
get => isHidden;
set
Expand All @@ -704,8 +704,8 @@ public bool IsHidden
}
}

private bool isHiddenEditedValue;
public bool IsHiddenEditedValue
private bool? isHiddenEditedValue;
public bool? IsHiddenEditedValue
{
get => isHiddenEditedValue;
set => SetProperty(ref isHiddenEditedValue, value);
Expand Down
56 changes: 38 additions & 18 deletions src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,23 @@ public sealed override void GetBaseProperties()
public override async Task GetSpecialPropertiesAsync()
{
if (List.All(x => x.PrimaryItemAttribute == StorageItemTypes.File))
ViewModel.IsReadOnly = List.All(x => NativeFileOperationsHelper.HasFileAttribute(x.ItemPath, System.IO.FileAttributes.ReadOnly));
{
var fileAttributesReadOnly = List.Select(x => NativeFileOperationsHelper.HasFileAttribute(x.ItemPath, System.IO.FileAttributes.ReadOnly));
if (fileAttributesReadOnly.All(x => x))
ViewModel.IsReadOnly = true;
else if (!fileAttributesReadOnly.Any(x => x))
ViewModel.IsReadOnly = false;
else
ViewModel.IsReadOnly = null;
}

ViewModel.IsHidden = List.All(x => NativeFileOperationsHelper.HasFileAttribute(x.ItemPath, System.IO.FileAttributes.Hidden));
var fileAttributesHidden = List.Select(x => NativeFileOperationsHelper.HasFileAttribute(x.ItemPath, System.IO.FileAttributes.Hidden));
if (fileAttributesHidden.All(x => x))
ViewModel.IsHidden = true;
else if (!fileAttributesHidden.Any(x => x))
ViewModel.IsHidden = false;
else
ViewModel.IsHidden = null;

ViewModel.LastSeparatorVisibility = false;
ViewModel.ItemSizeVisibility = true;
Expand Down Expand Up @@ -122,30 +136,36 @@ private void ViewModel_PropertyChanged(object sender, System.ComponentModel.Prop
{
case "IsReadOnly":
{
if (ViewModel.IsReadOnly)
if (ViewModel.IsReadOnly is not null)
{
List.ForEach(x => NativeFileOperationsHelper.SetFileAttribute(
x.ItemPath, System.IO.FileAttributes.ReadOnly));
}
else
{
List.ForEach(x => NativeFileOperationsHelper.UnsetFileAttribute(
x.ItemPath, System.IO.FileAttributes.ReadOnly));
if ((bool)ViewModel.IsReadOnly)
{
List.ForEach(x => NativeFileOperationsHelper.SetFileAttribute(
x.ItemPath, System.IO.FileAttributes.ReadOnly));
}
else
{
List.ForEach(x => NativeFileOperationsHelper.UnsetFileAttribute(
x.ItemPath, System.IO.FileAttributes.ReadOnly));
}
}
}
break;

case "IsHidden":
{
if (ViewModel.IsHidden)
{
List.ForEach(x => NativeFileOperationsHelper.SetFileAttribute(
x.ItemPath, System.IO.FileAttributes.Hidden));
}
else
if (ViewModel.IsHidden is not null)
{
List.ForEach(x => NativeFileOperationsHelper.UnsetFileAttribute(
x.ItemPath, System.IO.FileAttributes.Hidden));
if ((bool)ViewModel.IsHidden)
{
List.ForEach(x => NativeFileOperationsHelper.SetFileAttribute(
x.ItemPath, System.IO.FileAttributes.Hidden));
}
else
{
List.ForEach(x => NativeFileOperationsHelper.UnsetFileAttribute(
x.ItemPath, System.IO.FileAttributes.Hidden));
}
}

}
Expand Down
34 changes: 10 additions & 24 deletions src/Files.App/ViewModels/Properties/Items/FileProperties.cs
Original file line number Diff line number Diff line change
Expand Up @@ -275,37 +275,23 @@ private async void ViewModel_PropertyChanged(object sender, System.ComponentMode
switch (e.PropertyName)
{
case nameof(ViewModel.IsReadOnly):
if (ViewModel.IsReadOnly)
if (ViewModel.IsReadOnly is not null)
{
NativeFileOperationsHelper.SetFileAttribute(
Item.ItemPath,
System.IO.FileAttributes.ReadOnly
);
}
else
{
NativeFileOperationsHelper.UnsetFileAttribute(
Item.ItemPath,
System.IO.FileAttributes.ReadOnly
);
if ((bool)ViewModel.IsReadOnly)
NativeFileOperationsHelper.SetFileAttribute(Item.ItemPath, System.IO.FileAttributes.ReadOnly);
else
NativeFileOperationsHelper.UnsetFileAttribute(Item.ItemPath, System.IO.FileAttributes.ReadOnly);
}

break;

case nameof(ViewModel.IsHidden):
if (ViewModel.IsHidden)
{
NativeFileOperationsHelper.SetFileAttribute(
Item.ItemPath,
System.IO.FileAttributes.Hidden
);
}
else
if (ViewModel.IsHidden is not null)
{
NativeFileOperationsHelper.UnsetFileAttribute(
Item.ItemPath,
System.IO.FileAttributes.Hidden
);
if ((bool)ViewModel.IsHidden)
NativeFileOperationsHelper.SetFileAttribute(Item.ItemPath, System.IO.FileAttributes.Hidden);
else
NativeFileOperationsHelper.UnsetFileAttribute(Item.ItemPath, System.IO.FileAttributes.Hidden);
}

break;
Expand Down
13 changes: 5 additions & 8 deletions src/Files.App/ViewModels/Properties/Items/FolderProperties.cs
Original file line number Diff line number Diff line change
Expand Up @@ -200,15 +200,12 @@ private async void ViewModel_PropertyChanged(object sender, System.ComponentMode
switch (e.PropertyName)
{
case "IsHidden":
if (ViewModel.IsHidden)
if (ViewModel.IsHidden is not null)
{
NativeFileOperationsHelper.SetFileAttribute(
Item.ItemPath, System.IO.FileAttributes.Hidden);
}
else
{
NativeFileOperationsHelper.UnsetFileAttribute(
Item.ItemPath, System.IO.FileAttributes.Hidden);
if ((bool)ViewModel.IsHidden)
NativeFileOperationsHelper.SetFileAttribute(Item.ItemPath, System.IO.FileAttributes.Hidden);
else
NativeFileOperationsHelper.UnsetFileAttribute(Item.ItemPath, System.IO.FileAttributes.Hidden);
}
break;

Expand Down
22 changes: 10 additions & 12 deletions src/Files.App/ViewModels/Properties/Items/LibraryProperties.cs
Original file line number Diff line number Diff line change
Expand Up @@ -141,25 +141,23 @@ private void ViewModel_PropertyChanged(object sender, System.ComponentModel.Prop
switch (e.PropertyName)
{
case "IsReadOnly":
if (ViewModel.IsReadOnly)
if (ViewModel.IsReadOnly is not null)
{
NativeFileOperationsHelper.SetFileAttribute(Library.ItemPath, System.IO.FileAttributes.ReadOnly);
}
else
{
NativeFileOperationsHelper.UnsetFileAttribute(Library.ItemPath, System.IO.FileAttributes.ReadOnly);
if ((bool)ViewModel.IsReadOnly)
NativeFileOperationsHelper.SetFileAttribute(Library.ItemPath, System.IO.FileAttributes.ReadOnly);
else
NativeFileOperationsHelper.UnsetFileAttribute(Library.ItemPath, System.IO.FileAttributes.ReadOnly);
}

break;

case "IsHidden":
if (ViewModel.IsHidden)
{
NativeFileOperationsHelper.SetFileAttribute(Library.ItemPath, System.IO.FileAttributes.Hidden);
}
else
if (ViewModel.IsHidden is not null)
{
NativeFileOperationsHelper.UnsetFileAttribute(Library.ItemPath, System.IO.FileAttributes.Hidden);
if ((bool)ViewModel.IsHidden)
NativeFileOperationsHelper.SetFileAttribute(Library.ItemPath, System.IO.FileAttributes.Hidden);
else
NativeFileOperationsHelper.UnsetFileAttribute(Library.ItemPath, System.IO.FileAttributes.Hidden);
}

break;
Expand Down
17 changes: 12 additions & 5 deletions src/Files.App/Views/Properties/GeneralPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,16 @@ async Task<bool> SaveCombinedAsync(IList<ListedItem> fileOrFolders)
{
foreach (var fileOrFolder in fileOrFolders)
{
await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() =>
UIFilesystemHelpers.SetHiddenAttributeItem(fileOrFolder, ViewModel.IsHidden, itemMM)
);
if (ViewModel.IsHiddenEditedValue is not null)
{
var isHiddenEditedValue = (bool)ViewModel.IsHiddenEditedValue;
await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() =>
UIFilesystemHelpers.SetHiddenAttributeItem(fileOrFolder, isHiddenEditedValue, itemMM)
);
ViewModel.IsHidden = isHiddenEditedValue;
}

ViewModel.IsReadOnly = ViewModel.IsReadOnlyEditedValue;

if (ViewModel.IsAblumCoverModified)
{
Expand All @@ -153,10 +160,10 @@ async Task<bool> SaveBaseAsync(ListedItem item)
{
// Handle the visibility attribute for a single file
var itemMM = AppInstance?.SlimContentPage?.ItemManipulationModel;
if (itemMM is not null) // null on homepage
if (itemMM is not null && ViewModel.IsHiddenEditedValue is not null) // null on homepage
{
await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() =>
UIFilesystemHelpers.SetHiddenAttributeItem(item, ViewModel.IsHidden, itemMM)
UIFilesystemHelpers.SetHiddenAttributeItem(item, (bool)ViewModel.IsHiddenEditedValue, itemMM)
);
}

Expand Down