modules/libjar/zipwriter/src/nsZipWriter.h

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/modules/libjar/zipwriter/src/nsZipWriter.h	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,80 @@
     1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/.
     1.7 + */
     1.8 +
     1.9 +#ifndef _nsZipWriter_h_
    1.10 +#define _nsZipWriter_h_
    1.11 +
    1.12 +#include "nsIZipWriter.h"
    1.13 +#include "nsIFileStreams.h"
    1.14 +#include "nsIBufferedStreams.h"
    1.15 +#include "nsIRequestObserver.h"
    1.16 +#include "nsZipHeader.h"
    1.17 +#include "nsCOMPtr.h"
    1.18 +#include "nsCOMArray.h"
    1.19 +#include "nsTArray.h"
    1.20 +#include "nsDataHashtable.h"
    1.21 +#include "mozilla/Attributes.h"
    1.22 +
    1.23 +#define ZIPWRITER_CONTRACTID "@mozilla.org/zipwriter;1"
    1.24 +#define ZIPWRITER_CID { 0x430d416c, 0xa722, 0x4ad1, \
    1.25 +           { 0xbe, 0x98, 0xd9, 0xa4, 0x45, 0xf8, 0x5e, 0x3f } }
    1.26 +
    1.27 +#define OPERATION_ADD 0
    1.28 +#define OPERATION_REMOVE 1
    1.29 +struct nsZipQueueItem
    1.30 +{
    1.31 +public:
    1.32 +    uint32_t mOperation;
    1.33 +    nsCString mZipEntry;
    1.34 +    nsCOMPtr<nsIFile> mFile;
    1.35 +    nsCOMPtr<nsIChannel> mChannel;
    1.36 +    nsCOMPtr<nsIInputStream> mStream;
    1.37 +    PRTime mModTime;
    1.38 +    int32_t mCompression;
    1.39 +    uint32_t mPermissions;
    1.40 +};
    1.41 +
    1.42 +class nsZipWriter MOZ_FINAL : public nsIZipWriter,
    1.43 +                              public nsIRequestObserver
    1.44 +{
    1.45 +public:
    1.46 +    NS_DECL_ISUPPORTS
    1.47 +    NS_DECL_NSIZIPWRITER
    1.48 +    NS_DECL_NSIREQUESTOBSERVER
    1.49 +
    1.50 +    nsZipWriter();
    1.51 +    nsresult EntryCompleteCallback(nsZipHeader *aHeader, nsresult aStatus);
    1.52 +
    1.53 +private:
    1.54 +    ~nsZipWriter();
    1.55 +
    1.56 +    uint32_t mCDSOffset;
    1.57 +    bool mCDSDirty;
    1.58 +    bool mInQueue;
    1.59 +
    1.60 +    nsCOMPtr<nsIFile> mFile;
    1.61 +    nsCOMPtr<nsIRequestObserver> mProcessObserver;
    1.62 +    nsCOMPtr<nsISupports> mProcessContext;
    1.63 +    nsCOMPtr<nsIOutputStream> mStream;
    1.64 +    nsCOMArray<nsZipHeader> mHeaders;
    1.65 +    nsTArray<nsZipQueueItem> mQueue;
    1.66 +    nsDataHashtable<nsCStringHashKey, int32_t> mEntryHash;
    1.67 +    nsCString mComment;
    1.68 +
    1.69 +    nsresult SeekCDS();
    1.70 +    void Cleanup();
    1.71 +    nsresult ReadFile(nsIFile *aFile);
    1.72 +    nsresult InternalAddEntryDirectory(const nsACString & aZipEntry,
    1.73 +                                       PRTime aModTime, uint32_t aPermissions);
    1.74 +    nsresult BeginProcessingAddition(nsZipQueueItem* aItem, bool* complete);
    1.75 +    nsresult BeginProcessingRemoval(int32_t aPos);
    1.76 +    nsresult AddEntryStream(const nsACString & aZipEntry, PRTime aModTime,
    1.77 +                            int32_t aCompression, nsIInputStream *aStream,
    1.78 +                            bool aQueue, uint32_t aPermissions);
    1.79 +    void BeginProcessingNextItem();
    1.80 +    void FinishQueue(nsresult aStatus);
    1.81 +};
    1.82 +
    1.83 +#endif

mercurial