1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// ArchiveOpenCallback.h
2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef __ARCHIVE_OPEN_CALLBACK_H
4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define __ARCHIVE_OPEN_CALLBACK_H
5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
6cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../../Common/MyCom.h"
7baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
8cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../../Windows/FileFind.h"
9baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
10baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef _NO_CRYPTO
11baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../../IPassword.h"
12baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif
13baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../../Archive/IArchive.h"
14baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
15baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifdef _NO_CRYPTO
16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define INTERFACE_IOpenCallbackUI_Crypto(x)
18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#else
20baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define INTERFACE_IOpenCallbackUI_Crypto(x) \
22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  virtual HRESULT Open_CryptoGetTextPassword(BSTR *password) x; \
23cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  virtual HRESULT Open_GetPasswordIfAny(bool &passwordIsDefined, UString &password) x; \
24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  virtual bool Open_WasPasswordAsked() x; \
25baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  virtual void Open_ClearPasswordWasAskedFlag() x; \
26baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif
28baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
29baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define INTERFACE_IOpenCallbackUI(x) \
30baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  virtual HRESULT Open_CheckBreak() x; \
31baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  virtual HRESULT Open_SetTotal(const UInt64 *files, const UInt64 *bytes) x; \
32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  virtual HRESULT Open_SetCompleted(const UInt64 *files, const UInt64 *bytes) x; \
33baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  INTERFACE_IOpenCallbackUI_Crypto(x)
34baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
35baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstruct IOpenCallbackUI
36baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
37baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  INTERFACE_IOpenCallbackUI(=0)
38baa3858d3f5d128a5c8466b700098109edcad5f2repo sync};
39baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
40baa3858d3f5d128a5c8466b700098109edcad5f2repo syncclass COpenCallbackImp:
41baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  public IArchiveOpenCallback,
42baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  public IArchiveOpenVolumeCallback,
43baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  public IArchiveOpenSetSubArchiveName,
44baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  #ifndef _NO_CRYPTO
45baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  public ICryptoGetTextPassword,
46baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  #endif
47baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  public CMyUnknownImp
48baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
49baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic:
50baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  #ifndef _NO_CRYPTO
51baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  MY_UNKNOWN_IMP3(
52baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      IArchiveOpenVolumeCallback,
53baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      ICryptoGetTextPassword,
54baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      IArchiveOpenSetSubArchiveName
55baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      )
56baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  #else
57baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  MY_UNKNOWN_IMP2(
58baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      IArchiveOpenVolumeCallback,
59baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      IArchiveOpenSetSubArchiveName
60baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      )
61baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  #endif
62baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
63baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  INTERFACE_IArchiveOpenCallback(;)
64baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  INTERFACE_IArchiveOpenVolumeCallback(;)
65baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
66baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  #ifndef _NO_CRYPTO
67baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(CryptoGetTextPassword)(BSTR *password);
68baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  #endif
69baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
70baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  STDMETHOD(SetSubArchiveName(const wchar_t *name))
71baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
72baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    _subArchiveMode = true;
73baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    _subArchiveName = name;
74cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    // TotalSize = 0;
75cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return S_OK;
76baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  }
77baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
78baa3858d3f5d128a5c8466b700098109edcad5f2repo syncprivate:
79cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  FString _folderPrefix;
80cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  NWindows::NFile::NFind::CFileInfo _fileInfo;
81baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  bool _subArchiveMode;
82baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  UString _subArchiveName;
83cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
84baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic:
85baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  UStringVector FileNames;
86cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CBoolVector FileNames_WasUsed;
87cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  CRecordVector<UInt64> FileSizes;
88cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky
89baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  IOpenCallbackUI *Callback;
90baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  CMyComPtr<IArchiveOpenCallback> ReOpenCallback;
91cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  // UInt64 TotalSize;
92baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
93baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  COpenCallbackImp(): Callback(NULL) {}
94cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  void Init(const FString &folderPrefix, const FString &fileName)
95baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
96baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    _folderPrefix = folderPrefix;
97baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    if (!_fileInfo.Find(_folderPrefix + fileName))
98cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky      throw 20121118;
99baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    FileNames.Clear();
100cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    FileNames_WasUsed.Clear();
101cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    FileSizes.Clear();
102baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    _subArchiveMode = false;
103cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    // TotalSize = 0;
104cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  }
105cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  bool SetSecondFileInfo(CFSTR newName)
106cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky  {
107cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky    return _fileInfo.Find(newName) && !_fileInfo.IsDir();
108baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  }
109baa3858d3f5d128a5c8466b700098109edcad5f2repo sync};
110baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
111baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif
112