/// <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, })); }
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; } }
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; }