clean up unzip. phase 1
authorSoyoung Kim <sy037.kim@samsung.com>
Tue, 4 Jun 2013 08:58:06 +0000 (17:58 +0900)
committerSoyoung Kim <sy037.kim@samsung.com>
Tue, 4 Jun 2013 11:20:58 +0000 (20:20 +0900)
[Issue#] N/A
[Problem] N/A
[Cause] N/A
[Solution] remove unzip task to class.
[SCMRequest] N/A

Change-Id: Ibb6e946ae0606a38964ab481de7424bdcaf321b2

src/CMakeLists.txt
src/jobs/widget_install/job_widget_install.cpp
src/jobs/widget_install/job_widget_install.h
src/jobs/widget_install/widget_unzip.cpp [moved from src/jobs/widget_install/task_unzip.cpp with 73% similarity]
src/jobs/widget_install/widget_unzip.h [moved from src/jobs/widget_install/task_unzip.h with 57% similarity]

index 4eda17b..724787d 100644 (file)
@@ -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
index 18dbe33..309a546 100644 (file)
 #include <widget_install/task_remove_backup.h>
 #include <widget_install/task_encrypt_resource.h>
 #include <widget_install/task_certificates.h>
-#include <widget_install/task_unzip.h>
 #include <widget_install/task_commons.h>
 #include <widget_install/task_prepare_reinstall.h>
 
 #include <widget_install/widget_install_errors.h>
 #include <widget_install/widget_install_context.h>
 #include <widget_install_to_external.h>
+#include <widget_install/widget_unzip.h>
 
 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<DPL::ZipInput> zipFile(
-                    new DPL::ZipInput(widgetSource));
-
-                std::unique_ptr<DPL::ZipInput::File> 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<WidgetParser>(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<WidgetParser>(configInfo,
-                                                              DPL::
-                                                                  FromUTF32String(
-                                                                  L"widget"))));
+                configFile = tempPath + "/" + CONFIG_XML;
             }
+
+            parser.Parse(configFile,
+                    ElementParserPtr(
+                        new RootParser<WidgetParser>(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<DPL::ZipInput> 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<DPL::ZipInput::File> 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<DPL::ZipInput::File> 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)
 {
index 909c0ee..2afcae1 100644 (file)
@@ -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);
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 (file)
  *    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 <widget_install/task_unzip.h>
+#include <widget_install/widget_unzip.h>
 #include <widget_install/widget_install_errors.h>
 #include <widget_install/widget_install_context.h>
 #include <widget_install/job_widget_install.h>
@@ -64,17 +64,7 @@ PathAndFilePair SplitFileAndPath(const std::string &filePath)
 
 namespace Jobs {
 namespace WidgetInstall {
-TaskUnzip::TaskUnzip(InstallerContext &installerContext) :
-    DPL::TaskDecl<TaskUnzip>(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
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 (file)
  *    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 <string>
-#include <memory>
 
 #include <dpl/zip_input.h>
-#include <dpl/task.h>
-#include <dpl/encryption/resource_encryption.h>
-
-class InstallerContext;
 
 namespace Jobs {
 namespace WidgetInstall {
-class TaskUnzip :
-    public DPL::TaskDecl<TaskUnzip>
+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<DPL::ZipInput> 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