Add type parameter for performance
[platform/framework/native/appfw.git] / src / app / package / FAppPkg_PackageParser.cpp
index 46db347..0fa1300 100755 (executable)
@@ -488,6 +488,7 @@ _PackageParser::_PackageParser(void)
 ,__pAppInfo(null)
 ,__pDefaultIconType(null)
 ,__isDefaultName(false)
+,__isEflTpk(false)
 {
 }
 
@@ -745,6 +746,22 @@ _PackageParser::OnIdValue(const char* pCharacters)
        SysLog(NID_APP, "Id = [%s]", pCharacters);
        __pPackageInfoImpl->SetId(pCharacters);
 
+       RegularExpression regularExpression;
+       String pattern(L"([a-zA-Z0-9]{10})");
+       result r = regularExpression.Construct(pattern);
+       SysTryReturn(NID_APP, !IsFailed(r), false, E_SYSTEM, "regularExpression.Construct() failed.");
+
+       PackageId packageId = pCharacters;
+       if (regularExpression.Match(packageId, true) == true)
+       {
+               SysLog(NID_APP, "[%ls] is tizen native application.", packageId.GetPointer());
+       }
+       else
+       {
+               SysLog(NID_APP, "[%ls] is not tizen native application.", packageId.GetPointer());
+               __isEflTpk = true;
+       }
+
        return true;
 }
 
@@ -827,8 +844,32 @@ _PackageParser::OnIconValue(const char* pCharacters)
                r = unzipper.UnzipTo(tmp, iconRelPath);
                if (!IsFailed(r))
                {
+                       result r = E_SUCCESS;
+                       File file;
                        tempIconPath = tmp + iconRelPath;
-                       pPackageAppInfoImpl->SetAppTempIconPath(tempIconPath);
+
+                       r = file.Construct(tempIconPath, "r");
+                       if (r == E_SUCCESS)
+                       {
+                               FileAttributes attr;
+                               file.GetAttributes(tempIconPath, attr);
+                               int size = (int)attr.GetFileSize();
+
+                               char* pBuffer = new (std::nothrow) char[size];
+                               SysTryReturn(NID_APP, pBuffer, false, E_OUT_OF_MEMORY, "pBuffer is null.");
+
+                               memset(pBuffer, 0, size);
+                               file.Read((void*)pBuffer, size);
+
+                               pPackageAppInfoImpl->SetAppMenuIconBuffer(pBuffer, size);
+
+                               Directory::Remove(tmp, true);
+                               delete pBuffer;
+                       }
+                       else
+                       {
+                               SysLog(NID_APP, "file.Construct() failed.", tempIconPath.GetPointer());
+                       }
                }
                else
                {
@@ -924,7 +965,14 @@ _PackageParser::ParseAppAttribute(_PackageXmlAttribute* pAttr, bool isUiApp)
        pPackageAppInfoImpl->SetAppName(pName);
 
        AppId appId = __pPackageInfoImpl->GetId() + L"." + pName;
-       pPackageAppInfoImpl->SetAppId(appId);
+       if (__isEflTpk == false)
+       {
+               pPackageAppInfoImpl->SetAppId(appId);
+       }
+       else
+       {
+               pPackageAppInfoImpl->SetAppId(__pPackageInfoImpl->GetId());
+       }
 
        char* pMain = pAttr->Find("Main");
        if (pMain)
@@ -933,7 +981,14 @@ _PackageParser::ParseAppAttribute(_PackageXmlAttribute* pAttr, bool isUiApp)
                if (strcasecmp(pMain, "True") == 0)
                {
                        __isDefaultName = true;
-                       __pPackageInfoImpl->SetMainAppId(appId);
+                       if (__isEflTpk == false)
+                       {
+                               __pPackageInfoImpl->SetMainAppId(appId);
+                       }
+                       else
+                       {
+                               __pPackageInfoImpl->SetMainAppId(__pPackageInfoImpl->GetId());
+                       }
                        pPackageAppInfoImpl->SetMainApp(true);
                }
        }