static void Main(string[] args) { string errorText; if (!InitializationChores(args, out errorText)) { Console.WriteLine($"ERROR: {errorText}"); return; } Console.WriteLine($"Temp path: {_tempPath}"); Console.WriteLine($"Entity Path: {_diskEntity}"); StringReportWriter writer = new StringReportWriter(); IDiskEntity entity = DiskEntityHelper.GetEntity(_diskEntity, null, writer); Console.WriteLine($"Entity Type: {entity.DiskEntityType}"); bool result = entity.CheckEntity(_processingFlags); Console.WriteLine($"CheckEntity() result: {result}"); string output = entity.ToString(); Console.WriteLine(writer.Text); Console.WriteLine("-------------"); Console.Write("Press for finish"); Console.ReadKey(); }
// ---------------------------------------------------------------------------------------------- public static IDiskEntity GetEntity(string pEntityPath, string pArchivedPath, IReportWriter pReportWriter) { IDiskEntity diskEntity = null; if (pReportWriter == null) { pReportWriter = new NullReportWriter(); } switch (DiskEntityBase.GetEntityType(pEntityPath)) { case DiskEntityType.Folder: diskEntity = new DiskEntityFolder(pEntityPath, pArchivedPath, pReportWriter); break; case DiskEntityType.AddonFolder: diskEntity = new DiskEntityAddonFolder(pEntityPath, pArchivedPath, pReportWriter); break; case DiskEntityType.Archive: diskEntity = new DiskEntityArchive(pEntityPath, pArchivedPath, pReportWriter); break; case DiskEntityType.SketchupFile: diskEntity = new DiskEntitySketchup(pEntityPath, pArchivedPath, pReportWriter); break; case DiskEntityType.AddonFile: diskEntity = new DiskEntityAddon(pEntityPath, pArchivedPath, pReportWriter); break; } return(diskEntity); }
public void InitializeDatabase() { Addons = null; List <string> files = new List <string>(); foreach (string folder in Directory.EnumerateDirectories(_moviestormPaths.ContentPacksPath, "*", SearchOption.TopDirectoryOnly)) { files.Add(folder); } string moddersWorkshop = Path.Combine(_moviestormPaths.AddonsPath, "ModdersWorkshop").ToLower(); foreach (string folder in Directory.EnumerateDirectories(_moviestormPaths.AddonsPath, "*", SearchOption.TopDirectoryOnly)) { if (folder.ToLower() != moddersWorkshop) { files.Add(folder); } } ProcessingFlags processingFlags = ProcessingFlags.AppendToAddonPackageSet | ProcessingFlags.AppendToAddonPackageSetForceRefresh; foreach (string argument in files) { IDiskEntity asset = DiskEntityHelper.GetEntity(argument, null, new NullReportWriter()); if (asset == null) { continue; } asset.CheckEntity(processingFlags); } LastUpdate = DateTime.Now; }
/// <summary> /// Checks files inside the archive /// </summary> /// <param name="pProcessingFlags">Processing flags</param> /// <param name="pArchiver">Archiver used to manage the archive contents</param> /// <param name="pArchiveEntryList">Full information about files in archive</param> /// <param name="pFileList">List of files inside the archive</param> /// <param name="pReport">Output text</param> /// <returns>Result of check</returns> private bool CheckFiles(ProcessingFlags pProcessingFlags, SevenZipArchiver pArchiver, List <ArchiveFileInfo> pArchiveEntryList, List <string> pFileList, out string pReport) { // bool reportOnlyIssues = pProcessingFlags.HasFlag(ProcessingFlags.JustReportIssues); // bool showAddonContents = pProcessingFlags.HasFlag(ProcessingFlags.ShowAddonContents); string rootTempPath = Utils.GetTempDirectory(); pArchiver.ArchivedFilesExtract(rootTempPath, pFileList); string currentPath = Utils.GetExecutableDirectory(); Directory.SetCurrentDirectory(rootTempPath); pReport = null; try { foreach (string fileName in pFileList) { string extension = Path.GetExtension(fileName)?.Trim().ToLower(); bool isAddonFile = false; if (extension == ".addon") { if (fileName.ToLower() == ".addon") { string rootFolder; if (!InsideArchive && pProcessingFlags.HasFlag(ProcessingFlags.CorrectDisguisedFiles) && IsValidAddon(pArchiveEntryList, false, out rootFolder)) { string errorText; string newAddonFile = AddonPersistenceUtils.CorrectAddonFile(pArchiver, pProcessingFlags.HasFlag(ProcessingFlags.CorrectDisguisedFilesDeleteSource), null, out errorText); if (newAddonFile == null) { pReport = $" {ErrorTokenString} Possibly an Addon file disguised as an archive. Failed to restore: {errorText}"; return(false); } pReport = $" Addon file disguised as an archive. Restored: {Path.GetFileName(newAddonFile)}"; return(true); } else { pReport = $" {ErrorTokenString} Possibly an Addon file disguised as an archive"; return(false); } } if (fileName.ToLower().EndsWith(@"\.addon")) { string rootFolder; if (!InsideArchive && pProcessingFlags.HasFlag(ProcessingFlags.CorrectDisguisedFiles) && IsValidAddon(pArchiveEntryList, true, out rootFolder)) { string errorText; string newAddonFile = AddonPersistenceUtils.CorrectAddonFile(pArchiver, pProcessingFlags.HasFlag(ProcessingFlags.CorrectDisguisedFilesDeleteSource), rootFolder, out errorText); if (newAddonFile == null) { pReport = $" {ErrorTokenString} Possibly an Addon file disguised as an archive. Failed to restore: {errorText}"; return(false); } pReport = $" Addon file disguised as an archive. Restored: {Path.GetFileName(newAddonFile)}"; return(true); } else { pReport = $" {ErrorTokenString} Possibly an Addon file disguised as an archive, with a root directory"; return(false); } } isAddonFile = true; } string archivedPath = $"{AbsolutePath}#{fileName}"; IDiskEntity diskEntity = isAddonFile ? new DiskEntityAddon(fileName, archivedPath, ReportWriter) : (IDiskEntity) new DiskEntitySketchup(fileName, archivedPath, ReportWriter); diskEntity.CheckEntity(pProcessingFlags); File.Delete(fileName); } } catch { } finally { Directory.SetCurrentDirectory(currentPath); } return(true); }