Skip to content

Commit c650e24

Browse files
authored
Fixed a crash when onedrive is not detected
2 parents 562e839 + b15578a commit c650e24

File tree

10 files changed

+32
-32
lines changed

10 files changed

+32
-32
lines changed

Files/Commands/Paste.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ await AppInstance.FilesystemViewModel.GetFolderFromPathAsync(destinationPath)
138138
if (res)
139139
{
140140
StorageFile clipboardFile = (StorageFile)item;
141-
var pasted = await clipboardFile.CopyAsync(res.Result, item.Name, NameCollisionOption.GenerateUniqueName).AsTask().Wrap();
141+
var pasted = await FilesystemTasks.Wrap(() => clipboardFile.CopyAsync(res.Result, item.Name, NameCollisionOption.GenerateUniqueName).AsTask());
142142
if (pasted)
143143
{
144144
pastedSourceItems.Add(item);

Files/DataModels/SidebarPinnedModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,8 @@ public int IndexOfItem(INavigationControlItem locationItem, List<INavigationCont
181181
/// <returns>Task</returns>
182182
public async Task AddItemToSidebar(string path)
183183
{
184-
var item = await DrivesManager.GetRootFromPath(path).Wrap();
185-
var res = await StorageFileExtensions.DangerousGetFolderFromPathAsync(path, item).Wrap();
184+
var item = await FilesystemTasks.Wrap(() => DrivesManager.GetRootFromPath(path));
185+
var res = await FilesystemTasks.Wrap(() => StorageFileExtensions.DangerousGetFolderFromPathAsync(path, item));
186186
if (res)
187187
{
188188
int insertIndex = MainPage.sideBarItems.IndexOf(MainPage.sideBarItems.Last(x => x.ItemType == NavigationControlItemType.Location

Files/Filesystem/Drives.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ private async Task<bool> GetDrives(IList<DriveItem> list)
244244
continue;
245245
}
246246

247-
var res = await StorageFolder.GetFolderFromPathAsync(drive.Name).AsTask().Wrap();
247+
var res = await FilesystemTasks.Wrap(() => StorageFolder.GetFolderFromPathAsync(drive.Name).AsTask());
248248
if (res == FilesystemErrorCode.ERROR_UNAUTHORIZED)
249249
{
250250
unauthorizedAccessDetected = true;

Files/Filesystem/StorageFileHelpers/FilesystemResult.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public static explicit operator FilesystemResult(bool res) =>
6060
new FilesystemResult(res ? FilesystemErrorCode.ERROR_OK : FilesystemErrorCode.ERROR_GENERIC);
6161
}
6262

63-
public static class TaskExtensions
63+
public static class FilesystemTasks
6464
{
6565
private static FilesystemErrorCode GetErrorCode(Exception ex, Type T = null)
6666
{
@@ -103,23 +103,23 @@ private static FilesystemErrorCode GetErrorCode(Exception ex, Type T = null)
103103
}
104104
}
105105

106-
public async static Task<FilesystemResult<T>> Wrap<T>(this Task<T> wrapped)
106+
public async static Task<FilesystemResult<T>> Wrap<T>(Func<Task<T>> wrapped)
107107
{
108108
try
109109
{
110-
return new FilesystemResult<T>(await wrapped, FilesystemErrorCode.ERROR_OK);
110+
return new FilesystemResult<T>(await wrapped(), FilesystemErrorCode.ERROR_OK);
111111
}
112112
catch (Exception ex)
113113
{
114114
return new FilesystemResult<T>(default(T), GetErrorCode(ex, typeof(T)));
115115
}
116116
}
117117

118-
public async static Task<FilesystemResult> Wrap(this Task wrapped)
118+
public async static Task<FilesystemResult> Wrap(Func<Task> wrapped)
119119
{
120120
try
121121
{
122-
await wrapped;
122+
await wrapped();
123123
return new FilesystemResult(FilesystemErrorCode.ERROR_OK);
124124
}
125125
catch (Exception ex)
@@ -133,7 +133,7 @@ public async static Task<FilesystemResult<T>> OnSuccess<T>(this Task<FilesystemR
133133
var res = await wrapped;
134134
if (res)
135135
{
136-
return await func(res.Result).Wrap();
136+
return await Wrap(() => func(res.Result));
137137
}
138138
return res;
139139
}
@@ -143,7 +143,7 @@ public async static Task<FilesystemResult> OnSuccess<T>(this Task<FilesystemResu
143143
var res = await wrapped;
144144
if (res)
145145
{
146-
return await func(res.Result).Wrap();
146+
return await Wrap(() => func(res.Result));
147147
}
148148
return res;
149149
}

Files/Interacts/Interaction.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public async void SetAsBackground(WallpaperType type)
9090
// Generate unique name if the file already exists.
9191
// If the file you are trying to set as the wallpaper has the same name as the current wallpaper,
9292
// the system will ignore the request and no-op the operation
93-
var file = (StorageFile)await sourceFile.CopyAsync(localFolder, sourceFile.Name, NameCollisionOption.GenerateUniqueName).AsTask().Wrap();
93+
var file = (StorageFile)await FilesystemTasks.Wrap(() => sourceFile.CopyAsync(localFolder, sourceFile.Name, NameCollisionOption.GenerateUniqueName).AsTask());
9494
if (file == null) return;
9595

9696
UserProfilePersonalizationSettings profileSettings = UserProfilePersonalizationSettings.Current;
@@ -885,7 +885,7 @@ public async void RestoreItem_Click(object sender, RoutedEventArgs e)
885885
restored = sourceFolder.ErrorCode | destFolder.ErrorCode;
886886
if (sourceFolder && destFolder)
887887
{
888-
restored = await MoveDirectoryAsync(sourceFolder.Result, destFolder.Result, recycleBinItem.ItemName).Wrap()
888+
restored = await FilesystemTasks.Wrap(() => MoveDirectoryAsync(sourceFolder.Result, destFolder.Result, recycleBinItem.ItemName))
889889
.OnSuccess(t => sourceFolder.Result.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask());
890890
}
891891
}
@@ -896,7 +896,7 @@ public async void RestoreItem_Click(object sender, RoutedEventArgs e)
896896
restored = sourceFile.ErrorCode | destFolder.ErrorCode;
897897
if (sourceFile && destFolder)
898898
{
899-
restored = await sourceFile.Result.MoveAsync(destFolder.Result, Path.GetFileName(recycleBinItem.ItemOriginalPath), NameCollisionOption.GenerateUniqueName).AsTask().Wrap();
899+
restored = await FilesystemTasks.Wrap(() => sourceFile.Result.MoveAsync(destFolder.Result, Path.GetFileName(recycleBinItem.ItemOriginalPath), NameCollisionOption.GenerateUniqueName).AsTask());
900900
}
901901
}
902902
// Recycle bin also stores a file starting with $I for each item
@@ -1166,17 +1166,17 @@ public async void CreateFileFromDialogResultType(AddItemType itemType)
11661166
{
11671167
case AddItemType.Folder:
11681168
userInput = !string.IsNullOrWhiteSpace(userInput) ? userInput : "NewFolder".GetLocalized();
1169-
created = await folderRes.Result.CreateFolderAsync(userInput, CreationCollisionOption.GenerateUniqueName).AsTask().Wrap();
1169+
created = await FilesystemTasks.Wrap(() => folderRes.Result.CreateFolderAsync(userInput, CreationCollisionOption.GenerateUniqueName).AsTask());
11701170
break;
11711171

11721172
case AddItemType.TextDocument:
11731173
userInput = !string.IsNullOrWhiteSpace(userInput) ? userInput : "NewTextDocument".GetLocalized();
1174-
created = await folderRes.Result.CreateFileAsync(userInput + ".txt", CreationCollisionOption.GenerateUniqueName).AsTask().Wrap();
1174+
created = await FilesystemTasks.Wrap(() => folderRes.Result.CreateFileAsync(userInput + ".txt", CreationCollisionOption.GenerateUniqueName).AsTask());
11751175
break;
11761176

11771177
case AddItemType.BitmapImage:
11781178
userInput = !string.IsNullOrWhiteSpace(userInput) ? userInput : "NewBitmapImage".GetLocalized();
1179-
created = await folderRes.Result.CreateFileAsync(userInput + ".bmp", CreationCollisionOption.GenerateUniqueName).AsTask().Wrap();
1179+
created = await FilesystemTasks.Wrap(() => folderRes.Result.CreateFileAsync(userInput + ".bmp", CreationCollisionOption.GenerateUniqueName).AsTask());
11801180
break;
11811181
}
11821182
}
@@ -1255,7 +1255,7 @@ public async Task<string> GetHashForFile(ListedItem fileItem, string nameOfAlg,
12551255
HashAlgorithmProvider algorithmProvider = HashAlgorithmProvider.OpenAlgorithm(nameOfAlg);
12561256
StorageFile itemFromPath = await AssociatedInstance.FilesystemViewModel.GetFileFromPathAsync((fileItem as ShortcutItem)?.TargetPath ?? fileItem.ItemPath);
12571257
if (itemFromPath == null) return "";
1258-
Stream stream = await itemFromPath.OpenStreamForReadAsync().Wrap();
1258+
Stream stream = await FilesystemTasks.Wrap(() => itemFromPath.OpenStreamForReadAsync());
12591259
if (stream == null) return "";
12601260
var inputStream = stream.AsInputStream();
12611261
var str = inputStream.AsStreamForRead();

Files/View Models/ItemViewModel.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,12 @@ public async Task<FilesystemResult> SetWorkingDirectory(string value)
9191
}
9292
else if (!Path.IsPathRooted(WorkingDirectory) || Path.GetPathRoot(WorkingDirectory) != Path.GetPathRoot(value))
9393
{
94-
_workingRoot = await DrivesManager.GetRootFromPath(value).Wrap();
94+
_workingRoot = await FilesystemTasks.Wrap(() => DrivesManager.GetRootFromPath(value));
9595
}
9696

9797
if (Path.IsPathRooted(value))
9898
{
99-
var res = await StorageFileExtensions.DangerousGetFolderWithPathFromPathAsync(value, _workingRoot, _currentStorageFolder).Wrap();
99+
var res = await FilesystemTasks.Wrap(() => StorageFileExtensions.DangerousGetFolderWithPathFromPathAsync(value, _workingRoot, _currentStorageFolder));
100100
if (res)
101101
{
102102
_currentStorageFolder = res.Result;
@@ -125,22 +125,22 @@ public async Task<FilesystemResult> SetWorkingDirectory(string value)
125125

126126
public async Task<FilesystemResult<StorageFolder>> GetFolderFromPathAsync(string value)
127127
{
128-
return await StorageFileExtensions.DangerousGetFolderFromPathAsync(value, _workingRoot, _currentStorageFolder).Wrap();
128+
return await FilesystemTasks.Wrap(() => StorageFileExtensions.DangerousGetFolderFromPathAsync(value, _workingRoot, _currentStorageFolder));
129129
}
130130

131131
public async Task<FilesystemResult<StorageFile>> GetFileFromPathAsync(string value)
132132
{
133-
return await StorageFileExtensions.DangerousGetFileFromPathAsync(value, _workingRoot, _currentStorageFolder).Wrap();
133+
return await FilesystemTasks.Wrap(() => StorageFileExtensions.DangerousGetFileFromPathAsync(value, _workingRoot, _currentStorageFolder));
134134
}
135135

136136
public async Task<FilesystemResult<StorageFolderWithPath>> GetFolderWithPathFromPathAsync(string value)
137137
{
138-
return await StorageFileExtensions.DangerousGetFolderWithPathFromPathAsync(value, _workingRoot, _currentStorageFolder).Wrap();
138+
return await FilesystemTasks.Wrap(() => StorageFileExtensions.DangerousGetFolderWithPathFromPathAsync(value, _workingRoot, _currentStorageFolder));
139139
}
140140

141141
public async Task<FilesystemResult<StorageFileWithPath>> GetFileWithPathFromPathAsync(string value)
142142
{
143-
return await StorageFileExtensions.DangerousGetFileWithPathFromPathAsync(value, _workingRoot, _currentStorageFolder).Wrap();
143+
return await FilesystemTasks.Wrap(() => StorageFileExtensions.DangerousGetFileWithPathFromPathAsync(value, _workingRoot, _currentStorageFolder));
144144
}
145145

146146
private bool _IsFolderEmptyTextDisplayed;
@@ -795,7 +795,7 @@ public async Task<bool> EnumerateItemsFromStandardFolder(string path)
795795
// Flag to use FindFirstFileExFromApp or StorageFolder enumeration
796796
bool enumFromStorageFolder = false;
797797

798-
var res = await StorageFolder.GetFolderFromPathAsync(path).AsTask().Wrap();
798+
var res = await FilesystemTasks.Wrap(() => StorageFolder.GetFolderFromPathAsync(path).AsTask());
799799
if (res)
800800
{
801801
_rootFolder = res.Result;

Files/View Models/Properties/FileProperties.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ private async Task SavePropertiesAsync(StorageFile file)
422422
{
423423
var newDict = new Dictionary<string, object>();
424424
newDict.Add(valuePair.Key, valuePair.Value);
425-
var res = await file.Properties.SavePropertiesAsync(newDict).AsTask().Wrap();
425+
var res = await FilesystemTasks.Wrap(() => file.Properties.SavePropertiesAsync(newDict).AsTask());
426426
if (!res)
427427
{
428428
Debug.WriteLine(string.Format("{0}\n{1}", valuePair.Key, res.ErrorCode.ToString()));
@@ -444,7 +444,7 @@ public async Task ClearPersonalInformation()
444444
foreach (string str in PersonalProperties)
445445
dict.Add(str, null);
446446

447-
await file.Properties.SavePropertiesAsync(dict).AsTask().Wrap();
447+
await FilesystemTasks.Wrap(() => file.Properties.SavePropertiesAsync(dict).AsTask());
448448

449449
GetSpecialProperties();
450450
}

Files/View Models/SettingsViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ private async void DetectOneDrivePreference()
265265
PinOneDriveToSideBar = false;
266266
}
267267

268-
if (!await StorageFolder.GetFolderFromPathAsync(OneDrivePath).AsTask().Wrap())
268+
if (!await FilesystemTasks.Wrap(() => StorageFolder.GetFolderFromPathAsync(OneDrivePath).AsTask()))
269269
{
270270
PinOneDriveToSideBar = false;
271271
}

Files/Views/ModernShellPage.xaml.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -453,17 +453,17 @@ public async void CheckPathInput(ItemViewModel instance, string currentInput, st
453453

454454
currentInput = StorageFileExtensions.GetPathWithoutEnvironmentVariable(currentInput);
455455
if (currentSelectedPath == currentInput) return;
456-
var item = await DrivesManager.GetRootFromPath(currentInput).Wrap();
456+
var item = await FilesystemTasks.Wrap(() => DrivesManager.GetRootFromPath(currentInput));
457457

458-
var resFolder = await StorageFileExtensions.DangerousGetFolderWithPathFromPathAsync(currentInput, item).Wrap();
458+
var resFolder = await FilesystemTasks.Wrap(() => StorageFileExtensions.DangerousGetFolderWithPathFromPathAsync(currentInput, item));
459459
if (resFolder)
460460
{
461461
var pathToNavigate = resFolder.Result.Path;
462462
ContentFrame.Navigate(AppSettings.GetLayoutType(), new NavigationArguments() { NavPathParam = pathToNavigate, AssociatedTabInstance = this }); // navigate to folder
463463
}
464464
else // Not a folder or inaccessible
465465
{
466-
var resFile = await StorageFileExtensions.DangerousGetFileWithPathFromPathAsync(currentInput, item).Wrap();
466+
var resFile = await FilesystemTasks.Wrap(() => StorageFileExtensions.DangerousGetFileWithPathFromPathAsync(currentInput, item));
467467
if (resFile)
468468
{
469469
var pathToInvoke = resFile.Result.Path;

Files/Views/SettingsPages/Preferences.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public Preferences()
2323

2424
private async void TryGetOneDriveFolder()
2525
{
26-
if (!await StorageFolder.GetFolderFromPathAsync(AppSettings.OneDrivePath).AsTask().Wrap())
26+
if (!await FilesystemTasks.Wrap(() => StorageFolder.GetFolderFromPathAsync(AppSettings.OneDrivePath).AsTask()))
2727
{
2828
AppSettings.PinOneDriveToSideBar = false;
2929
OneDrivePin.IsEnabled = false;

0 commit comments

Comments
 (0)