Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        // ----------------------------------------------------------------------------------------------

        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);
        }
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
        /// <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);
        }