bool CliInterface::extractFiles(const QVector<Archive::Entry*> &files, const QString &destinationDirectory, const ExtractionOptions &options) { qCDebug(ARK) << Q_FUNC_INFO << "to" << destinationDirectory; m_operationMode = Extract; m_extractionOptions = options; m_extractedFiles = files; m_extractDestDir = destinationDirectory; if (!m_cliProps->property("passwordSwitch").toString().isEmpty() && options.encryptedArchiveHint() && password().isEmpty()) { qCDebug(ARK) << "Password hint enabled, querying user"; if (!passwordQuery()) { return false; } } QUrl destDir = QUrl(destinationDirectory); QDir::setCurrent(destDir.adjusted(QUrl::RemoveScheme).url()); const bool useTmpExtractDir = options.isDragAndDropEnabled() || options.alwaysUseTempDir(); if (useTmpExtractDir) { // Create an hidden temp folder in the current directory. m_extractTempDir.reset(new QTemporaryDir(QStringLiteral(".%1-").arg(QCoreApplication::applicationName()))); qCDebug(ARK) << "Using temporary extraction dir:" << m_extractTempDir->path(); if (!m_extractTempDir->isValid()) { qCDebug(ARK) << "Creation of temporary directory failed."; emit finished(false); return false; } m_oldWorkingDir = QDir::currentPath(); destDir = QUrl(m_extractTempDir->path()); QDir::setCurrent(destDir.adjusted(QUrl::RemoveScheme).url()); } return runProcess(m_cliProps->property("extractProgram").toString(), m_cliProps->extractArgs(filename(), extractFilesList(files), options.preservePaths(), password())); }
HRESULT Win32GetUpdateConfig (const file_image_t& xmlImage, update_config_t *config ) { if (!config) { return (E_INVALIDARG); } config->updateDate.clear (); config->filesList.clear (); HRESULT _hr; CComPtr<IXMLDOMDocument> _pDoc; CComPtr<IXMLDOMNode> _pRootNode; try { _hr = CoCreateInstance (CLSID_DOMDocument,/*CLSID_DOMFreeThreadedDocument,*/ 0, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, reinterpret_cast<void **>(&_pDoc) ); if (FAILED (_hr)) { return (LIC_E_XML_PARSE_ERROR); } _hr = readXMLFromBuffer (_pDoc, xmlImage); if (FAILED (_hr)) { return (LIC_E_XML_PARSE_ERROR); } _hr = _pDoc->QueryInterface (IID_IXMLDOMNode, reinterpret_cast<void**> (&_pRootNode) ); if (FAILED (_hr)) { return (LIC_E_XML_PARSE_ERROR); } _hr = extractUpdateDate (_pRootNode, &config->updateDate); if (FAILED (_hr)) { return (LIC_E_XML_PARSE_ERROR); } _hr = extractFilesList (_pRootNode, &config->filesList); if (FAILED (_hr)) { return (LIC_E_XML_PARSE_ERROR); } file_info_list_t::iterator it (config->filesList.begin ()); file_info_list_t::iterator end (config->filesList.end ()); config->blackListFileName = _T (""); for (; it != end; ++it) { if (it->updateType == BlackListUpdateTypeName) { config->blackListFileName = it->name; break; } } } catch (...) { _hr = LIC_E_XML_PARSE_ERROR; } return (_hr); }