mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Reorganize application
This commit is contained in:
108
SabreTools/Features/DatFromDir.cs
Normal file
108
SabreTools/Features/DatFromDir.cs
Normal file
@@ -0,0 +1,108 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
using SabreTools.Library.Data;
|
||||
using SabreTools.Library.DatFiles;
|
||||
using SabreTools.Library.Help;
|
||||
|
||||
namespace SabreTools.Features
|
||||
{
|
||||
internal class DatFromDir : BaseFeature
|
||||
{
|
||||
public const string Value = "DATFromDir";
|
||||
|
||||
public DatFromDir()
|
||||
{
|
||||
Name = Value;
|
||||
Flags = new List<string>() { "-d", "--d2d", "--dfd" };
|
||||
Description = "Create DAT(s) from an input directory";
|
||||
_featureType = FeatureType.Flag;
|
||||
LongDescription = "Create a DAT file from an input directory or set of files. By default, this will output a DAT named based on the input directory and the current date. It will also treat all archives as possible games and add all three hashes (CRC, MD5, SHA-1) for each file.";
|
||||
Features = new Dictionary<string, Feature>();
|
||||
|
||||
// Hash Features
|
||||
AddFeature(SkipMd5Flag);
|
||||
#if NET_FRAMEWORK
|
||||
AddFeature(SkipRipeMd160Flag);
|
||||
#endif
|
||||
AddFeature(SkipSha1Flag);
|
||||
AddFeature(SkipSha256Flag);
|
||||
AddFeature(SkipSha384Flag);
|
||||
AddFeature(SkipSha512Flag);
|
||||
|
||||
AddFeature(NoAutomaticDateFlag);
|
||||
AddFeature(ArchivesAsFilesFlag);
|
||||
AddFeature(OutputTypeListInput);
|
||||
this[OutputTypeListInput].AddFeature(DeprecatedFlag);
|
||||
AddFeature(RombaFlag);
|
||||
AddFeature(SkipArchivesFlag);
|
||||
AddFeature(SkipFilesFlag);
|
||||
AddHeaderFeatures();
|
||||
AddFeature(AddBlankFilesFlag);
|
||||
AddFeature(AddDateFlag);
|
||||
AddFeature(CopyFilesFlag);
|
||||
AddFeature(HeaderStringInput);
|
||||
AddFeature(ChdsAsFilesFlag);
|
||||
AddFilteringFeatures();
|
||||
AddFeature(TempStringInput);
|
||||
AddFeature(OutputDirStringInput);
|
||||
AddFeature(ThreadsInt32Input);
|
||||
}
|
||||
|
||||
public override void ProcessFeatures(Dictionary<string, Feature> features)
|
||||
{
|
||||
base.ProcessFeatures(features);
|
||||
|
||||
// Get feature flags
|
||||
bool addBlankFiles = GetBoolean(features, AddBlankFilesValue);
|
||||
bool addFileDates = GetBoolean(features, AddDateValue);
|
||||
bool archivesAsFiles = GetBoolean(features, ArchivesAsFilesValue);
|
||||
bool chdsAsFiles = GetBoolean(features, ChdsAsFilesValue);
|
||||
bool copyFiles = GetBoolean(features, CopyFilesValue);
|
||||
bool noAutomaticDate = GetBoolean(features, NoAutomaticDateValue);
|
||||
string tempDir = GetString(features, TempStringValue);
|
||||
var omitFromScan = GetOmitFromScan(features);
|
||||
var skipFileType = GetSkipFileType(features);
|
||||
|
||||
// Create a new DATFromDir object and process the inputs
|
||||
DatFile basedat = DatFile.Create(Header);
|
||||
basedat.Header.Date = DateTime.Now.ToString("yyyy-MM-dd");
|
||||
|
||||
// For each input directory, create a DAT
|
||||
foreach (string path in Inputs)
|
||||
{
|
||||
if (Directory.Exists(path) || File.Exists(path))
|
||||
{
|
||||
// Clone the base Dat for information
|
||||
DatFile datdata = DatFile.Create(basedat.Header);
|
||||
|
||||
string basePath = Path.GetFullPath(path);
|
||||
bool success = datdata.PopulateFromDir(
|
||||
basePath,
|
||||
omitFromScan,
|
||||
noAutomaticDate,
|
||||
archivesAsFiles,
|
||||
skipFileType,
|
||||
addBlankFiles,
|
||||
addFileDates,
|
||||
tempDir,
|
||||
copyFiles,
|
||||
Header.Header,
|
||||
chdsAsFiles,
|
||||
Filter);
|
||||
|
||||
if (success)
|
||||
{
|
||||
datdata.Write(OutputDir);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine();
|
||||
OutputRecursive(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user