public void List(string path, CancellableProgress progress, Action <ExternalContentEntry> success, Action <Exception> failure) { ExternalContentEntry entry = default(ExternalContentEntry); Exception e = default(Exception); ThreadPool.QueueUserWorkItem(delegate { try { InitializeFilesystemAccess(); string internalPath = ToInternalPath(path); entry = GetDirectoryEntry(internalPath, scanContents: true); Dispatcher.Dispatch(delegate { success(entry); }); } catch (Exception ex) { e = ex; Dispatcher.Dispatch(delegate { failure(e); }); } }); }
private ExternalContentEntry GetDirectoryEntry(string internalPath, bool scanContents) { ExternalContentEntry externalContentEntry = new ExternalContentEntry(); externalContentEntry.Type = ExternalContentType.Directory; externalContentEntry.Path = ToExternalPath(internalPath); externalContentEntry.Time = new DateTime(1970, 1, 1); if (scanContents) { string[] directories = Directory.GetDirectories(internalPath); foreach (string internalPath2 in directories) { externalContentEntry.ChildEntries.Add(GetDirectoryEntry(internalPath2, scanContents: false)); } directories = Directory.GetFiles(internalPath); foreach (string text in directories) { FileInfo fileInfo = new FileInfo(text); ExternalContentEntry externalContentEntry2 = new ExternalContentEntry(); externalContentEntry2.Type = ExternalContentManager.ExtensionToType(Path.GetExtension(text)); externalContentEntry2.Path = ToExternalPath(text); externalContentEntry2.Size = fileInfo.Length; externalContentEntry2.Time = fileInfo.CreationTime; externalContentEntry.ChildEntries.Add(externalContentEntry2); } } return(externalContentEntry); }