From 3f583916719eeef598d10a5d4e14ef14f008243b Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Tue, 11 May 2021 07:36:37 -0700 Subject: Merge Dtf --- .../IPackStreamContext.cs | 117 +++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 src/dtf/WixToolset.Dtf.Compression/IPackStreamContext.cs (limited to 'src/dtf/WixToolset.Dtf.Compression/IPackStreamContext.cs') diff --git a/src/dtf/WixToolset.Dtf.Compression/IPackStreamContext.cs b/src/dtf/WixToolset.Dtf.Compression/IPackStreamContext.cs new file mode 100644 index 00000000..19d77be5 --- /dev/null +++ b/src/dtf/WixToolset.Dtf.Compression/IPackStreamContext.cs @@ -0,0 +1,117 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolset.Dtf.Compression +{ + using System; + using System.IO; + using System.Diagnostics.CodeAnalysis; + + /// + /// This interface provides the methods necessary for the + /// to open and close streams for archives + /// and files. The implementor of this interface can use any kind of logic + /// to determine what kind of streams to open and where. + /// + public interface IPackStreamContext + { + /// + /// Gets the name of the archive with a specified number. + /// + /// The 0-based index of the archive + /// within the chain. + /// The name of the requested archive. May be an empty string + /// for non-chained archives, but may never be null. + /// The archive name is the name stored within the archive, used for + /// identification of the archive especially among archive chains. That + /// name is often, but not necessarily the same as the filename of the + /// archive package. + string GetArchiveName(int archiveNumber); + + /// + /// Opens a stream for writing an archive package. + /// + /// The 0-based index of the archive within + /// the chain. + /// The name of the archive that was returned + /// by . + /// True if the stream should be truncated when + /// opened (if it already exists); false if an existing stream is being + /// re-opened for writing additional data. + /// Instance of the compression engine + /// doing the operations. + /// A writable Stream where the compressed archive bytes will be + /// written, or null to cancel the archive creation. + /// + /// If this method returns null, the archive engine will throw a + /// FileNotFoundException. + /// + Stream OpenArchiveWriteStream( + int archiveNumber, + string archiveName, + bool truncate, + CompressionEngine compressionEngine); + + /// + /// Closes a stream where an archive package was written. + /// + /// The 0-based index of the archive within + /// the chain. + /// The name of the archive that was previously + /// returned by + /// . + /// A stream that was previously returned by + /// and is now ready to be closed. + /// + /// If there is another archive package in the chain, then after this stream + /// is closed a new stream will be opened. + /// + void CloseArchiveWriteStream(int archiveNumber, string archiveName, Stream stream); + + /// + /// Opens a stream to read a file that is to be included in an archive. + /// + /// The path of the file within the archive. This is often, + /// but not necessarily, the same as the relative path of the file outside + /// the archive. + /// Returned attributes of the opened file, to be + /// stored in the archive. + /// Returned last-modified time of the opened file, + /// to be stored in the archive. + /// A readable Stream where the file bytes will be read from before + /// they are compressed, or null to skip inclusion of the file and continue to + /// the next file. + [SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters")] + Stream OpenFileReadStream( + string path, + out FileAttributes attributes, + out DateTime lastWriteTime); + + /// + /// Closes a stream that has been used to read a file. + /// + /// The path of the file within the archive; the same as + /// the path provided + /// when the stream was opened. + /// A stream that was previously returned by + /// and is now ready to be closed. + void CloseFileReadStream(string path, Stream stream); + + /// + /// Gets extended parameter information specific to the compression + /// format being used. + /// + /// Name of the option being requested. + /// Parameters for the option; for per-file options, + /// the first parameter is typically the internal file path. + /// Option value, or null to use the default behavior. + /// + /// This method provides a way to set uncommon options during packaging, or a + /// way to handle aspects of compression formats not supported by the base library. + /// For example, this may be used by the zip compression library to + /// specify different compression methods/levels on a per-file basis. + /// The available option names, parameters, and expected return values + /// should be documented by each compression library. + /// + object GetOption(string optionName, object[] parameters); + } +} -- cgit v1.2.3-55-g6feb