public static async Task Dir(string[] path, IFdbTuple extras, DirectoryBrowseOptions options, IFdbDatabase db, TextWriter log, CancellationToken ct)
		{
			if (log == null) log = Console.Out;

			log.WriteLine("# Listing {0}:", String.Join("/", path));

			var parent = await TryOpenCurrentDirectoryAsync(path, db, ct);
			if (parent == null)
			{
				log.WriteLine("  Directory not found.");
				return;
			}

			if (parent.Layer.IsPresent)
			{
				log.WriteLine("# Layer: {0}", parent.Layer.ToAsciiOrHexaString());
			}

			var folders = await Fdb.Directory.BrowseAsync(db, parent, ct);
			if (folders != null && folders.Count > 0)
			{
				foreach (var kvp in folders)
				{
					var name = kvp.Key;
					var subfolder = kvp.Value;
					if (subfolder != null)
					{
						if ((options & DirectoryBrowseOptions.ShowCount) != 0)
						{
							if (!(subfolder is FdbDirectoryPartition))
							{
								long count = await Fdb.System.EstimateCountAsync(db, subfolder.ToRange(), ct);
								log.WriteLine("  {0,-12} {1,-12} {3,9:N0} {2}", FdbKey.Dump(subfolder.Copy().Key), subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">"), name, count);
							}
							else
							{
								log.WriteLine("  {0,-12} {1,-12} {3,9} {2}", FdbKey.Dump(subfolder.Copy().Key), subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">"), name, "-");
							}
						}
						else
						{
							log.WriteLine("  {0,-12} {1,-12} {2}", FdbKey.Dump(subfolder.Copy().Key), subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">"), name);
						}
					}
					else
					{
						log.WriteLine("  WARNING: {0} seems to be missing!", name);
					}
				}
				log.WriteLine("  {0} sub-directorie(s).", folders.Count);
			}
			else
			{
				//TODO: test if it contains data?
				log.WriteLine("  No sub-directories.");
			}
		}
        public static async Task Dir(string[] path, IVarTuple extras, DirectoryBrowseOptions options, IFdbDatabase db, TextWriter log, CancellationToken ct)
        {
            if (log == null)
            {
                log = Console.Out;
            }

            Program.Comment(log, $"# Listing /{string.Join("/", path)}:");

            var parent = await TryOpenCurrentDirectoryAsync(path, db, ct);

            if (parent == null)
            {
                Program.Error(log, "Directory not found.");
                return;
            }

            if (parent.Layer.IsPresent)
            {
                log.WriteLine($"# Layer: {parent.Layer:P}");
            }

            var folders = await Fdb.Directory.BrowseAsync(db, parent, ct);

            if (folders != null && folders.Count > 0)
            {
                foreach (var kvp in folders)
                {
                    var name      = kvp.Key;
                    var subfolder = kvp.Value;
                    if (subfolder != null)
                    {
                        if ((options & DirectoryBrowseOptions.ShowCount) != 0)
                        {
                            if (!(subfolder is FdbDirectoryPartition))
                            {
                                long count = await Fdb.System.EstimateCountAsync(db, subfolder.Keys.ToRange(), ct);

                                Program.StdOut(log, $"  {FdbKey.Dump(subfolder.Copy().GetPrefix()),-12} {(subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">")),-12} {count,9:N0} {name}", ConsoleColor.White);
                            }
                            else
                            {
                                Program.StdOut(log, $"  {FdbKey.Dump(subfolder.Copy().GetPrefix()),-12} {(subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">")),-12} {"-",9} {name}", ConsoleColor.White);
                            }
                        }
                        else
                        {
                            Program.StdOut(log, $"  {FdbKey.Dump(subfolder.Copy().GetPrefix()),-12} {(subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">")),-12} {name}", ConsoleColor.White);
                        }
                    }
                    else
                    {
                        Program.Error(log, $"  WARNING: {name} seems to be missing!");
                    }
                }
                log.WriteLine($"  {folders.Count} sub-directorie(s).");
            }
            else
            {
                //TODO: test if it contains data?
                log.WriteLine("No sub-directories.");
            }

            //TODO: check if there is at least one key?
        }
Exemplo n.º 3
0
        public static async Task Dir(string[] path, IFdbTuple extras, DirectoryBrowseOptions options, IFdbDatabase db, TextWriter log, CancellationToken ct)
        {
            if (log == null)
            {
                log = Console.Out;
            }

            log.WriteLine("# Listing {0}:", String.Join("/", path));

            var parent = await TryOpenCurrentDirectoryAsync(path, db, ct);

            if (parent == null)
            {
                log.WriteLine("  Directory not found.");
                return;
            }

            if (parent.Layer.IsPresent)
            {
                log.WriteLine("# Layer: {0}", parent.Layer.ToAsciiOrHexaString());
            }

            var folders = await Fdb.Directory.BrowseAsync(db, parent, ct);

            if (folders != null && folders.Count > 0)
            {
                foreach (var kvp in folders)
                {
                    var name      = kvp.Key;
                    var subfolder = kvp.Value;
                    if (subfolder != null)
                    {
                        if ((options & DirectoryBrowseOptions.ShowCount) != 0)
                        {
                            if (!(subfolder is FdbDirectoryPartition))
                            {
                                long count = await Fdb.System.EstimateCountAsync(db, subfolder.ToRange(), ct);

                                log.WriteLine("  {0,-12} {1,-12} {3,9:N0} {2}", FdbKey.Dump(subfolder.Copy().Key), subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">"), name, count);
                            }
                            else
                            {
                                log.WriteLine("  {0,-12} {1,-12} {3,9} {2}", FdbKey.Dump(subfolder.Copy().Key), subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">"), name, "-");
                            }
                        }
                        else
                        {
                            log.WriteLine("  {0,-12} {1,-12} {2}", FdbKey.Dump(subfolder.Copy().Key), subfolder.Layer.IsNullOrEmpty ? "-" : ("<" + subfolder.Layer.ToUnicode() + ">"), name);
                        }
                    }
                    else
                    {
                        log.WriteLine("  WARNING: {0} seems to be missing!", name);
                    }
                }
                log.WriteLine("  {0} sub-directorie(s).", folders.Count);
            }
            else
            {
                //TODO: test if it contains data?
                log.WriteLine("  No sub-directories.");
            }
        }
        public static async Task Dir(FdbPath path, IVarTuple extras, DirectoryBrowseOptions options, IFdbDatabase db, TextWriter log, CancellationToken ct)
        {
            if (log == null)
            {
                log = Console.Out;
            }

            Program.Comment(log, $"# Listing {path}:");

            await db.ReadAsync(async tr =>
            {
                var parent = await TryOpenCurrentDirectoryAsync(tr, path);
                if (parent == null)
                {
                    Program.Error(log, "Directory not found.");
                    return;
                }

                if (!string.IsNullOrEmpty(parent.Layer))
                {
                    log.WriteLine($"# Layer: {parent.Layer}");
                }

                var folders = await Fdb.Directory.BrowseAsync(tr, parent);
                if (folders.Count > 0)
                {
                    // to better align the names, we allow between 16 to 40 chars for the first column.
                    // if there is a larger name, it will stick out!
                    var maxLen = Math.Min(Math.Max(folders.Keys.Max(n => n.Length), 16), 40);

                    foreach (var kvp in folders)
                    {
                        var name      = kvp.Key;
                        var subfolder = kvp.Value;
                        if (subfolder != null)
                        {
                            if ((options & DirectoryBrowseOptions.ShowCount) != 0)
                            {
                                if (!(subfolder is FdbDirectoryPartition))
                                {
                                    long count = await Fdb.System.EstimateCountAsync(db, subfolder.ToRange(), ct);
                                    Program.StdOut(log, $"  {name.PadRight(maxLen)} {FdbKey.Dump(subfolder.Copy().GetPrefix()),-12} {(string.IsNullOrEmpty(subfolder.Layer) ? "-" : ("[" + subfolder.Layer + "]")),-12} {count,9:N0}", ConsoleColor.White);
                                }
                                else
                                {
                                    Program.StdOut(log, $"  {name.PadRight(maxLen)} {FdbKey.Dump(subfolder.Copy().GetPrefix()),-12} {(string.IsNullOrEmpty(subfolder.Layer) ? "-" : ("[" + subfolder.Layer + "]")),-12} {"-",9}", ConsoleColor.White);
                                }
                            }
                            else
                            {
                                Program.StdOut(log, $"  {name.PadRight(maxLen)} {FdbKey.Dump(subfolder.Copy().GetPrefix()),-12} {(string.IsNullOrEmpty(subfolder.Layer) ? "-" : ("[" + subfolder.Layer + "]")),-12}", ConsoleColor.White);
                            }
                        }
                        else
                        {
                            Program.Error(log, $"  WARNING: {name} seems to be missing!");
                        }
                    }

                    log.WriteLine($"  {folders.Count} sub-directories.");
                }
                else
                {
                    //TODO: test if it contains data?
                    log.WriteLine("No sub-directories.");
                }

                //TODO: check if there is at least one key?
            }, ct);
        }