From 3c064bad55bd0e4acb0745dd7e783b1140dda4b6 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 9 Mar 2023 14:04:31 -0500 Subject: [PATCH] Add skeleton `IExtractable` implementations --- BurnOutSharp/FileType/BFPK.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/BZip2.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/CFB.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/GCF.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/GZIP.cs | 22 +++++++++++++++++- .../FileType/InstallShieldArchiveV3.cs | 23 +++++++++++++++++-- BurnOutSharp/FileType/InstallShieldCAB.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/MPQ.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/MicrosoftCAB.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/MicrosoftLZ.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/PAK.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/PFF.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/PKZIP.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/RAR.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/SFFS.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/SGA.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/SevenZip.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/TapeArchive.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/VBSP.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/VPK.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/WAD.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/XZ.cs | 22 +++++++++++++++++- BurnOutSharp/FileType/XZP.cs | 22 +++++++++++++++++- 23 files changed, 483 insertions(+), 24 deletions(-) diff --git a/BurnOutSharp/FileType/BFPK.cs b/BurnOutSharp/FileType/BFPK.cs index 2a5b581e..41666c92 100644 --- a/BurnOutSharp/FileType/BFPK.cs +++ b/BurnOutSharp/FileType/BFPK.cs @@ -2,6 +2,7 @@ using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using static BinaryObjectScanner.Utilities.Dictionary; namespace BurnOutSharp.FileType @@ -9,8 +10,27 @@ namespace BurnOutSharp.FileType /// /// BFPK custom archive format /// - public class BFPK : IScannable + public class BFPK : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/BZip2.cs b/BurnOutSharp/FileType/BZip2.cs index 3319c75b..1c42000d 100644 --- a/BurnOutSharp/FileType/BZip2.cs +++ b/BurnOutSharp/FileType/BZip2.cs @@ -2,6 +2,7 @@ using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using SharpCompress.Compressors; using SharpCompress.Compressors.BZip2; using static BinaryObjectScanner.Utilities.Dictionary; @@ -11,8 +12,27 @@ namespace BurnOutSharp.FileType /// /// bzip2 archive /// - public class BZip2 : IScannable + public class BZip2 : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/CFB.cs b/BurnOutSharp/FileType/CFB.cs index c44ff9a5..44388725 100644 --- a/BurnOutSharp/FileType/CFB.cs +++ b/BurnOutSharp/FileType/CFB.cs @@ -3,6 +3,7 @@ using System.Collections.Concurrent; using System.IO; using System.Text; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using OpenMcdf; using static BinaryObjectScanner.Utilities.Dictionary; @@ -11,8 +12,27 @@ namespace BurnOutSharp.FileType /// /// Compound File Binary /// - public class CFB : IScannable + public class CFB : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/GCF.cs b/BurnOutSharp/FileType/GCF.cs index 279e251a..14bfdbca 100644 --- a/BurnOutSharp/FileType/GCF.cs +++ b/BurnOutSharp/FileType/GCF.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using static BinaryObjectScanner.Utilities.Dictionary; namespace BurnOutSharp.FileType @@ -9,8 +10,27 @@ namespace BurnOutSharp.FileType /// /// Half-Life Game Cache File /// - public class GCF : IScannable + public class GCF : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/GZIP.cs b/BurnOutSharp/FileType/GZIP.cs index 46165440..43b5cef1 100644 --- a/BurnOutSharp/FileType/GZIP.cs +++ b/BurnOutSharp/FileType/GZIP.cs @@ -2,6 +2,7 @@ using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using SharpCompress.Archives; using SharpCompress.Archives.GZip; using static BinaryObjectScanner.Utilities.Dictionary; @@ -11,8 +12,27 @@ namespace BurnOutSharp.FileType /// /// gzip archive /// - public class GZIP : IScannable + public class GZIP : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/InstallShieldArchiveV3.cs b/BurnOutSharp/FileType/InstallShieldArchiveV3.cs index 6fc94458..fc4a3d2f 100644 --- a/BurnOutSharp/FileType/InstallShieldArchiveV3.cs +++ b/BurnOutSharp/FileType/InstallShieldArchiveV3.cs @@ -2,8 +2,8 @@ using System.Collections.Concurrent; using System.IO; using System.Linq; -using System.Text.RegularExpressions; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using UnshieldSharp.Archive; using static BinaryObjectScanner.Utilities.Dictionary; @@ -12,8 +12,27 @@ namespace BurnOutSharp.FileType /// /// InstallShield archive v3 /// - public class InstallShieldArchiveV3 : IScannable + public class InstallShieldArchiveV3 : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/InstallShieldCAB.cs b/BurnOutSharp/FileType/InstallShieldCAB.cs index 0206dc4c..04249cd2 100644 --- a/BurnOutSharp/FileType/InstallShieldCAB.cs +++ b/BurnOutSharp/FileType/InstallShieldCAB.cs @@ -3,6 +3,7 @@ using System.Collections.Concurrent; using System.IO; using System.Text.RegularExpressions; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using UnshieldSharp.Cabinet; using static BinaryObjectScanner.Utilities.Dictionary; @@ -11,8 +12,27 @@ namespace BurnOutSharp.FileType /// /// InstallShield cabinet file /// - public class InstallShieldCAB : IScannable + public class InstallShieldCAB : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/MPQ.cs b/BurnOutSharp/FileType/MPQ.cs index 64e3e330..4c625f00 100644 --- a/BurnOutSharp/FileType/MPQ.cs +++ b/BurnOutSharp/FileType/MPQ.cs @@ -2,6 +2,7 @@ using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; #if NET48 using StormLibSharp; #endif @@ -12,8 +13,27 @@ namespace BurnOutSharp.FileType /// /// MoPaQ game data archive /// - public class MPQ : IScannable + public class MPQ : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/MicrosoftCAB.cs b/BurnOutSharp/FileType/MicrosoftCAB.cs index 8c916880..5dc50b40 100644 --- a/BurnOutSharp/FileType/MicrosoftCAB.cs +++ b/BurnOutSharp/FileType/MicrosoftCAB.cs @@ -2,6 +2,7 @@ using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using BinaryObjectScanner.Wrappers; using static BinaryObjectScanner.Utilities.Dictionary; @@ -12,8 +13,27 @@ namespace BurnOutSharp.FileType /// /// Specification available at /// - public class MicrosoftCAB : IScannable + public class MicrosoftCAB : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/MicrosoftLZ.cs b/BurnOutSharp/FileType/MicrosoftLZ.cs index c8f6f455..1e5b18df 100644 --- a/BurnOutSharp/FileType/MicrosoftLZ.cs +++ b/BurnOutSharp/FileType/MicrosoftLZ.cs @@ -3,6 +3,7 @@ using System.Collections.Concurrent; using System.IO; using BinaryObjectScanner.Compression; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using static BinaryObjectScanner.Utilities.Dictionary; namespace BurnOutSharp.FileType @@ -11,8 +12,27 @@ namespace BurnOutSharp.FileType /// Microsoft LZ-compressed Files (LZ32) /// /// This is treated like an archive type due to the packing style - public class MicrosoftLZ : IScannable + public class MicrosoftLZ : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/PAK.cs b/BurnOutSharp/FileType/PAK.cs index 49600c55..f5e4040e 100644 --- a/BurnOutSharp/FileType/PAK.cs +++ b/BurnOutSharp/FileType/PAK.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using static BinaryObjectScanner.Utilities.Dictionary; namespace BurnOutSharp.FileType @@ -9,8 +10,27 @@ namespace BurnOutSharp.FileType /// /// Half-Life Package File /// - public class PAK : IScannable + public class PAK : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/PFF.cs b/BurnOutSharp/FileType/PFF.cs index 3bf40a06..31d80fea 100644 --- a/BurnOutSharp/FileType/PFF.cs +++ b/BurnOutSharp/FileType/PFF.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using static BinaryObjectScanner.Utilities.Dictionary; namespace BurnOutSharp.FileType @@ -9,8 +10,27 @@ namespace BurnOutSharp.FileType /// /// NovaLogic Game Archive Format /// - public class PFF : IScannable + public class PFF : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/PKZIP.cs b/BurnOutSharp/FileType/PKZIP.cs index 9d5e7006..b4137f93 100644 --- a/BurnOutSharp/FileType/PKZIP.cs +++ b/BurnOutSharp/FileType/PKZIP.cs @@ -2,6 +2,7 @@ using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using SharpCompress.Archives; using SharpCompress.Archives.Zip; using static BinaryObjectScanner.Utilities.Dictionary; @@ -11,8 +12,27 @@ namespace BurnOutSharp.FileType /// /// PKWARE ZIP archive and derivatives /// - public class PKZIP : IScannable + public class PKZIP : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/RAR.cs b/BurnOutSharp/FileType/RAR.cs index 007aef3f..9eb203e0 100644 --- a/BurnOutSharp/FileType/RAR.cs +++ b/BurnOutSharp/FileType/RAR.cs @@ -2,6 +2,7 @@ using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using SharpCompress.Archives; using SharpCompress.Archives.Rar; using static BinaryObjectScanner.Utilities.Dictionary; @@ -11,8 +12,27 @@ namespace BurnOutSharp.FileType /// /// RAR archive /// - public class RAR : IScannable + public class RAR : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/SFFS.cs b/BurnOutSharp/FileType/SFFS.cs index 7165ed4f..d05b6c65 100644 --- a/BurnOutSharp/FileType/SFFS.cs +++ b/BurnOutSharp/FileType/SFFS.cs @@ -2,6 +2,7 @@ using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using static BinaryObjectScanner.Utilities.Dictionary; namespace BurnOutSharp.FileType @@ -10,8 +11,27 @@ namespace BurnOutSharp.FileType /// StarForce Filesystem file /// /// - public class SFFS : IScannable + public class SFFS : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/SGA.cs b/BurnOutSharp/FileType/SGA.cs index 34fdf63e..c92cb6ba 100644 --- a/BurnOutSharp/FileType/SGA.cs +++ b/BurnOutSharp/FileType/SGA.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using static BinaryObjectScanner.Utilities.Dictionary; namespace BurnOutSharp.FileType @@ -9,8 +10,27 @@ namespace BurnOutSharp.FileType /// /// SGA game archive /// - public class SGA : IScannable + public class SGA : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/SevenZip.cs b/BurnOutSharp/FileType/SevenZip.cs index bac786b3..0455a1d3 100644 --- a/BurnOutSharp/FileType/SevenZip.cs +++ b/BurnOutSharp/FileType/SevenZip.cs @@ -2,6 +2,7 @@ using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using SharpCompress.Archives; using SharpCompress.Archives.SevenZip; using static BinaryObjectScanner.Utilities.Dictionary; @@ -11,8 +12,27 @@ namespace BurnOutSharp.FileType /// /// 7-zip archive /// - public class SevenZip : IScannable + public class SevenZip : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/TapeArchive.cs b/BurnOutSharp/FileType/TapeArchive.cs index 9faeb4d9..dbd312db 100644 --- a/BurnOutSharp/FileType/TapeArchive.cs +++ b/BurnOutSharp/FileType/TapeArchive.cs @@ -2,6 +2,7 @@ using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using SharpCompress.Archives; using SharpCompress.Archives.Tar; using static BinaryObjectScanner.Utilities.Dictionary; @@ -11,8 +12,27 @@ namespace BurnOutSharp.FileType /// /// Tape archive /// - public class TapeArchive : IScannable + public class TapeArchive : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/VBSP.cs b/BurnOutSharp/FileType/VBSP.cs index 289c2da2..9e76c43f 100644 --- a/BurnOutSharp/FileType/VBSP.cs +++ b/BurnOutSharp/FileType/VBSP.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using static BinaryObjectScanner.Utilities.Dictionary; namespace BurnOutSharp.FileType @@ -9,8 +10,27 @@ namespace BurnOutSharp.FileType /// /// Half-Life 2 Level /// - public class VBSP : IScannable + public class VBSP : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/VPK.cs b/BurnOutSharp/FileType/VPK.cs index e0ea0763..6071a909 100644 --- a/BurnOutSharp/FileType/VPK.cs +++ b/BurnOutSharp/FileType/VPK.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using static BinaryObjectScanner.Utilities.Dictionary; namespace BurnOutSharp.FileType @@ -9,8 +10,27 @@ namespace BurnOutSharp.FileType /// /// Valve Package File /// - public class VPK : IScannable + public class VPK : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/WAD.cs b/BurnOutSharp/FileType/WAD.cs index b33b9f71..e147b207 100644 --- a/BurnOutSharp/FileType/WAD.cs +++ b/BurnOutSharp/FileType/WAD.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using static BinaryObjectScanner.Utilities.Dictionary; namespace BurnOutSharp.FileType @@ -9,8 +10,27 @@ namespace BurnOutSharp.FileType /// /// Half-Life Texture Package File /// - public class WAD : IScannable + public class WAD : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/XZ.cs b/BurnOutSharp/FileType/XZ.cs index f16bf968..aad94596 100644 --- a/BurnOutSharp/FileType/XZ.cs +++ b/BurnOutSharp/FileType/XZ.cs @@ -2,6 +2,7 @@ using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using SharpCompress.Compressors.Xz; using static BinaryObjectScanner.Utilities.Dictionary; @@ -10,8 +11,27 @@ namespace BurnOutSharp.FileType /// /// xz archive /// - public class XZ : IScannable + public class XZ : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/FileType/XZP.cs b/BurnOutSharp/FileType/XZP.cs index 69c5a7f5..3852d5d3 100644 --- a/BurnOutSharp/FileType/XZP.cs +++ b/BurnOutSharp/FileType/XZP.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Concurrent; using System.IO; using BurnOutSharp.Interfaces; +using BinaryObjectScanner.Interfaces; using static BinaryObjectScanner.Utilities.Dictionary; namespace BurnOutSharp.FileType @@ -9,8 +10,27 @@ namespace BurnOutSharp.FileType /// /// XBox Package File /// - public class XZP : IScannable + public class XZP : IExtractable, IScannable { + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Implement from existing Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) {