From 7e3f04e669a8fbc05e64fe7bb2cf36267b6f1548 Mon Sep 17 00:00:00 2001 From: larvata Date: Mon, 22 Dec 2014 16:34:47 +0800 Subject: [PATCH] add entryExtractionEvent for stream --- .../Common/ReaderExtractionEventArgs.cs | 17 ++++++++++ SharpCompress/Reader/AbstractReader.cs | 31 +++++++++++++++++-- SharpCompress/Reader/IReader.cs | 3 ++ .../Reader/IReaderExtractionListener.cs | 16 ++++++++++ SharpCompress/SharpCompress.csproj | 4 ++- 5 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 SharpCompress/Common/ReaderExtractionEventArgs.cs create mode 100644 SharpCompress/Reader/IReaderExtractionListener.cs diff --git a/SharpCompress/Common/ReaderExtractionEventArgs.cs b/SharpCompress/Common/ReaderExtractionEventArgs.cs new file mode 100644 index 00000000..1820c49b --- /dev/null +++ b/SharpCompress/Common/ReaderExtractionEventArgs.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace SharpCompress.Common +{ + public class ReaderExtractionEventArgs:EventArgs + { + internal ReaderExtractionEventArgs(T entry) + { + Item = entry; + } + public T Item { get; private set; } + } +} diff --git a/SharpCompress/Reader/AbstractReader.cs b/SharpCompress/Reader/AbstractReader.cs index 1340cdfa..0c98e032 100644 --- a/SharpCompress/Reader/AbstractReader.cs +++ b/SharpCompress/Reader/AbstractReader.cs @@ -2,18 +2,20 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using SharpCompress.Archive; +using SharpCompress.Archive.Rar; using SharpCompress.Common; - #if PORTABLE using SharpCompress.Common.Rar.Headers; #endif +using SharpCompress.Reader.Rar; namespace SharpCompress.Reader { /// /// A generic push reader that reads unseekable comrpessed streams. /// - public abstract class AbstractReader : IReader, IExtractionListener + public abstract class AbstractReader : IReader, IReaderExtractionListener where TEntry : Entry where TVolume : Volume { @@ -21,9 +23,14 @@ namespace SharpCompress.Reader private IEnumerator entriesForCurrentReadStream; private bool wroteCurrentEntry; + public event EventHandler> EntryExtractionBegin; + public event EventHandler> EntryExtractionEnd; + public event EventHandler CompressedBytesRead; public event EventHandler FilePartExtractionBegin; + + internal AbstractReader(Options options, ArchiveType archiveType) { ArchiveType = archiveType; @@ -163,7 +170,11 @@ namespace SharpCompress.Reader throw new ArgumentNullException( "A writable Stream was required. Use Cancel if that was intended."); } + + var streamListener = this as IReaderExtractionListener; + streamListener.FireEntryExtractionBegin(this.Entry); Write(writableStream); + streamListener.FireEntryExtractionEnd(this.Entry); wroteCurrentEntry = true; } @@ -222,5 +233,21 @@ namespace SharpCompress.Reader }); } } + + void IReaderExtractionListener.FireEntryExtractionBegin(Entry entry) + { + if (EntryExtractionBegin!=null) + { + EntryExtractionBegin(this, new ReaderExtractionEventArgs(entry)); + } + } + + void IReaderExtractionListener.FireEntryExtractionEnd(Entry entry) + { + if (EntryExtractionEnd!=null) + { + EntryExtractionEnd(this, new ReaderExtractionEventArgs(entry)); + } + } } } \ No newline at end of file diff --git a/SharpCompress/Reader/IReader.cs b/SharpCompress/Reader/IReader.cs index 6fc2f5c5..769c1741 100644 --- a/SharpCompress/Reader/IReader.cs +++ b/SharpCompress/Reader/IReader.cs @@ -6,6 +6,9 @@ namespace SharpCompress.Reader { public interface IReader : IDisposable { + event EventHandler> EntryExtractionBegin; + event EventHandler> EntryExtractionEnd; + event EventHandler CompressedBytesRead; event EventHandler FilePartExtractionBegin; diff --git a/SharpCompress/Reader/IReaderExtractionListener.cs b/SharpCompress/Reader/IReaderExtractionListener.cs new file mode 100644 index 00000000..33ae423c --- /dev/null +++ b/SharpCompress/Reader/IReaderExtractionListener.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SharpCompress.Archive; +using SharpCompress.Common; + +namespace SharpCompress.Reader +{ + internal interface IReaderExtractionListener:IExtractionListener + { +// void EnsureEntriesLoaded(); + void FireEntryExtractionBegin(Entry entry); + void FireEntryExtractionEnd(Entry entry); + } +} diff --git a/SharpCompress/SharpCompress.csproj b/SharpCompress/SharpCompress.csproj index b20ff3da..d69a0aac 100644 --- a/SharpCompress/SharpCompress.csproj +++ b/SharpCompress/SharpCompress.csproj @@ -76,7 +76,7 @@ true - true + false SharpCompress.pfx @@ -133,6 +133,7 @@ + @@ -249,6 +250,7 @@ +