Skip to content

Commit

Permalink
Add several additional file types to ignore list
Browse files Browse the repository at this point in the history
  • Loading branch information
sk-zk committed Nov 19, 2024
1 parent cbdcd4e commit cdac3a5
Show file tree
Hide file tree
Showing 3 changed files with 156 additions and 0 deletions.
24 changes: 24 additions & 0 deletions Extractor/Deep/FileType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,29 @@
public enum FileType
{
Unknown,
Bmp,
Dds,
Font,
Fbx,
Ini,
GimpXcf,
Jpeg,
MapRoot,
MapBase,
MapAux,
MapSnd,
MapData,
MapDesc,
MapLayer,
MapSelection,
Material,
MayaAsciiScene,
MayaBinaryScene,
MayaFile,
MayaSwatch,
MayaSwatches,
Ogg,
OpenExr,
Pdn,
Pma,
Pmc,
Expand All @@ -16,13 +34,19 @@ public enum FileType
Png,
Ppd,
Psd,
Rar,
Replay,
Sct,
Sii,
SoundBank,
SoundBankGuids,
SoundRef,
SubstanceDesignerSource,
Sui,
Svg,
TgaMask,
Tobj,
WxWidgetsResource,
ZlibBlob,
}
}
107 changes: 107 additions & 0 deletions Extractor/Deep/FileTypeHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,28 @@ public static class FileTypeHelper
private static readonly Dictionary<FileType, Func<byte[], bool>> FileTypeCheckers = new()
{
{ FileType.Dds, IsDdsFile },
{ FileType.OpenExr, IsExrFile },
{ FileType.Fbx, IsFbxFile },
{ FileType.Font, IsFontFile },
{ FileType.Jpeg, IsJpegFile },
{ FileType.Material, IsMatFile },
{ FileType.MayaFile, IsMayaFile },
{ FileType.Ogg, IsOggFile },
{ FileType.Pdn, IsPdnFile },
{ FileType.Pmg, IsPmgFile },
{ FileType.Pmc, IsPmcFile },
{ FileType.Pmd, IsPmdFile },
{ FileType.Pma, IsPmaFile },
{ FileType.Png, IsPngFile },
{ FileType.Psd, IsPsdFile },
{ FileType.Ppd, IsPpdFile },
{ FileType.Rar, IsRarFile },
{ FileType.Sii, IsSiiFile },
{ FileType.SoundBank, IsSoundBankFile },
{ FileType.SoundBankGuids, IsSoundBankGuidsFile },
{ FileType.TgaMask, IsTgaFile },
{ FileType.Tobj, IsTobjFile },
{ FileType.GimpXcf, IsXcfFile },
{ FileType.ZlibBlob, IsZlibBlob },
{ FileType.SoundRef, IsSoundRefFile },
};
Expand Down Expand Up @@ -210,6 +217,54 @@ private static bool IsZlibBlob(byte[] fileBuffer)
|| fileBuffer[1] == 0x5E || fileBuffer[1] == 0x01);
}

private static bool IsPpdFile(byte[] fileBuffer)
{
if (fileBuffer.Length < 4)
return false;

var version = BitConverter.ToInt32(fileBuffer.AsSpan()[0..4]);
return version is >= 0x15 and <= 0x18;
}

private static bool IsMayaFile(byte[] fileBuffer)
{
return fileBuffer.Length > 4 &&
Encoding.ASCII.GetString(fileBuffer[0..4]) == "FOR4";
}

private static bool IsOggFile(byte[] fileBuffer)
{
return fileBuffer.Length > 4 &&
Encoding.ASCII.GetString(fileBuffer[0..4]) == "OggS";
}

private static bool IsRarFile(byte[] fileBuffer)
{
return fileBuffer.Length > 4 &&
Encoding.ASCII.GetString(fileBuffer[0..4]) == "Rar!";
}

private static bool IsFbxFile(byte[] fileBuffer)
{
return fileBuffer.Length > 18 &&
Encoding.ASCII.GetString(fileBuffer[0..18]) == "Kaydara FBX Binary";
}

private static bool IsXcfFile(byte[] fileBuffer)
{
return fileBuffer.Length > 13 &&
Encoding.ASCII.GetString(fileBuffer[0..13]) == "gimp xcf file";
}

private static bool IsExrFile(byte[] fileBuffer)
{
if (fileBuffer.Length < 4)
return false;

byte[] magic = [0x76, 0x2F, 0x31, 0x01];
return magic.SequenceEqual(fileBuffer[0..4]);
}

public static FileType PathToFileType(string filePath)
{
var extension = Path.GetExtension(filePath).ToLowerInvariant();
Expand All @@ -222,17 +277,29 @@ public static FileType PathToFileType(string filePath)

public static FileType ExtensionToFileType(string extension)
{
// Maya junk; presumably autosaves? I've never used it
if (extension.StartsWith(".maa"))
return FileType.MayaAsciiScene;

return extension switch
{
".bank" => FileType.SoundBank,
".bmp" => FileType.Bmp,
".dds" => FileType.Dds,
".exr" => FileType.OpenExr,
".fbx" => FileType.Fbx,
".font" => FileType.Font,
".guids" => FileType.SoundBankGuids,
".bank.guids" => FileType.SoundBankGuids,
".ini" => FileType.Ini,
".jpg" => FileType.Jpeg,
".mask" => FileType.TgaMask,
".mat" => FileType.Material,
".ma" => FileType.MayaAsciiScene,
".mb" => FileType.MayaBinaryScene,
".oga" => FileType.Ogg,
".ogg" => FileType.Ogg,
".ogv" => FileType.Ogg,
".pdn" => FileType.Pdn,
".pma" => FileType.Pma,
".pmc" => FileType.Pmc,
Expand All @@ -241,10 +308,27 @@ public static FileType ExtensionToFileType(string extension)
".png" => FileType.Png,
".ppd" => FileType.Ppd,
".psd" => FileType.Psd,
".rar" => FileType.Rar,
".rpl" => FileType.Replay,
".sbs" => FileType.SubstanceDesignerSource,
".sct" => FileType.Sct,
".sii" => FileType.Sii,
".xcf" => FileType.GimpXcf,
".xrc" => FileType.WxWidgetsResource,
".soundref" => FileType.SoundRef,
".swatch" => FileType.MayaSwatch,
".swatches" => FileType.MayaSwatches,
".sui" => FileType.Sui,
".svg" => FileType.Svg,
".tobj" => FileType.Tobj,
".mbd" => FileType.MapRoot,
".base" => FileType.MapBase,
".aux" => FileType.MapAux,
".snd" => FileType.MapSnd,
".data" => FileType.MapData,
".desc" => FileType.MapDesc,
".layer" => FileType.MapLayer,
".sbd" => FileType.MapSelection,
_ => FileType.Unknown,
};
}
Expand All @@ -254,13 +338,19 @@ public static string FileTypeToExtension(FileType fileType)
return fileType switch
{
FileType.SoundBank => ".bank",
FileType.Bmp => ".bmp",
FileType.Dds => ".dds",
FileType.OpenExr => ".exr",
FileType.Fbx => ".fbx",
FileType.Font => ".font",
FileType.Ini => ".ini",
FileType.SoundBankGuids => ".bank.guids",
FileType.Jpeg => ".jpg",
FileType.TgaMask => ".mask",
FileType.Material => ".mat",
FileType.MayaAsciiScene => ".ma",
FileType.MayaBinaryScene => ".mb",
FileType.Ogg => ".ogg",
FileType.Pdn => ".pdn",
FileType.Pma => ".pma",
FileType.Pmc => ".pmc",
Expand All @@ -269,10 +359,27 @@ public static string FileTypeToExtension(FileType fileType)
FileType.Png => ".png",
FileType.Ppd => ".ppd",
FileType.Psd => ".psd",
FileType.Rar => ".rar",
FileType.Replay => ".rpl",
FileType.SubstanceDesignerSource => ".sbs",
FileType.Sct => ".sct",
FileType.Sii => ".sii",
FileType.SoundRef => ".soundref",
FileType.Sui => ".sui",
FileType.Svg => ".svg",
FileType.MayaSwatch => ".swatch",
FileType.MayaSwatches => ".swatches",
FileType.Tobj => ".tobj",
FileType.GimpXcf => ".xcf",
FileType.WxWidgetsResource => ".xrc",
FileType.MapRoot => ".mbd",
FileType.MapBase => ".base",
FileType.MapAux => ".aux",
FileType.MapSnd => ".snd",
FileType.MapData => ".data",
FileType.MapDesc => ".desc",
FileType.MapLayer => ".layer",
FileType.MapSelection => ".sbd",
_ => string.Empty,
};
}
Expand Down
25 changes: 25 additions & 0 deletions Extractor/Deep/PathFinder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,18 +38,43 @@ internal class PathFinder
/// any path references.
/// </summary>
private static readonly FileType[] IgnorableFileTypes = [
FileType.Bmp,
FileType.Dds,
FileType.Fbx,
FileType.GimpXcf,
FileType.Ini,
FileType.Jpeg,
FileType.MapRoot,
FileType.MapBase,
FileType.MapAux,
FileType.MapSnd,
FileType.MapData,
FileType.MapDesc,
FileType.MapLayer,
FileType.MapSelection,
FileType.MayaAsciiScene,
FileType.MayaBinaryScene,
FileType.MayaFile,
FileType.MayaSwatch,
FileType.MayaSwatches,
FileType.Ogg,
FileType.OpenExr,
FileType.Pma,
FileType.Pmc,
FileType.Pmg,
FileType.Png,
FileType.Ppd,
FileType.Psd,
FileType.Rar,
FileType.Replay,
FileType.Sct,
FileType.SoundBank,
FileType.SoundBankGuids,
FileType.SubstanceDesignerSource,
FileType.Sui, // handled by the including .sii files
FileType.Svg,
FileType.TgaMask,
FileType.WxWidgetsResource,
FileType.ZlibBlob,
];

Expand Down

0 comments on commit cdac3a5

Please sign in to comment.