| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /*
- * innoextract.cpp, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #include "StdInc.h"
- #include "innoextract.h"
- #ifdef ENABLE_INNOEXTRACT
- #include "cli/extract.hpp"
- #include "setup/version.hpp"
- #endif
- QString Innoextract::extract(QString installer, QString outDir, std::function<void (float percent)> cb)
- {
- QString errorText{};
- #ifdef ENABLE_INNOEXTRACT
- ::extract_options o;
- o.extract = true;
- // standard settings
- o.gog_galaxy = true;
- o.codepage = 0U;
- o.output_dir = outDir.toStdString();
- o.extract_temp = true;
- o.extract_unknown = true;
- o.filenames.set_expand(true);
- o.preserve_file_times = true; // also correctly closes file -> without it: on Windows the files are not written completely
- try
- {
- process_file(installer.toStdString(), o, cb);
- }
- catch(const std::ios_base::failure & e)
- {
- errorText = tr("Stream error while extracting files!\nerror reason: ");
- errorText += e.what();
- }
- catch(const format_error & e)
- {
- errorText = e.what();
- }
- catch(const std::runtime_error & e)
- {
- errorText = e.what();
- }
- catch(const setup::version_error &)
- {
- errorText = tr("Not a supported Inno Setup installer!");
- }
- #else
- errorText = tr("VCMI was compiled without innoextract support, which is needed to extract exe files!");
- #endif
- return errorText;
- }
|