-
Notifications
You must be signed in to change notification settings - Fork 2
/
FsCommandFactory.cs
125 lines (101 loc) · 4.86 KB
/
FsCommandFactory.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
namespace Hst.Imager.ConsoleApp;
using System.CommandLine;
using Hst.Imager.Core.UaeMetadatas;
public static class FsCommandFactory
{
public static Command CreateFsCommand()
{
var command = new Command("fs", "File system.");
command.AddCommand(CreateFsDir());
command.AddCommand(CreateFsCopy());
command.AddCommand(CreateFsExtract());
return command;
}
private static Command CreateFsDir()
{
var pathArgument = new Argument<string>(
name: "DiskPath",
description: "Path to physical drive or image file.");
var recursiveOption = new Option<bool>(
new[] { "--recursive", "-r" },
description: "Recursively list sub-directories.",
getDefaultValue: () => false);
var command = new Command("dir", "List files and subdirectories in a directory.");
command.AddAlias("d");
command.SetHandler(CommandHandler.FsDir, pathArgument, recursiveOption, CommandFactory.FormatOption);
command.AddArgument(pathArgument);
command.AddOption(recursiveOption);
command.AddOption(CommandFactory.FormatOption);
return command;
}
private static Command CreateFsCopy()
{
var sourcePathArgument = new Argument<string>(
name: "SourcePath",
description: "Path to source physical drive or image file.");
var destinationPathArgument = new Argument<string>(
name: "DestinationPath",
description: "Path to destination physical drive or image file.");
var recursiveOption = new Option<bool>(
new[] { "--recursive", "-r" },
description: "Recursively copy sub-directories.",
getDefaultValue: () => true);
var skipAttributesOption = new Option<bool>(
new[] { "--skip-attributes", "-sa" },
description: "Attributes of directories and files are not set when copied.",
getDefaultValue: () => false);
var quietOption = new Option<bool>(
new[] { "--quiet", "-q" },
description: "Quiet mode.",
getDefaultValue: () => false);
var uaeMetadataOption = new Option<UaeMetadata>(
new[] { "--uaemetadata", "-uae" },
description: "Type of UAE metadata to read and write.",
getDefaultValue: () => UaeMetadata.UaeFsDb);
var command = new Command("copy", "Copy files or subdirectories from source to destination.");
command.AddAlias("c");
command.SetHandler(CommandHandler.FsCopy, sourcePathArgument, destinationPathArgument, recursiveOption, skipAttributesOption, quietOption, uaeMetadataOption);
command.AddArgument(sourcePathArgument);
command.AddArgument(destinationPathArgument);
command.AddOption(recursiveOption);
command.AddOption(skipAttributesOption);
command.AddOption(quietOption);
command.AddOption(uaeMetadataOption);
return command;
}
private static Command CreateFsExtract()
{
var sourcePathArgument = new Argument<string>(
name: "SourcePath",
description: "Source path to extract from (lha, iso, adf file).");
var destinationPathArgument = new Argument<string>(
name: "DestinationPath",
description: "Destination path to extract to (physical drive, image file or directory).");
var recursiveOption = new Option<bool>(
new[] { "--recursive", "-r" },
description: "Recursively extract sub-directories.",
getDefaultValue: () => true);
var skipAttributesOption = new Option<bool>(
new[] { "--skip-attributes", "-sa" },
description: "Attributes of directories and files are not set when copied.",
getDefaultValue: () => false);
var quietOption = new Option<bool>(
new[] { "--quiet", "-q" },
description: "Quiet mode.",
getDefaultValue: () => false);
var uaeMetadataOption = new Option<UaeMetadata>(
new[] { "--uaemetadata", "-uae" },
description: "Type of UAE metadata to read and write.",
getDefaultValue: () => UaeMetadata.UaeFsDb);
var command = new Command("extract", "Extract files or subdirectories from source to destination.");
command.AddAlias("x");
command.SetHandler(CommandHandler.FsExtract, sourcePathArgument, destinationPathArgument, recursiveOption, skipAttributesOption, quietOption, uaeMetadataOption);
command.AddArgument(sourcePathArgument);
command.AddArgument(destinationPathArgument);
command.AddOption(recursiveOption);
command.AddOption(skipAttributesOption);
command.AddOption(quietOption);
command.AddOption(uaeMetadataOption);
return command;
}
}