private async Task ReloadFolderAsync(string path, CancellationToken cancellationToken) { //currentPath = path; folderQuery.ApplyNewQueryOptions(folderQueryOptions); fileQuery.ApplyNewQueryOptions(fileQueryOptions); Clear(); await LoadFoldersAsync(cancellationToken); await LoadFilesAsync(cancellationToken); s.Stop(); Debug.WriteLine("Load took: " + s.ElapsedMilliseconds + "ms"); }
private async void FileContentsChanged(IStorageQueryResultBase sender, object args) { if (_filesRefreshing) { Debug.WriteLine("Filesystem change event fired but refresh is already running"); return; } else { Debug.WriteLine("Filesystem change event fired. Refreshing..."); } _filesRefreshing = true; //query options have to be reapplied otherwise old results are returned _fileQueryResult.ApplyNewQueryOptions(_options); _folderQueryResult.ApplyNewQueryOptions(_options); var fileCount = await _fileQueryResult.GetItemCountAsync(); var folderCount = await _folderQueryResult.GetItemCountAsync(); var files = await _fileQueryResult.GetFilesAsync(); var folders = await _folderQueryResult.GetFoldersAsync(); var cancellationTokenSourceCopy = _cancellationTokenSource; // modifying a file also results in a new unique FolderRelativeId so no need to check for DateModified explicitly var addedFiles = files.Select(f => f.FolderRelativeId).Except(_filesAndFolders.Select(f => f.FolderRelativeId)); var addedFolders = folders.Select(f => f.FolderRelativeId).Except(_filesAndFolders.Select(f => f.FolderRelativeId)); var removedFilesAndFolders = _filesAndFolders .Select(f => f.FolderRelativeId) .Except(files.Select(f => f.FolderRelativeId)) .Except(folders.Select(f => f.FolderRelativeId)) .ToArray(); foreach (var file in addedFiles) { var toAdd = files.First(f => f.FolderRelativeId == file); await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { await AddFile(toAdd, _pageName, cancellationTokenSourceCopy.Token); }); } foreach (var folder in addedFolders) { var toAdd = folders.First(f => f.FolderRelativeId == folder); await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { await AddFolder(toAdd, _pageName, cancellationTokenSourceCopy.Token); }); } foreach (var item in removedFilesAndFolders) { var toRemove = _filesAndFolders.First(f => f.FolderRelativeId == item); await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { RemoveFileOrFolder(toRemove); }); } _filesRefreshing = false; Debug.WriteLine("Filesystem refresh complete"); }