Fixed uninstallation using pkgid and installation without pkgid in config.xml
authorSoyoung Kim <sy037.kim@samsung.com>
Fri, 8 Feb 2013 06:13:18 +0000 (15:13 +0900)
committerSoyoung Kim <sy037.kim@samsung.com>
Fri, 8 Feb 2013 06:20:50 +0000 (15:20 +0900)
[Issue#] N/A
[Problem] 1. uninstallation failed using pkgid
2. installation failed without pkgid in config.xml
[Cause] 1. there is no logic for uninstallation using pkgid
2. To create pkgid logic is wrong.
[Solution] 1. add uninstallation for pkgid 2. fixed pkgid logic
[SCMRequest] this package have to release with wrt-commons

Change-Id: Icb0440a21e14527d2140ebf38a677f1b52c7bf2d

src/jobs/widget_install/job_widget_install.cpp
src/jobs/widget_uninstall/job_widget_uninstall.cpp

index 9ba67fc..4303a56 100644 (file)
@@ -347,7 +347,13 @@ void JobWidgetInstall::setTizenId(
             if(appid.length() > PACKAGE_ID_LENGTH) {
                 m_installerContext.widgetConfig.tzPkgid =
                     appid.substr(0, PACKAGE_ID_LENGTH);
-            } //else: this means appId is broken anyway
+            } else {
+                //old version appid only has 10byte random character is able to install for a while.
+                //this case appid equal pkgid.
+                m_installerContext.widgetConfig.tzPkgid =
+                    *configInfo.tizenAppId;
+                shouldMakeAppid = true;
+            }
         }
     } else {
         shouldMakeAppid = true;
@@ -390,6 +396,7 @@ void JobWidgetInstall::setTizenId(
             LogDebug("Regcomp failed");
         }
 
+        LogDebug("Name : " << name);
         if (!name || (regexec(&regx, DPL::ToUTF8String(*name).c_str(),
                         static_cast<size_t>(0), NULL, 0) != REG_NOERROR)) {
             // TODO : generate name move to wrt-commons
index 6cf8009..e0bc8c4 100644 (file)
@@ -14,6 +14,7 @@
  *    limitations under the License.
  */
 
+#include <regex.h>
 #include <widget_uninstall/job_widget_uninstall.h>
 #include <widget_uninstall/widget_uninstall_errors.h>
 #include <widget_uninstall/task_check.h>
@@ -29,6 +30,7 @@
 using namespace WrtDB;
 
 namespace { //anonymous
+const char* REG_TIZEN_PKGID_PATTERN = "^[a-zA-Z0-9]{10}$";
 class UninstallerTaskFail :
     public DPL::TaskDecl<UninstallerTaskFail>
 {
@@ -67,12 +69,26 @@ JobWidgetUninstall::JobWidgetUninstall(const std::string & tizenAppId,
     m_context.removeFinished = false;
     m_context.uninstallStep = UninstallerContext::UNINSTALL_START;
     m_context.job = this;
-    m_context.tzAppid = tizenAppId;
     m_context.isExternalWidget = getExternalWidgetFlag();
 
     Try
     {
-        WrtDB::WidgetDAOReadOnly dao(DPL::FromUTF8String(tizenAppId));
+        regex_t regx;
+        if(regcomp(&regx, REG_TIZEN_PKGID_PATTERN, REG_NOSUB | REG_EXTENDED)!=0){
+            LogDebug("Regcomp failed");
+        }
+
+        if ((regexec(&regx, tizenAppId.c_str(),
+                        static_cast<size_t>(0), NULL, 0) == REG_NOERROR)) {
+            TizenAppId appid =
+                WrtDB::WidgetDAOReadOnly::getTzAppId(
+                        DPL::FromUTF8String(tizenAppId));
+            LogDebug("Get appid from pkgid : " << appid);
+            m_context.tzAppid = DPL::ToUTF8String(appid);
+        } else {
+            m_context.tzAppid = tizenAppId;
+        }
+        WrtDB::WidgetDAOReadOnly dao(DPL::FromUTF8String(m_context.tzAppid));
         m_context.tzPkgid = DPL::ToUTF8String(dao.getTizenPkgId());
         m_context.locations = WidgetLocation(m_context.tzPkgid);
         m_context.locations->registerAppid(m_context.tzAppid);