Skip to content

Commit 35377ca

Browse files
committed
feat: add --verbose flag for per-file messages, show only progress bar by default
- Add --verbose CLI option to enable per-file processing messages - Change default behavior to show only progress bar (cleaner output) - --quiet now only suppresses the progress bar - Update all handlers and services to use verbose parameter - Update tests to explicitly set verbose when checking log output
1 parent aae2c51 commit 35377ca

24 files changed

Lines changed: 119 additions & 88 deletions

CLAUDE.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,12 @@ Files are identified by magic headers:
126126
# Single-threaded processing
127127
./ReFrontier file.bin --parallelism 1
128128

129-
# Suppress progress output for faster processing
129+
# Suppress progress bar (for scripts or logs)
130130
./ReFrontier directory/ --quiet
131131

132+
# Show per-file processing messages
133+
./ReFrontier directory/ --verbose
134+
132135
# Decrypt only
133136
./ReFrontier file.bin --decryptOnly
134137

@@ -141,7 +144,8 @@ Files are identified by magic headers:
141144

142145
Key options:
143146
- `--parallelism` - Number of parallel threads (0=auto-detect using CPU cores, default: 0)
144-
- `--quiet` - Suppress progress output during processing (reduces logging overhead for better parallelism)
147+
- `--quiet` - Suppress the progress bar during processing
148+
- `--verbose` - Show per-file processing messages (off by default for cleaner output)
145149
- `--saveMeta` - Save metadata files (recommended for repacking/re-encryption)
146150
- `--recursive`/`--nonRecursive` - Control recursive unpacking
147151
- `--compress <type>` - Compression type: `rw`, `hfirw`, `lz`, `hfi` (or `0`, `2`, `3`, `4`)

ReFrontier.Tests/Integration/ParallelismIntegrationTests.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ public void ProcessMultipleLevels_DifferentParallelism_DoesNotThrow(int parallel
3535
{
3636
parallelism = parallelism,
3737
recursive = false,
38-
createLog = false
38+
createLog = false,
39+
verbose = true
3940
};
4041

4142
// Act & Assert - Should not throw with any parallelism level
@@ -67,7 +68,8 @@ public void ProcessMultipleLevels_AutoDetect_UsesEnvironmentProcessorCount()
6768
{
6869
parallelism = 0, // Auto-detect
6970
recursive = false,
70-
createLog = false
71+
createLog = false,
72+
verbose = true
7173
};
7274

7375
// Act - Should not throw
@@ -116,7 +118,8 @@ public void ProcessMultipleLevels_ParallelismNotSet_DefaultsCorrectly()
116118
var args = new InputArguments
117119
{
118120
recursive = false,
119-
createLog = false
121+
createLog = false,
122+
verbose = true
120123
};
121124

122125
// Act - Should use auto-detected parallelism (Environment.ProcessorCount)

ReFrontier.Tests/ProgramTests.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ public void StartProcessingFile_NoCompressionNoEncrypt_LogsAndContinues()
8484
var args = new InputArguments
8585
{
8686
compression = new Compression(CompressionType.RW, 0),
87-
encrypt = false
87+
encrypt = false,
88+
verbose = true
8889
};
8990

9091
// Act - Should not throw; exceptions are caught and logged
@@ -153,7 +154,8 @@ public void StartProcessingDirectory_WithoutRepack_ProcessesFiles()
153154
var args = new InputArguments
154155
{
155156
repack = false,
156-
recursive = false
157+
recursive = false,
158+
verbose = true
157159
};
158160

159161
// Act - Should not throw; exceptions are caught and logged
@@ -182,7 +184,8 @@ public void StartProcessingDirectory_FiltersOutputFiles()
182184
var args = new InputArguments
183185
{
184186
repack = false,
185-
recursive = false
187+
recursive = false,
188+
verbose = true
186189
};
187190

188191
// Act
@@ -209,7 +212,8 @@ public void StartProcessingDirectory_FiltersUnpackedDirectories()
209212
var args = new InputArguments
210213
{
211214
repack = false,
212-
recursive = false
215+
recursive = false,
216+
verbose = true
213217
};
214218

215219
// Act
@@ -263,7 +267,8 @@ public void ProcessFile_RecognizesEcdMagic()
263267
{
264268
createLog = true,
265269
recursive = false,
266-
decryptOnly = true
270+
decryptOnly = true,
271+
verbose = true
267272
};
268273

269274
// Act
@@ -296,7 +301,8 @@ public void ProcessFile_RecognizesJkrMagic()
296301
var args = new InputArguments
297302
{
298303
recursive = false,
299-
ignoreJPK = false
304+
ignoreJPK = false,
305+
verbose = true
300306
};
301307

302308
// Act

ReFrontier.Tests/Routing/Handlers/MomoArchiveHandlerTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public void Handle_CallsCorrectService()
6868

6969
try
7070
{
71-
var result = _handler.Handle("test.bin", reader, new InputArguments());
71+
var result = _handler.Handle("test.bin", reader, new InputArguments { verbose = true });
7272
// If it doesn't throw, the handler was called
7373
Assert.True(true);
7474
}

ReFrontier.Tests/Routing/Handlers/NoDecryptionHandlerTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void Handle_ReturnsSkipped()
5656
using var ms = new MemoryStream(data);
5757
using var reader = new BinaryReader(ms);
5858

59-
var result = _handler.Handle("test.bin", reader, new InputArguments());
59+
var result = _handler.Handle("test.bin", reader, new InputArguments { verbose = true });
6060

6161
Assert.False(result.WasProcessed);
6262
Assert.Equal("Decryption disabled", result.SkipReason);

ReFrontier.Tests/Services/FileProcessingServiceTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public void DecryptEcdFile_CreatesDecryptedFile()
3939
_fileSystem.AddFile("/test/file.bin", fullFile);
4040

4141
// Act
42-
string result = _service.DecryptEcdFile("/test/file.bin", createLog: false, cleanUp: false);
42+
string result = _service.DecryptEcdFile("/test/file.bin", createLog: false, cleanUp: false, verbose: true);
4343

4444
// Assert
4545
TestHelpers.AssertPathsEqual("/test/file.bin.decd", result);
@@ -60,7 +60,7 @@ public void DecryptEcdFile_WithLog_CreatesMetaFile()
6060
_fileSystem.AddFile("/test/file.bin", fullFile);
6161

6262
// Act
63-
_service.DecryptEcdFile("/test/file.bin", createLog: true, cleanUp: false);
63+
_service.DecryptEcdFile("/test/file.bin", createLog: true, cleanUp: false, verbose: true);
6464

6565
// Assert
6666
Assert.True(_fileSystem.FileExists("/test/file.bin.meta"));
@@ -109,7 +109,7 @@ public void EncryptEcdFile_WithMissingMetaFile_UsesDefaultKeyAndWarns()
109109
_fileSystem.AddFile("/test/file.bin.decd", data, DateTime.Now);
110110

111111
// Act
112-
string result = _service.EncryptEcdFile("/test/file.bin.decd", "/test/file.bin.meta", cleanUp: false);
112+
string result = _service.EncryptEcdFile("/test/file.bin.decd", "/test/file.bin.meta", cleanUp: false, verbose: true);
113113

114114
// Assert - should succeed with warning about using default key
115115
TestHelpers.AssertPathsEqual("/test/file.bin", result);
@@ -133,7 +133,7 @@ public void EncryptEcdFile_WithValidMetaFile_CreatesEncryptedFile()
133133
_fileSystem.AddFile("/test/file.bin.meta", metaData);
134134

135135
// Act
136-
string result = _service.EncryptEcdFile("/test/file.bin.decd", "/test/file.bin.meta", cleanUp: false);
136+
string result = _service.EncryptEcdFile("/test/file.bin.decd", "/test/file.bin.meta", cleanUp: false, verbose: true);
137137

138138
// Assert
139139
TestHelpers.AssertPathsEqual("/test/file.bin", result);

ReFrontier.Tests/Services/PackingServiceTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ public void PackFTXT_LogsPackingInfo()
373373
_fileSystem.AddFile("/test/file.ftxt.txt", "Hello\nWorld");
374374

375375
// Act
376-
_service.PackFTXT("/test/file.ftxt.txt", "/test/file.ftxt.meta", false);
376+
_service.PackFTXT("/test/file.ftxt.txt", "/test/file.ftxt.meta", false, verbose: true);
377377

378378
// Assert
379379
Assert.True(_logger.ContainsMessage("FTXT packed"));

ReFrontier.Tests/Services/UnpackingServiceTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public void UnpackJPK_ValidJKRFile_CreatesDecompressedFile()
140140
_logger.Clear();
141141

142142
// Act
143-
var result = _service.UnpackJPK("/test/compressed.jkr");
143+
var result = _service.UnpackJPK("/test/compressed.jkr", verbose: true);
144144

145145
// Assert
146146
Assert.NotNull(result);
@@ -202,7 +202,7 @@ public void UnpackJPK_HFIRWCompression_Decompresses()
202202
_logger.Clear();
203203

204204
// Act
205-
var result = _service.UnpackJPK("/test/compressed.jkr");
205+
var result = _service.UnpackJPK("/test/compressed.jkr", verbose: true);
206206

207207
// Assert
208208
Assert.NotNull(result);
@@ -229,7 +229,7 @@ public void UnpackJPK_RWCompression_Decompresses()
229229
_logger.Clear();
230230

231231
// Act
232-
var result = _service.UnpackJPK("/test/compressed.jkr");
232+
var result = _service.UnpackJPK("/test/compressed.jkr", verbose: true);
233233

234234
// Assert
235235
Assert.NotNull(result);
@@ -256,7 +256,7 @@ public void UnpackJPK_HFICompression_Decompresses()
256256
_logger.Clear();
257257

258258
// Act
259-
var result = _service.UnpackJPK("/test/compressed.jkr");
259+
var result = _service.UnpackJPK("/test/compressed.jkr", verbose: true);
260260

261261
// Assert
262262
Assert.NotNull(result);

ReFrontier/CLI/CliArguments.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,13 @@ public readonly struct CliArguments
2121
public int Parallelism { get; init; }
2222

2323
/// <summary>
24-
/// Whether to suppress progress output during processing.
24+
/// Whether to suppress progress bar during processing.
2525
/// </summary>
2626
public bool Quiet { get; init; }
27+
28+
/// <summary>
29+
/// Whether to show per-file processing messages.
30+
/// </summary>
31+
public bool Verbose { get; init; }
2732
}
2833
}

ReFrontier/CLI/CliSchema.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class CliSchema
2424
private readonly Option<bool> _encryptOption;
2525
private readonly Option<int> _parallelismOption;
2626
private readonly Option<bool> _quietOption;
27+
private readonly Option<bool> _verboseOption;
2728

2829
/// <summary>
2930
/// Creates a new CliSchema instance and initializes all CLI options.
@@ -107,7 +108,12 @@ public CliSchema()
107108

108109
_quietOption = new Option<bool>("--quiet")
109110
{
110-
Description = "Suppress progress output during processing"
111+
Description = "Suppress progress bar during processing"
112+
};
113+
114+
_verboseOption = new Option<bool>("--verbose")
115+
{
116+
Description = "Show per-file processing messages"
111117
};
112118
}
113119

@@ -136,7 +142,8 @@ public RootCommand CreateRootCommand(string version, string productName, string
136142
_compressLevelOption,
137143
_encryptOption,
138144
_parallelismOption,
139-
_quietOption
145+
_quietOption,
146+
_verboseOption
140147
};
141148

142149
return rootCommand;
@@ -164,6 +171,7 @@ public CliArguments ExtractArguments(ParseResult parseResult)
164171
var encrypt = parseResult.GetValue(_encryptOption);
165172
var parallelism = parseResult.GetValue(_parallelismOption);
166173
var quiet = parseResult.GetValue(_quietOption);
174+
var verbose = parseResult.GetValue(_verboseOption);
167175

168176
// Parse compression if specified
169177
Compression compression = new();
@@ -199,7 +207,8 @@ public CliArguments ExtractArguments(ParseResult parseResult)
199207
FilePath = file,
200208
ProcessingArgs = processingArgs,
201209
Parallelism = parallelism,
202-
Quiet = quiet
210+
Quiet = quiet,
211+
Verbose = verbose
203212
};
204213
}
205214
}

0 commit comments

Comments
 (0)