nsZipWriter.h (2165B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 */ 5 6 #ifndef _nsZipWriter_h_ 7 #define _nsZipWriter_h_ 8 9 #include "nsIZipWriter.h" 10 #include "nsIRequestObserver.h" 11 #include "nsZipHeader.h" 12 #include "nsCOMPtr.h" 13 #include "nsCOMArray.h" 14 #include "nsTArray.h" 15 #include "nsTHashMap.h" 16 17 #define ZIPWRITER_CONTRACTID "@mozilla.org/zipwriter;1" 18 #define ZIPWRITER_CID \ 19 {0x430d416c, 0xa722, 0x4ad1, {0xbe, 0x98, 0xd9, 0xa4, 0x45, 0xf8, 0x5e, 0x3f}} 20 21 #define OPERATION_ADD 0 22 #define OPERATION_REMOVE 1 23 struct nsZipQueueItem { 24 public: 25 uint32_t mOperation; 26 nsCString mZipEntry; 27 nsCOMPtr<nsIFile> mFile; 28 nsCOMPtr<nsIChannel> mChannel; 29 nsCOMPtr<nsIInputStream> mStream; 30 PRTime mModTime; 31 int32_t mCompression; 32 uint32_t mPermissions; 33 }; 34 35 class nsZipWriter final : public nsIZipWriter, public nsIRequestObserver { 36 public: 37 NS_DECL_ISUPPORTS 38 NS_DECL_NSIZIPWRITER 39 NS_DECL_NSIREQUESTOBSERVER 40 41 nsZipWriter(); 42 nsresult EntryCompleteCallback(nsZipHeader* aHeader, nsresult aStatus); 43 44 private: 45 ~nsZipWriter(); 46 47 uint32_t mCDSOffset; 48 bool mCDSDirty; 49 bool mInQueue; 50 51 nsCOMPtr<nsIFile> mFile; 52 nsCOMPtr<nsIRequestObserver> mProcessObserver; 53 nsCOMPtr<nsISupports> mProcessContext; 54 nsCOMPtr<nsIOutputStream> mStream; 55 nsCOMArray<nsZipHeader> mHeaders; 56 nsTArray<nsZipQueueItem> mQueue; 57 nsTHashMap<nsCStringHashKey, int32_t> mEntryHash; 58 nsCString mComment; 59 60 nsresult SeekCDS(); 61 void Cleanup(); 62 nsresult ReadFile(nsIFile* aFile); 63 nsresult InternalAddEntryDirectory(const nsACString& aZipEntry, 64 PRTime aModTime, uint32_t aPermissions); 65 nsresult BeginProcessingAddition(nsZipQueueItem* aItem, bool* complete); 66 nsresult BeginProcessingRemoval(int32_t aPos); 67 nsresult AddEntryStream(const nsACString& aZipEntry, PRTime aModTime, 68 int32_t aCompression, nsIInputStream* aStream, 69 bool aQueue, uint32_t aPermissions); 70 void BeginProcessingNextItem(); 71 void FinishQueue(nsresult aStatus); 72 }; 73 74 #endif