Exemplo n.º 1
0
        public void ExportToZip()
        {
            using (ExportProgressDialog progress = new ExportProgressDialog())
            {
                Campaign campaign = UpdateWorkingstate(false);

                if (!campaign.Validate(Editor.current_path, out List <string> missingfiles))
                {
                    ShowMissingFiles(missingfiles);
                    return;
                }

                using (SaveFileDialog dlg = new SaveFileDialog())
                {
                    dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
                    dlg.Filter           = Constants.ExportDialogFilter;
                    dlg.FilterIndex      = 0;
                    dlg.RestoreDirectory = true;
                    dlg.OverwritePrompt  = true;

                    if (dlg.ShowDialog() == DialogResult.OK)
                    {
                        progress.ShowAndRunRoutine(dlg, campaign, CreateZipFile);
                    }
                }
                progress.Close();

                Globals.MainWindow.Show();
            }
        }
Exemplo n.º 2
0
        public void CreateZipFile(SaveFileDialog dlg, Campaign campaign, ExportProgressDialog progress)
        {
            if (File.Exists(dlg.FileName))
            {
                File.Delete(dlg.FileName);
            }

            using (FileStream zip = File.Create(dlg.FileName))
            {
                using (IWriter zip_writer = WriterFactory.Open(zip, ArchiveType.Zip, Constants.COMPRESSION_MODE))
                {
                    void UpdateProgress(bool increment = false)
                    {
                        if (increment)
                        {
                            progress.IncrementProgress();
                        }
                        progress.SetTitle($"Exporting campaign \"{campaign.name}\"...");
                    }

                    List <string> files = campaign.IncludedFiles(Editor.current_path);

                    progress.SetMaxProgress(files.Count + 1);
                    progress.SetProgress(0);

                    UpdateProgress();

                    progress.SetStatus("Writing manifest...");

                    string manifest_data = JsonConvert.SerializeObject(new Manifest()
                    {
                        guid        = campaign.guid,
                        build       = campaign.build,
                        name        = campaign.name,
                        description = campaign.description,
                        authors     = campaign.authors,
                        useaddons   = campaign.addons.Count > 0,
                        levels      = campaign.levels.Count,
                        logo        = $"data/{campaign.logopath}"
                    }, Formatting.Indented);

                    using (Stream manifest_stream = manifest_data.GetStream())
                    {
                        zip_writer.Write("manifest", manifest_stream);
                    }

                    UpdateProgress(true);

                    foreach (string file in files)
                    {
                        progress.SetStatus($"Encoding file \"{file}\"...");

                        FileInfo include = new FileInfo(Path.Combine(Editor.current_path, file));

                        zip_writer.Write($"data/{file}", include);

                        using (Stream checksum = include.GetMD5().GetStream())
                        {
                            zip_writer.Write($".check/{file}.md5", checksum);
                        }

                        UpdateProgress(true);
                    }

                    progress.SetStatus($"Finishing...");
                    const string readme = "Don't modify the content of this archive manually or it might not work anymore!";

                    using (Stream readme_stream = readme.GetStream())
                    {
                        zip_writer.Write("readme.txt", readme_stream);
                    }
                }
            }
        }