/// <summary>
        /// Creates the metadata.txt file for a list of updates to export.
        /// Copies update IDs and XML data to this file
        /// </summary>
        /// <param name="updatesToExport">The updates to export</param>
        /// <param name="metadataTextFile">Destination metadata file</param>
        private void WriteMetadataFile(List <Update> updatesToExport, string metadataTextFile)
        {
            // Each line in the metadata text file contains multiple lines of the following format:
            // <update GUID>,<update revision>,<xml size>,<xml>\r\n
            // There is one line for each update exported

            // Open the metadata file for writing
            using (var metadataFile = File.CreateText(metadataTextFile))
            {
                var allUpdates = new List <Update>(MetadataSource.GetCategories());
                allUpdates.AddRange(updatesToExport);

                var progress = new OperationProgress()
                {
                    CurrentOperation = OperationType.ExportUpdateXmlBlobProgress, Maximum = allUpdates.Count, Current = 0
                };
                foreach (var update in allUpdates)
                {
                    using (var metadataStream = MetadataSource.GetUpdateMetadataStream(update.Identity))
                    {
                        using (var metadataReader = new StreamReader(metadataStream))
                        {
                            var xmlData = metadataReader.ReadToEnd();

                            // Write one line with GUID, revision, XML length, XML data
                            metadataFile.WriteLine("{0},{1:x8},{2:x8},{3}", update.Identity.Raw.UpdateID, update.Identity.Raw.RevisionNumber, xmlData.Length, xmlData);
                        }
                    }

                    progress.Current += 1;
                    ExportProgress?.Invoke(this, progress);
                }
            }
        }
        /// <summary>
        /// Exports the specified updates from a local update metadata source to a format compatible with WSUS 2016
        /// </summary>
        /// <param name="updatesToExport">The updates to export. All categories from the source are also exported</param>
        /// <param name="exportFilePath">The export destination file (CAB)</param>
        public void Export(List <Update> updatesToExport, string exportFilePath)
        {
            var exportDirectory = Directory.GetParent(exportFilePath);

            if (!exportDirectory.Exists)
            {
                Directory.CreateDirectory(exportDirectory.FullName);
            }

            // Pack all XML blobs for updates to be exported into a flat text file
            var progress = new OperationProgress()
            {
                CurrentOperation = OperationType.ExportUpdateXmlBlobStart
            };

            ExportProgress?.Invoke(this, progress);

            var metadataFile = Path.Combine(exportDirectory.FullName, "metadata.txt");

            WriteMetadataFile(updatesToExport, metadataFile);

            progress.CurrentOperation = OperationType.ExportUpdateXmlBlobEnd;
            ExportProgress?.Invoke(this, progress);

            // Write metadata for all exported updates, languages and files
            progress.CurrentOperation = OperationType.ExportMetadataStart;
            ExportProgress?.Invoke(this, progress);

            var packageXmlFile = Path.Combine(exportDirectory.FullName, "package.xml");

            WritePackagesXml(updatesToExport, packageXmlFile);

            progress.CurrentOperation = OperationType.ExportMetadataEnd;
            ExportProgress?.Invoke(this, progress);

            // Add the above 2 files to a CAB archive
            progress.CurrentOperation = OperationType.CompressExportFileStart;
            ExportProgress?.Invoke(this, progress);

            var result = CabinetUtility.CompressFiles(new List <string>()
            {
                metadataFile, packageXmlFile
            }, exportFilePath);

            progress.CurrentOperation = OperationType.CompressExportFileEnd;
            ExportProgress?.Invoke(this, progress);

            // Delete temporary files
            if (File.Exists(metadataFile))
            {
                File.Delete(metadataFile);
            }

            if (File.Exists(packageXmlFile))
            {
                File.Delete(packageXmlFile);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Confirme l'export de la base.
        /// Si le fichier est déjà existant, on demande la confirmation avant de l'écraser.
        /// </summary>
        /// <param name="Sender">Non utilisé.</param>
        /// <param name="Event">Les données de l'événement de clique.</param>
        private void ExportCsvButton_Click(object Sender, EventArgs Event)
        {
            var Path = FileChoosedBox.Text;

            // Si le fichier existe, on demande la confirmation à l'utilisateur avant d'éventuellement l'écraser.
            if (File.Exists(Path))
            {
                var ConfirmResult = MessageBox.Show(
                    "Un fichier de ce nom existe déjà à cet emplacement, cette opération va l'écraser, " +
                    "voulez-vous continuer ?", "Confirmation",
                    MessageBoxButtons.YesNo);
                // Si l'utilisateur ne veut pas écraser le fichier existant, on annule.
                if (ConfirmResult != DialogResult.Yes)
                {
                    return;
                }
            }
            // On affiche la progression de l'export.
            using (var Writer = new StreamWriter(FileChoosedBox.Text, false, Encoding.Default))
            {
                Writer.WriteLine("Description;Ref;Marque;Famille;Sous-Famille;Prix H.T.");

                // On met la barre de chargement à 0 en mode pas à pas
                ExportProgress.Style   = ProgressBarStyle.Continuous;
                ExportProgress.Maximum = ArticleDao.Count();
                ExportProgress.Minimum = 0;
                ExportProgress.Value   = 0;

                var All = ArticleDao.GetAll();
                foreach (var Articles in ArticleDao.GetAll())
                {
                    Writer.WriteLine(
                        $"{Articles.Description};{Articles.RefArticle};{Articles.Marque.Nom};" +
                        $"{Articles.SubFamily.Family.Name};{Articles.SubFamily.Name};{Articles.Price}");
                    // Progression de la barre de chargement
                    ExportProgress.Value += 1;
                }
            }
            ExportProgress.Refresh();
            // On confirme à l'utilisateur que l'export est terminé.
            MessageBox.Show("Export terminé !", "Information", MessageBoxButtons.OK);
        }
Esempio n. 4
0
        public ExportCommands(string progressTitle)
        {
            config = ExportConfig.Load();
            if (EditorPrefs.HasKey("FFWD XNA dir " + PlayerSettings.productName))
            {
                xnaBaseDir = EditorPrefs.GetString("FFWD XNA dir " + PlayerSettings.productName);
                if (String.IsNullOrEmpty(xnaBaseDir))
                {
                    xnaBaseDir = "..\\XNA";
                }
            }
            if (EditorPrefs.HasKey("FFWD active group"))
            {
                activeGroup = EditorPrefs.GetInt("FFWD active group");
            }

            string configPath = Path.Combine(Application.dataPath, config.configSource);

            if (File.Exists(configPath))
            {
                resolver = TypeResolver.ReadConfiguration(configPath);
            }
            if (resolver == null)
            {
                Debug.LogWarning("We have no TypeResolver so we will not export any components");
            }

            assets            = new AssetHelper();
            assets.TextureDir = Path.Combine(xnaBaseDir, config.xnaAssets.TextureDir);
            assets.ScriptDir  = Path.Combine(xnaBaseDir, config.xnaAssets.ScriptDir);
            assets.MeshDir    = Path.Combine(xnaBaseDir, config.xnaAssets.MeshDir);
            assets.AudioDir   = Path.Combine(xnaBaseDir, config.xnaAssets.AudioDir);
            assets.XmlDir     = Path.Combine(xnaBaseDir, config.exportDir);

            progress = new ExportProgress()
            {
                Title = progressTitle
            };
        }
        private void HandleExportProgress(ExportProgress exportProgress)
        {
            string status = exportProgress.IsWriterDisposing ? "Сохранение файла." : null;

            UpdateProgressStatus(status, exportProgress.ItemsExported, exportProgress.FilesCreated);
        }
Esempio n. 6
0
 protected void OnExportProgress(ExportProgressArgs ea)
 {
     ExportProgress?.Invoke(this, ea);
 }
Esempio n. 7
0
        public ExportCommands(string progressTitle)
        {
            config = ExportConfig.Load();
            if (EditorPrefs.HasKey("FFWD XNA dir " + PlayerSettings.productName))
            {
                xnaBaseDir = EditorPrefs.GetString("FFWD XNA dir " + PlayerSettings.productName);
                if (String.IsNullOrEmpty(xnaBaseDir))
                {
                    xnaBaseDir = "..\\XNA";
                }
            }
            if (EditorPrefs.HasKey("FFWD active group"))
            {
                activeGroup = EditorPrefs.GetInt("FFWD active group");
            }

            string configPath = Path.Combine(Application.dataPath, config.configSource);
            if (File.Exists(configPath))
            {
                resolver = TypeResolver.ReadConfiguration(configPath);
            }
            if (resolver == null)
            {
                Debug.LogWarning("We have no TypeResolver so we will not export any components");
            }

            assets = new AssetHelper();
            assets.TextureDir = Path.Combine(xnaBaseDir, config.xnaAssets.TextureDir);
            assets.ScriptDir = Path.Combine(xnaBaseDir, config.xnaAssets.ScriptDir);
            assets.MeshDir = Path.Combine(xnaBaseDir, config.xnaAssets.MeshDir);
            assets.AudioDir = Path.Combine(xnaBaseDir, config.xnaAssets.AudioDir);
            assets.XmlDir = Path.Combine(xnaBaseDir, config.exportDir);

            progress = new ExportProgress() { Title = progressTitle };
        }
Esempio n. 8
0
 protected virtual void OnRowsCopied(DataExportArgs e)
 {
     ExportProgress?.Invoke(this, e);
 }
Esempio n. 9
0
        private void HandleExportProgress(ExportProgress exportProgress)
        {
            string status = exportProgress.IsWriterDisposing ? Localization.SavingFile : null;

            UpdateProgressStatus(status, exportProgress.ItemsExported, exportProgress.FilesCreated);
        }
Esempio n. 10
0
 private void Exporter_ExportProgress(object sender, OperationProgress e)
 {
     ExportProgress?.Invoke(this, e);
 }