| 
							- /*
 -   ==============================================================================
 - 
 -    This file is part of the JUCE library - "Jules' Utility Class Extensions"
 -    Copyright 2004-11 by Raw Material Software Ltd.
 - 
 -   ------------------------------------------------------------------------------
 - 
 -    JUCE can be redistributed and/or modified under the terms of the GNU General
 -    Public License (Version 2), as published by the Free Software Foundation.
 -    A copy of the license is included in the JUCE distribution, or can be found
 -    online at www.gnu.org/licenses.
 - 
 -    JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
 -    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 -    A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 - 
 -   ------------------------------------------------------------------------------
 - 
 -    To release a closed-source product which uses JUCE, commercial licenses are
 -    available: visit www.rawmaterialsoftware.com/juce for more information.
 - 
 -   ==============================================================================
 - */
 - 
 - #ifndef __JUCE_ZIPFILE_JUCEHEADER__
 - #define __JUCE_ZIPFILE_JUCEHEADER__
 - 
 - #include "../files/juce_File.h"
 - #include "../streams/juce_InputSource.h"
 - #include "../threads/juce_CriticalSection.h"
 - #include "../containers/juce_OwnedArray.h"
 - 
 - 
 - //==============================================================================
 - /**
 -     Decodes a ZIP file from a stream.
 - 
 -     This can enumerate the items in a ZIP file and can create suitable stream objects
 -     to read each one.
 - */
 - class JUCE_API  ZipFile
 - {
 - public:
 -     /** Creates a ZipFile based for a file. */
 -     explicit ZipFile (const File& file);
 - 
 -     //==============================================================================
 -     /** Creates a ZipFile for a given stream.
 - 
 -         @param inputStream                  the stream to read from
 -         @param deleteStreamWhenDestroyed    if set to true, the object passed-in
 -                                             will be deleted when this ZipFile object is deleted
 -     */
 -     ZipFile (InputStream* inputStream, bool deleteStreamWhenDestroyed);
 - 
 -     /** Creates a ZipFile for a given stream.
 -         The stream will not be owned or deleted by this class - if you want the ZipFile to
 -         manage the stream's lifetime, use the other constructor.
 -     */
 -     explicit ZipFile (InputStream& inputStream);
 - 
 -     /** Creates a ZipFile for an input source.
 - 
 -         The inputSource object will be owned by the zip file, which will delete
 -         it later when not needed.
 -     */
 -     explicit ZipFile (InputSource* inputSource);
 - 
 -     /** Destructor. */
 -     ~ZipFile();
 - 
 -     //==============================================================================
 -     /**
 -         Contains information about one of the entries in a ZipFile.
 - 
 -         @see ZipFile::getEntry
 -     */
 -     struct ZipEntry
 -     {
 -         /** The name of the file, which may also include a partial pathname. */
 -         String filename;
 - 
 -         /** The file's original size. */
 -         unsigned int uncompressedSize;
 - 
 -         /** The last time the file was modified. */
 -         Time fileTime;
 -     };
 - 
 -     //==============================================================================
 -     /** Returns the number of items in the zip file. */
 -     int getNumEntries() const noexcept;
 - 
 -     /** Returns a structure that describes one of the entries in the zip file.
 - 
 -         This may return zero if the index is out of range.
 - 
 -         @see ZipFile::ZipEntry
 -     */
 -     const ZipEntry* getEntry (int index) const noexcept;
 - 
 -     /** Returns the index of the first entry with a given filename.
 - 
 -         This uses a case-sensitive comparison to look for a filename in the
 -         list of entries. It might return -1 if no match is found.
 - 
 -         @see ZipFile::ZipEntry
 -     */
 -     int getIndexOfFileName (const String& fileName) const noexcept;
 - 
 -     /** Returns a structure that describes one of the entries in the zip file.
 - 
 -         This uses a case-sensitive comparison to look for a filename in the
 -         list of entries. It might return 0 if no match is found.
 - 
 -         @see ZipFile::ZipEntry
 -     */
 -     const ZipEntry* getEntry (const String& fileName) const noexcept;
 - 
 -     /** Sorts the list of entries, based on the filename.
 -     */
 -     void sortEntriesByFilename();
 - 
 -     //==============================================================================
 -     /** Creates a stream that can read from one of the zip file's entries.
 - 
 -         The stream that is returned must be deleted by the caller (and
 -         zero might be returned if a stream can't be opened for some reason).
 - 
 -         The stream must not be used after the ZipFile object that created
 -         has been deleted.
 -     */
 -     InputStream* createStreamForEntry (int index);
 - 
 -     /** Creates a stream that can read from one of the zip file's entries.
 - 
 -         The stream that is returned must be deleted by the caller (and
 -         zero might be returned if a stream can't be opened for some reason).
 - 
 -         The stream must not be used after the ZipFile object that created
 -         has been deleted.
 -     */
 -     InputStream* createStreamForEntry (ZipEntry& entry);
 - 
 -     //==============================================================================
 -     /** Uncompresses all of the files in the zip file.
 - 
 -         This will expand all the entries into a target directory. The relative
 -         paths of the entries are used.
 - 
 -         @param targetDirectory      the root folder to uncompress to
 -         @param shouldOverwriteFiles whether to overwrite existing files with similarly-named ones
 -         @returns success if the file is successfully unzipped
 -     */
 -     Result uncompressTo (const File& targetDirectory,
 -                          bool shouldOverwriteFiles = true);
 - 
 -     /** Uncompresses one of the entries from the zip file.
 - 
 -         This will expand the entry and write it in a target directory. The entry's path is used to
 -         determine which subfolder of the target should contain the new file.
 - 
 -         @param index                the index of the entry to uncompress - this must be a valid index
 -                                     between 0 and (getNumEntries() - 1).
 -         @param targetDirectory      the root folder to uncompress into
 -         @param shouldOverwriteFiles whether to overwrite existing files with similarly-named ones
 -         @returns success if all the files are successfully unzipped
 -     */
 -     Result uncompressEntry (int index,
 -                             const File& targetDirectory,
 -                             bool shouldOverwriteFiles = true);
 - 
 - 
 -     //==============================================================================
 -     /** Used to create a new zip file.
 - 
 -         Create a ZipFile::Builder object, and call its addFile() method to add some files,
 -         then you can write it to a stream with write().
 - 
 -         Currently this just stores the files with no compression.. That will be added
 -         soon!
 -     */
 -     class Builder
 -     {
 -     public:
 -         Builder();
 -         ~Builder();
 - 
 -         /** Adds a file while should be added to the archive.
 -             The file isn't read immediately, all the files will be read later when the writeToStream()
 -             method is called.
 - 
 -             The compressionLevel can be between 0 (no compression), and 9 (maximum compression).
 -             If the storedPathName parameter is specified, you can customise the partial pathname that
 -             will be stored for this file.
 -         */
 -         void addFile (const File& fileToAdd, int compressionLevel,
 -                       const String& storedPathName = String::empty);
 - 
 -         /** Generates the zip file, writing it to the specified stream.
 -             If the progress parameter is non-null, it will be updated with an approximate
 -             progress status between 0 and 1.0
 -         */
 -         bool writeToStream (OutputStream& target, double* progress) const;
 - 
 -         //==============================================================================
 -     private:
 -         class Item;
 -         friend class OwnedArray<Item>;
 -         OwnedArray<Item> items;
 - 
 -         JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Builder);
 -     };
 - 
 - private:
 -     //==============================================================================
 -     class ZipInputStream;
 -     class ZipEntryHolder;
 -     friend class ZipInputStream;
 -     friend class ZipEntryHolder;
 - 
 -     OwnedArray <ZipEntryHolder> entries;
 -     CriticalSection lock;
 -     InputStream* inputStream;
 -     ScopedPointer <InputStream> streamToDelete;
 -     ScopedPointer <InputSource> inputSource;
 - 
 -    #if JUCE_DEBUG
 -     struct OpenStreamCounter
 -     {
 -         OpenStreamCounter() : numOpenStreams (0) {}
 -         ~OpenStreamCounter();
 - 
 -         int numOpenStreams;
 -     };
 - 
 -     OpenStreamCounter streamCounter;
 -    #endif
 - 
 -     void init();
 - 
 -     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ZipFile);
 - };
 - 
 - #endif   // __JUCE_ZIPFILE_JUCEHEADER__
 
 
  |