public ConsoleColor GetColor(out string qualifier, ConsoleColor defaultColor, IFileSystemInfoFactory factory, ILinkManager manager) { qualifier = string.Empty; ConsoleColor entryColor = defaultColor; string target; if (manager.TryGetLink(Info, out target)) { var targetInfo = factory.Build(target); if (targetInfo.Exists) { entryColor = ConsoleColor.Cyan; qualifier = "@"; } else { entryColor = ConsoleColor.Red; qualifier = "@"; } } else if (Info.Attributes.HasFlag(FileAttributes.Directory)) { entryColor = ConsoleColor.Blue; qualifier = "/"; } else if (Info.Attributes.HasFlag(FileAttributes.System)) { entryColor = ConsoleColor.DarkYellow; } else if (Info.Attributes.HasFlag(FileAttributes.Compressed) || Info.Attributes.HasFlag(FileAttributes.Archive) || Info.IsCompressionExtension()) { entryColor = ConsoleColor.Magenta; } else if (Info.IsExecutable(ClaimsPrincipal.Current.Identity.Name)) { entryColor = ConsoleColor.Green; qualifier = "*"; } return(entryColor); }
private void DirectoryListing(string directory, bool showHidden, bool showColors, bool showList) { var extendedEntries = _directory.GetFileSystemEntries(directory).Select(x => _factory.Build(x)) .Select(x => new ExtendedEntryInfo(x, showList)).ToList(); if (showList) { var rightsPadding = extendedEntries.Max(x => x.Rights.Length) + 1; var childPadding = extendedEntries.Max(x => x.ChildNumber.ToString().Length) + 1; var ownerPadding = extendedEntries.Max(x => x.Owner.Length) + 1; var groupPadding = extendedEntries.Max(x => x.Group.Length) + 1; var sizePadding = extendedEntries.Max(x => x.Size.ToString().Length) + 1; var datePadding = extendedEntries.Max(x => x.Date.Length) + 1; foreach (var extendedEntry in extendedEntries) { extendedEntry.RightsPadding = rightsPadding; extendedEntry.ChildPadding = childPadding; extendedEntry.OwnerPadding = ownerPadding; extendedEntry.GroupPadding = groupPadding; extendedEntry.SizePadding = sizePadding; //extendedEntry.DatePadding = datePadding; } } foreach (var entry in extendedEntries) { string qualifier = string.Empty; ConsoleColor entryColor = _console.ForegroundColor; if (showColors) { entryColor = entry.GetColor(out qualifier, _console.ForegroundColor, _factory, _linkManager); } if (showHidden || !entry.Info.IsHidden()) { Write(entryColor, entry, qualifier, showList); } } }