示例#1
0
        public bool CheckErrors(out List <string> errorMessages)
        {
            this.errorMessages = errorMessages = new List <string>();
            foreach (ContentFile file in Files)
            {
                switch (file.Type)
                {
                case ContentType.ServerExecutable:
                case ContentType.None:
                case ContentType.Outpost:
                case ContentType.OutpostModule:
                case ContentType.Submarine:
                case ContentType.Wreck:
                case ContentType.BeaconStation:
                case ContentType.EnemySubmarine:
                    break;

                default:
                    try
                    {
                        using FileStream stream = File.Open(file.Path, System.IO.FileMode.Open, System.IO.FileAccess.Read);
                        using var reader        = XMLExtensions.CreateReader(stream);
                        XDocument.Load(reader);
                    }
                    catch (Exception e)
                    {
                        if (TextManager.Initialized)
                        {
                            errorMessages.Add(TextManager.GetWithVariables("xmlfileinvalid",
                                                                           new string[] { "[filepath]", "[errormessage]" },
                                                                           new string[] { file.Path, e.Message }));
                        }
                        else
                        {
                            errorMessages.Add($"XML File Invalid. PATH: {file.Path}, ERROR: {e.Message}");
#if DEBUG
                            throw;
#endif
                        }
                    }
                    break;
                }
            }

            if (IsCorePackage && !ContainsRequiredCorePackageFiles(out List <ContentType> missingContentTypes))
            {
                errorMessages.Add(TextManager.GetWithVariables("ContentPackageCantMakeCorePackage",
                                                               new string[2] {
                    "[packagename]", "[missingfiletypes]"
                },
                                                               new string[2] {
                    Name, string.Join(", ", missingContentTypes)
                },
                                                               new bool[2] {
                    false, true
                }));
            }
            VerifyFiles(out List <string> missingFileMessages);

            errorMessages.AddRange(missingFileMessages);
            hasErrors = errorMessages.Count > 0;
            return(!hasErrors.Value);
        }
示例#2
0
        public static XDocument OpenFile(string file, out Exception exception)
        {
            XDocument doc       = null;
            string    extension = "";

            exception = null;

            try
            {
                extension = System.IO.Path.GetExtension(file);
            }
            catch
            {
                //no file extension specified: try using the default one
                file += ".sub";
            }

            if (string.IsNullOrWhiteSpace(extension))
            {
                extension = ".sub";
                file     += ".sub";
            }

            if (extension == ".sub")
            {
                System.IO.Stream stream;
                try
                {
                    stream = SaveUtil.DecompressFiletoStream(file);
                }
                catch (System.IO.FileNotFoundException e)
                {
                    exception = e;
                    DebugConsole.ThrowError("Loading submarine \"" + file + "\" failed! (File not found) " + Environment.StackTrace.CleanupStackTrace(), e);
                    return(null);
                }
                catch (Exception e)
                {
                    exception = e;
                    DebugConsole.ThrowError("Loading submarine \"" + file + "\" failed!", e);
                    return(null);
                }

                try
                {
                    stream.Position = 0;
                    using (var reader = XMLExtensions.CreateReader(stream))
                    {
                        doc = XDocument.Load(reader);
                    }
                    stream.Close();
                    stream.Dispose();
                }

                catch (Exception e)
                {
                    exception = e;
                    DebugConsole.ThrowError("Loading submarine \"" + file + "\" failed! (" + e.Message + ")");
                    return(null);
                }
            }
            else if (extension == ".xml")
            {
                try
                {
                    ToolBox.IsProperFilenameCase(file);
                    using var stream = File.Open(file, System.IO.FileMode.Open, System.IO.FileAccess.Read);
                    using var reader = XMLExtensions.CreateReader(stream);
                    doc = XDocument.Load(reader);
                }
                catch (Exception e)
                {
                    exception = e;
                    DebugConsole.ThrowError("Loading submarine \"" + file + "\" failed! (" + e.Message + ")");
                    return(null);
                }
            }
            else
            {
                DebugConsole.ThrowError("Couldn't load submarine \"" + file + "! (Unrecognized file extension)");
                return(null);
            }

            return(doc);
        }