From 409eca887ae7876c441b2848d9f76c5b7b409928 Mon Sep 17 00:00:00 2001 From: Soyoung Kim Date: Tue, 4 Jun 2013 17:58:06 +0900 Subject: [PATCH] clean up unzip. phase 1 [Issue#] N/A [Problem] N/A [Cause] N/A [Solution] remove unzip task to class. [SCMRequest] N/A Change-Id: Ibb6e946ae0606a38964ab481de7424bdcaf321b2 --- src/CMakeLists.txt | 2 +- src/jobs/widget_install/job_widget_install.cpp | 186 +++------------------ src/jobs/widget_install/job_widget_install.h | 6 +- .../{task_unzip.cpp => widget_unzip.cpp} | 101 +++++------ .../{task_unzip.h => widget_unzip.h} | 39 ++--- 5 files changed, 78 insertions(+), 256 deletions(-) rename src/jobs/widget_install/{task_unzip.cpp => widget_unzip.cpp} (73%) rename src/jobs/widget_install/{task_unzip.h => widget_unzip.h} (57%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4eda17b..724787d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -62,7 +62,6 @@ SET(INSTALLER_SOURCES ${INSTALLER_JOBS}/widget_install/job_widget_install.cpp ${INSTALLER_JOBS}/widget_install/manifest.cpp ${INSTALLER_JOBS}/widget_install/task_commons.cpp - ${INSTALLER_JOBS}/widget_install/task_unzip.cpp ${INSTALLER_JOBS}/widget_install/task_widget_config.cpp ${INSTALLER_JOBS}/widget_install/task_database.cpp ${INSTALLER_JOBS}/widget_install/ace_registration.cpp @@ -82,6 +81,7 @@ SET(INSTALLER_SOURCES ${INSTALLER_JOBS}/widget_install/wac_security.cpp ${INSTALLER_JOBS}/widget_install/widget_update_info.cpp ${INSTALLER_JOBS}/widget_install/directory_api.cpp + ${INSTALLER_JOBS}/widget_install/widget_unzip.cpp ${INSTALLER_JOBS}/widget_uninstall/job_widget_uninstall.cpp ${INSTALLER_JOBS}/widget_uninstall/task_check.cpp ${INSTALLER_JOBS}/widget_uninstall/task_remove_files.cpp diff --git a/src/jobs/widget_install/job_widget_install.cpp b/src/jobs/widget_install/job_widget_install.cpp index 18dbe33..309a546 100644 --- a/src/jobs/widget_install/job_widget_install.cpp +++ b/src/jobs/widget_install/job_widget_install.cpp @@ -67,13 +67,13 @@ #include #include #include -#include #include #include #include #include #include +#include using namespace WrtDB; using namespace Jobs::Exceptions; @@ -167,7 +167,7 @@ JobWidgetInstall::JobWidgetInstall( m_exceptionCaught(Jobs::Exceptions::Success) { m_installerContext.mode = m_jobStruct.m_installMode; - ConfigureResult result = PrePareInstallation(widgetPath); + ConfigureResult result = prepareInstallation(widgetPath); if (result == ConfigureResult::Ok) { LogInfo("Configure installation succeeded"); @@ -175,16 +175,6 @@ JobWidgetInstall::JobWidgetInstall( AddTask(new TaskRecovery(m_installerContext)); - // Create installation tasks - if (m_installerContext.widgetConfig.packagingType != - WrtDB::PKG_TYPE_DIRECTORY_WEB_APP && - m_installerContext.widgetConfig.packagingType != - WrtDB::PKG_TYPE_HOSTED_WEB_APP && - !m_isDRM) - { - AddTask(new TaskUnzip(m_installerContext)); - } - AddTask(new TaskWidgetConfig(m_installerContext)); if (m_installerContext.widgetConfig.packagingType == WrtDB::PKG_TYPE_HOSTED_WEB_APP) @@ -218,15 +208,6 @@ JobWidgetInstall::JobWidgetInstall( AddTask(new TaskPrepareReinstall(m_installerContext)); } - if (m_installerContext.widgetConfig.packagingType != - WrtDB::PKG_TYPE_HOSTED_WEB_APP && - m_installerContext.widgetConfig.packagingType != - WrtDB::PKG_TYPE_DIRECTORY_WEB_APP && - !m_isDRM) - { - AddTask(new TaskUnzip(m_installerContext)); - } - AddTask(new TaskWidgetConfig(m_installerContext)); if (m_installerContext.widgetConfig.packagingType == @@ -272,7 +253,7 @@ JobWidgetInstall::JobWidgetInstall( } } -ConfigureResult JobWidgetInstall::PrePareInstallation( +ConfigureResult JobWidgetInstall::prepareInstallation( const std::string &widgetPath) { ConfigureResult result; @@ -298,18 +279,12 @@ ConfigureResult JobWidgetInstall::PrePareInstallation( Jobs::WidgetInstall::createTempPath( m_installerContext.mode.rootPath == InstallMode::RootPath::RO); - } - - m_isDRM = isDRMWidget(widgetPath); - if (true == m_isDRM) { - LogDebug("decrypt DRM widget"); - if (DecryptDRMWidget(widgetPath, tempDir)) { - LogDebug("Failed decrypt DRM widget"); - return ConfigureResult::Failed_DrmError; - } + WidgetUnzip wgtUnzip; + wgtUnzip.unzipWgtFile(widgetPath, tempDir); } LogDebug("widgetPath:" << widgetPath); + LogDebug("tempPath:" << tempDir); m_installerContext.widgetConfig.packagingType = checkPackageType(widgetPath, tempDir); @@ -317,7 +292,6 @@ ConfigureResult JobWidgetInstall::PrePareInstallation( widgetPath, tempDir, m_installerContext.widgetConfig.packagingType, - m_isDRM, m_installerContext.mode.command == InstallMode::Command::REINSTALL); LogDebug("widget packaging type : " << m_installerContext.widgetConfig.packagingType.pkgType); @@ -648,7 +622,6 @@ ConfigParserData JobWidgetInstall::getWidgetDataFromXML( const std::string &widgetSource, const std::string &tempPath, WrtDB::PackagingType pkgType, - bool isDRM, bool isReinstall) { // Parse config @@ -686,78 +659,26 @@ ConfigParserData JobWidgetInstall::getWidgetDataFromXML( configInfo, DPL::FromUTF32String(L"widget")))); } else { - if (!isDRM) { - std::unique_ptr zipFile( - new DPL::ZipInput(widgetSource)); - - std::unique_ptr configFile; - - // Open config.xml file - if (pkgType == PKG_TYPE_HYBRID_WEB_APP) { - configFile.reset(zipFile->OpenFile(WITH_OSP_XML)); - } else { - configFile.reset(zipFile->OpenFile(CONFIG_XML)); - } - - // Extract config - DPL::BinaryQueue buffer; - DPL::AbstractWaitableInputAdapter inputAdapter(configFile.get()); - DPL::AbstractWaitableOutputAdapter outputAdapter(&buffer); - DPL::Copy(&inputAdapter, &outputAdapter); - parser.Parse(&buffer, - ElementParserPtr( - new RootParser(configInfo, - DPL:: - FromUTF32String( - L"widget")))); + std::string configFile; + if (pkgType == PKG_TYPE_HYBRID_WEB_APP) { + configFile = tempPath + "/" + WITH_OSP_XML; } else { - // DRM widget - std::string configFile; - if (pkgType == PKG_TYPE_HYBRID_WEB_APP) { - configFile = tempPath + "/" + WITH_OSP_XML; - } else { - configFile = tempPath + "/" + CONFIG_XML; - } - - parser.Parse(configFile, - ElementParserPtr( - new RootParser(configInfo, - DPL:: - FromUTF32String( - L"widget")))); + configFile = tempPath + "/" + CONFIG_XML; } + + parser.Parse(configFile, + ElementParserPtr( + new RootParser(configInfo, + DPL:: + FromUTF32String( + L"widget")))); } } - Catch(DPL::ZipInput::Exception::OpenFailed) - { - LogError("Failed to open widget package"); - return ConfigParserData(); - } - Catch(DPL::ZipInput::Exception::OpenFileFailed) - { - LogError("Failed to open config.xml file"); - return ConfigParserData(); - } - Catch(DPL::CopyFailed) - { - LogError("Failed to extract config.xml file"); - return ConfigParserData(); - } - Catch(DPL::FileInput::Exception::OpenFailed) - { - LogError("Failed to open config.xml file"); - return ConfigParserData(); - } Catch(ElementParser::Exception::ParseError) { LogError("Failed to parse config.xml file"); return ConfigParserData(); } - Catch(DPL::ZipInput::Exception::SeekFileFailed) - { - LogError("Failed to seek widget archive - corrupted package?"); - return ConfigParserData(); - } Catch(WidgetDAOReadOnly::Exception::WidgetNotExist) { LogError("Failed to find installed widget - give proper tizenId"); @@ -972,60 +893,14 @@ WrtDB::PackagingType JobWidgetInstall::checkPackageType( return PKG_TYPE_HOSTED_WEB_APP; } - if (m_isDRM) { - std::string configFile = tempPath + "/" + CONFIG_XML; - if (WrtUtilFileExists(configFile)) { - return PKG_TYPE_NOMAL_WEB_APP; - } - - configFile = tempPath + "/" + WITH_OSP_XML; - if (WrtUtilFileExists(configFile)) { - return PKG_TYPE_HYBRID_WEB_APP; - } - } else { - std::unique_ptr zipFile; - - Try - { - // Open zip file - zipFile.reset(new DPL::ZipInput(widgetSource)); - } - Catch(DPL::ZipInput::Exception::OpenFailed) - { - LogDebug("Failed to open widget package"); - return PKG_TYPE_UNKNOWN; - } - Catch(DPL::ZipInput::Exception::SeekFileFailed) - { - LogError("Failed to seek widget package file"); - return PKG_TYPE_UNKNOWN; - } - - Try - { - // Open config.xml file in package root - std::unique_ptr configFile( - zipFile->OpenFile(CONFIG_XML)); - return PKG_TYPE_NOMAL_WEB_APP; - } - Catch(DPL::ZipInput::Exception::OpenFileFailed) - { - LogDebug("Could not find config.xml"); - } - - Try - { - // Open config.xml file in package root - std::unique_ptr configFile( - zipFile->OpenFile(WITH_OSP_XML)); + std::string configFile = tempPath + "/" + CONFIG_XML; + if (WrtUtilFileExists(configFile)) { + return PKG_TYPE_NOMAL_WEB_APP; + } - return PKG_TYPE_HYBRID_WEB_APP; - } - Catch(DPL::ZipInput::Exception::OpenFileFailed) - { - LogDebug("Could not find wgt/config.xml"); - return PKG_TYPE_UNKNOWN; - } + configFile = tempPath + "/" + WITH_OSP_XML; + if (WrtUtilFileExists(configFile)) { + return PKG_TYPE_HYBRID_WEB_APP; } return PKG_TYPE_UNKNOWN; @@ -1110,19 +985,6 @@ void JobWidgetInstall::setInstallLocationType( } } -bool JobWidgetInstall::isDRMWidget(std::string /*widgetPath*/) -{ - /* TODO */ - return false; -} - -bool JobWidgetInstall::DecryptDRMWidget(std::string /*widgetPath*/, - std::string /*destPath*/) -{ - /* TODO */ - return false; -} - bool JobWidgetInstall::checkSupportRDSUpdate(const WrtDB::ConfigParserData &configInfo) { diff --git a/src/jobs/widget_install/job_widget_install.h b/src/jobs/widget_install/job_widget_install.h index 909c0ee..2afcae1 100644 --- a/src/jobs/widget_install/job_widget_install.h +++ b/src/jobs/widget_install/job_widget_install.h @@ -65,7 +65,6 @@ class JobWidgetInstall : std::string m_exceptionMessage; WidgetUpdateInfo m_widgetUpdateInfo; bool m_needEncryption; - bool m_isDRM; ConfigureResult ConfigureInstallation(const std::string &widgetSource, const WrtDB::ConfigParserData @@ -75,7 +74,6 @@ class JobWidgetInstall : const std::string &widgetSource, const std::string &tempPath, WrtDB::PackagingType pkgType, - bool isDRM, bool isReinstall); static WidgetUpdateInfo detectWidgetUpdate( const WrtDB::ConfigParserData &configInfo, @@ -91,9 +89,7 @@ class JobWidgetInstall : bool detectResourceEncryption(const WrtDB::ConfigParserData &configData); void setInstallLocationType(const WrtDB::ConfigParserData &configData); - bool isDRMWidget(std::string widgetPath); - bool DecryptDRMWidget(std::string widgetPath, std::string destPath); - ConfigureResult PrePareInstallation(const std::string &widgetPath); + ConfigureResult prepareInstallation(const std::string &widgetPath); bool validateTizenApplicationID(const WrtDB::TizenAppId &tizenAppId); bool validateTizenPackageID(const WrtDB::TizenPkgId &tizenPkgId); ConfigureResult checkWidgetUpdate(const WidgetUpdateInfo &update); diff --git a/src/jobs/widget_install/task_unzip.cpp b/src/jobs/widget_install/widget_unzip.cpp similarity index 73% rename from src/jobs/widget_install/task_unzip.cpp rename to src/jobs/widget_install/widget_unzip.cpp index 0ce18cf..bcf29e8 100644 --- a/src/jobs/widget_install/task_unzip.cpp +++ b/src/jobs/widget_install/widget_unzip.cpp @@ -14,12 +14,12 @@ * limitations under the License. */ /* - * @file task_unzip.cpp + * @file widget_unzip.cpp * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com) * @version 1.0 - * @brief Implementation file for installer task unzip + * @brief Implementation file for installer widget unzip */ -#include +#include #include #include #include @@ -64,17 +64,7 @@ PathAndFilePair SplitFileAndPath(const std::string &filePath) namespace Jobs { namespace WidgetInstall { -TaskUnzip::TaskUnzip(InstallerContext &installerContext) : - DPL::TaskDecl(this), - m_installerContext(installerContext) -{ - // Install steps - AddStep(&TaskUnzip::StepUnzipPrepare); - AddStep(&TaskUnzip::StepUnzipProgress); - AddStep(&TaskUnzip::StepUnzipFinished); -} - -void TaskUnzip::ExtractFile(DPL::ZipInput::File *input, +void WidgetUnzip::ExtractFile(DPL::ZipInput::File *input, const std::string &destFileName) { Try @@ -94,38 +84,7 @@ void TaskUnzip::ExtractFile(DPL::ZipInput::File *input, } } -void TaskUnzip::StepUnzipPrepare() -{ - LogInfo("Prepare to unzip..."); - - Try - { - m_zip.reset(new DPL::ZipInput(m_installerContext.locations-> - getWidgetSource())); - LogInfo("Widget package comment: " << m_zip->GetGlobalComment()); - - // Widget package must not be empty - if (m_zip->empty()) { - ThrowMsg(Exceptions::ZipEmpty, - m_installerContext.locations->getWidgetSource()); - } - - // Set iterator to first file - m_zipIterator = m_zip->begin(); - } - Catch(DPL::ZipInput::Exception::OpenFailed) - { - ReThrowMsg(Exceptions::OpenZipFailed, - m_installerContext.locations->getWidgetSource()); - } - Catch(DPL::ZipInput::Exception::SeekFileFailed) - { - ThrowMsg(Exceptions::ExtractFileFailed, - "m_installerContext.locations->getWidgetSource()"); - } -} - -void TaskUnzip::StepUnzipProgress() +void WidgetUnzip::unzipProgress(const std::string &destination) { // Show file info LogInfo("Unzipping: '" << m_zipIterator->name << @@ -141,8 +100,7 @@ void TaskUnzip::StepUnzipProgress() if (fileName[fileName.size() - 1] == '/') { // This is path - std::string newPath = - m_installerContext.locations->getTemporaryPackageDir() + "/" + + std::string newPath = destination + "/" + fileName.substr(0, fileName.size() - 1); LogPedantic("Path to extract: " << newPath); @@ -150,9 +108,7 @@ void TaskUnzip::StepUnzipProgress() createTempPath(newPath); } else { // This is regular file - std::string fileExtractPath = - m_installerContext.locations->getTemporaryPackageDir() + "/" + - fileName; + std::string fileExtractPath = destination + "/" + fileName; LogPedantic("File to extract: " << fileExtractPath); @@ -185,21 +141,44 @@ void TaskUnzip::StepUnzipProgress() if (++m_zipIterator == m_zip->end()) { LogInfo("Unzip progress finished successfuly"); } else { - SwitchToStep(&TaskUnzip::StepUnzipProgress); + unzipProgress(destination); } - - m_installerContext.job->UpdateProgress( - InstallerContext::INSTALL_UNZIP_FILES, - "Unzip widget files to temporary directory"); } -void TaskUnzip::StepUnzipFinished() +void WidgetUnzip::unzipWgtFile(const std::string &source, const std::string &destination) { - // Unzip finished, close internal structures - m_zip.reset(); + LogInfo("Prepare to unzip..."); + + Try + { + m_zip.reset(new DPL::ZipInput(source)); + LogInfo("Widget package comment: " << m_zip->GetGlobalComment()); + + // Widget package must not be empty + if (m_zip->empty()) { + ThrowMsg(Exceptions::ZipEmpty, source); + } + + // Set iterator to first file + m_zipIterator = m_zip->begin(); + + unzipProgress(destination); - // Done - LogInfo("Unzip finished"); + // Unzip finished, close internal structures + m_zip.reset(); + + // Done + LogInfo("Unzip finished"); + } + Catch(DPL::ZipInput::Exception::OpenFailed) + { + ReThrowMsg(Exceptions::OpenZipFailed, source); + } + Catch(DPL::ZipInput::Exception::SeekFileFailed) + { + ThrowMsg(Exceptions::ExtractFileFailed, source); + } } + } //namespace WidgetInstall } //namespace Jobs diff --git a/src/jobs/widget_install/task_unzip.h b/src/jobs/widget_install/widget_unzip.h similarity index 57% rename from src/jobs/widget_install/task_unzip.h rename to src/jobs/widget_install/widget_unzip.h index 69ce606..4db5af7 100644 --- a/src/jobs/widget_install/task_unzip.h +++ b/src/jobs/widget_install/widget_unzip.h @@ -14,52 +14,37 @@ * limitations under the License. */ /* - * @file task_unzip.cpp + * @file widget_unzip.cpp * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com) * @version 1.0 * @brief Implementation file for installer task unzip */ -#ifndef INSTALLER_CORE_JOS_WIDGET_INSTALL_TASK_UNZIP_H -#define INSTALLER_CORE_JOS_WIDGET_INSTALL_TASK_UNZIP_H +#ifndef WIDGET_UNZIP_H +#define WIDGET_UNZIP_H #include -#include #include -#include -#include - -class InstallerContext; namespace Jobs { namespace WidgetInstall { -class TaskUnzip : - public DPL::TaskDecl +class WidgetUnzip { - private: - // Installation context - InstallerContext &m_installerContext; + public: + void unzipWgtFile(const std::string &source, const std::string &destination); + private: // Unzip state std::unique_ptr m_zip; DPL::ZipInput::const_iterator m_zipIterator; - WRTEncryptor::ResourceEncryptor *m_resEnc; - - void ExtractFile(DPL::ZipInput::File *input, - const std::string &destFileName); + void unzipProgress(const std::string &destination); + void ExtractFile(DPL::ZipInput::File *input, const std::string + &destFileName); - void EncryptionFile(const std::string &fileName); - - // Steps - void StepUnzipPrepare(); - void StepUnzipProgress(); - void StepUnzipFinished(); - - public: - TaskUnzip(InstallerContext &installerContext); }; + } //namespace WidgetInstall } //namespace Jobs -#endif // INSTALLER_CORE_JOS_WIDGET_INSTALL_TASK_UNZIP_H +#endif // WIDGET_UNZIP_H -- 2.7.4