aboutsummaryrefslogtreecommitdiff
path: root/libs/archive/src/opencallback.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/archive/src/opencallback.h')
-rw-r--r--libs/archive/src/opencallback.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/libs/archive/src/opencallback.h b/libs/archive/src/opencallback.h
new file mode 100644
index 0000000..44367be
--- /dev/null
+++ b/libs/archive/src/opencallback.h
@@ -0,0 +1,75 @@
+/*
+Mod Organizer archive handling
+
+Copyright (C) 2012 Sebastian Herbord, 2020 MO2 Team. All rights reserved.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+This library 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
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef OPENCALLBACK_H
+#define OPENCALLBACK_H
+
+#include <filesystem>
+#include <string>
+
+#include <7zip/Archive/IArchive.h>
+#include <7zip/IPassword.h>
+
+#include "archive.h"
+#include "fileio.h"
+#include "unknown_impl.h"
+
+class CArchiveOpenCallback : public IArchiveOpenCallback,
+ public IArchiveOpenVolumeCallback,
+ public ICryptoGetTextPassword,
+ public IArchiveOpenSetSubArchiveName
+{
+
+ UNKNOWN_4_INTERFACE(IArchiveOpenCallback, IArchiveOpenVolumeCallback,
+ ICryptoGetTextPassword, IArchiveOpenSetSubArchiveName);
+
+public:
+ CArchiveOpenCallback(Archive::PasswordCallback passwordCallback,
+ Archive::LogCallback logCallback,
+ std::filesystem::path const& filepath);
+
+ virtual ~CArchiveOpenCallback() {}
+
+ const std::wstring& GetPassword() const { return m_Password; }
+
+ Z7_IFACE_COM7_IMP(IArchiveOpenCallback)
+ Z7_IFACE_COM7_IMP(IArchiveOpenVolumeCallback)
+
+ // ICryptoGetTextPassword interface
+ STDMETHOD(CryptoGetTextPassword)(BSTR* password) throw();
+ // Not implemented STDMETHOD(CryptoGetTextPassword2)(Int32 *passwordIsDefined, BSTR
+ // *password);
+
+ // IArchiveOpenSetSubArchiveName interface
+ STDMETHOD(SetSubArchiveName)(const wchar_t* name) throw();
+
+private:
+ Archive::PasswordCallback m_PasswordCallback;
+ Archive::LogCallback m_LogCallback;
+ std::wstring m_Password;
+
+ std::filesystem::path m_Path;
+ IO::FileInfo m_FileInfo;
+
+ bool m_SubArchiveMode;
+ std::wstring m_SubArchiveName;
+};
+
+#endif // OPENCALLBACK_H