コード例 #1
0
ファイル: cliinterface.cpp プロジェクト: KDE/ark
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()));
}
コード例 #2
0
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);

}