Beispiel #1
0
 /// <summary>
 /// Adds a symbol to the section with cab name template filled in.
 /// </summary>
 /// <param name="mediaTable"></param>
 /// <param name="cabIndex"></param>
 /// <returns></returns>
 private MediaSymbol AddMediaSymbol(WixMediaTemplateSymbol mediaTemplateSymbol, int cabIndex)
 {
     return(this.Section.AddSymbol(new MediaSymbol(mediaTemplateSymbol.SourceLineNumbers, new Identifier(AccessModifier.Private, cabIndex))
     {
         DiskId = cabIndex,
         Cabinet = String.Format(CultureInfo.InvariantCulture, this.CabinetNameTemplate, cabIndex),
         CompressionLevel = mediaTemplateSymbol.CompressionLevel,
     }));
 }
Beispiel #2
0
        public void Execute()
        {
            var mediaSymbols         = this.Section.Symbols.OfType <MediaSymbol>().ToList();
            var mediaTemplateSymbols = this.Section.Symbols.OfType <WixMediaTemplateSymbol>().ToList();

            // If both symbols are authored, it is an error.
            if (mediaTemplateSymbols.Count > 0 && mediaSymbols.Count > 1)
            {
                throw new WixException(ErrorMessages.MediaTableCollision(null));
            }

            // If neither symbol is authored, default to a media template.
            if (SectionType.Product == this.Section.Type && mediaTemplateSymbols.Count == 0 && mediaSymbols.Count == 0)
            {
                var mediaTemplate = new WixMediaTemplateSymbol()
                {
                    CabinetTemplate = "cab{0}.cab",
                };

                this.Section.AddSymbol(mediaTemplate);
                mediaTemplateSymbols.Add(mediaTemplate);
            }

            // When building merge module, all the files go to "#MergeModule.CABinet".
            if (SectionType.Module == this.Section.Type)
            {
                var mergeModuleMediaSymbol = this.Section.AddSymbol(new MediaSymbol
                {
                    Cabinet = "#MergeModule.CABinet",
                });

                this.FileFacadesByCabinetMedia = new Dictionary <MediaSymbol, IEnumerable <IFileFacade> >
                {
                    { mergeModuleMediaSymbol, this.FileFacades }
                };

                this.UncompressedFileFacades = Array.Empty <IFileFacade>();
            }
            else
            {
                var filesByCabinetMedia = new Dictionary <MediaSymbol, List <IFileFacade> >();
                var uncompressedFiles   = new List <IFileFacade>();

                if (mediaTemplateSymbols.Count > 0)
                {
                    this.AutoAssignFiles(mediaTemplateSymbols, mediaSymbols, filesByCabinetMedia, uncompressedFiles);
                }
                else
                {
                    this.ManuallyAssignFiles(mediaSymbols, filesByCabinetMedia, uncompressedFiles);
                }

                this.FileFacadesByCabinetMedia = filesByCabinetMedia.ToDictionary(kvp => kvp.Key, kvp => (IEnumerable <IFileFacade>)kvp.Value);

                this.UncompressedFileFacades = uncompressedFiles;
            }
        }
Beispiel #3
0
        private Dictionary <string, string> lastCabinetAddedToMediaTable; // Key is First Cabinet Name, Value is Last Cabinet Added in the Split Sequence

        public CreateCabinetsCommand(IWixToolsetServiceProvider serviceProvider, IBackendHelper backendHelper, WixMediaTemplateSymbol mediaTemplate)
        {
            this.fileTransfers = new List <IFileTransfer>();

            this.trackedFiles = new List <ITrackedFile>();

            this.newCabNamesCallBack = this.NewCabNamesCallBack;

            this.ServiceProvider = serviceProvider;

            this.BackendHelper = backendHelper;

            this.MediaTemplate = mediaTemplate;
        }