{
AppLog("INSTALLER_OPTION_CSC is detected.");
__pContext->__isCsc = true;
+ __pContext->__cscInfo = *pOptionalData;
}
installerType = INSTALLER_TYPE_PACKAGE;
String storeClientId;
String removable;
+ String path;
while (pEnum->MoveNext() == E_SUCCESS)
{
{
removable = (*pValue);
}
+
+ if (pKey->Equals(L"path", false) == true)
+ {
+ path = (*pValue);
+ }
}
if (storeClientId.IsEmpty() == false)
__pContext->__isUninstallable = true;
AppLog(" # removable = [true]");
}
+
+ if (__pContext->__isCsc == true)
+ {
+ if (path.IsEmpty() == false)
+ {
+ std::unique_ptr< PackageInfo > pPackageInfo(_PackageManagerImpl::GetInstance()->GetPackageInfoFromFileN(path));
+ TryReturn(pPackageInfo, false, "GetPackageInfoFromFileN() failed. [%s]", GetErrorMessage(GetLastResult()));
+
+ __pContext->__packageId = pPackageInfo->GetId();
+ AppLog(" # packageId = [%ls]", __pContext->__packageId.GetPointer());
+ }
+ }
}
return true;
}
bool
-InstallerManager::IsUninstallUpdates(const PackageId& packageId, String& originPath)
+InstallerManager::IsUninstallUpdates(const PackageId& packageId, String& originPath, bool& isCscPackage)
{
+ String cscInfo;
String roXmlPath;
roXmlPath.Format(1024, DIR_RO_PACKAGE_SYSTEM_MANIFEST, packageId.GetPointer());
+
if (File::IsFileExist(roXmlPath) == true)
{
String rwXmlPath;
rwXmlPath.Format(1024, DIR_RW_PACKAGE_SYSTEM_MANIFEST, packageId.GetPointer());
if (File::IsFileExist(rwXmlPath) == true)
{
+ InstallerUtil::Remove(rwXmlPath);
+
String preloadedAppPath(PATH_USR_APPS);
preloadedAppPath += L"/";
preloadedAppPath += packageId;
return true;
}
}
- else
+ else if(InstallerUtil::IsCscPackage(packageId, cscInfo) == true)
{
- //if (CSC_preloaded && update)
- //{
- // originPath = cscPackagePath;
- //}
+ String tokenDelimiter(":");
+
+ std::unique_ptr< IMap > pMap(InstallerUtil::ParseN(cscInfo, tokenDelimiter));
+ TryReturn(pMap, false, "ParseN() failed. [%s]", GetErrorMessage(GetLastResult()));
+
+ std::unique_ptr< IMapEnumerator > pEnum(pMap->GetMapEnumeratorN());
+ TryReturn(pEnum, false, "GetMapEnumeratorN() failed. [%s]", GetErrorMessage(GetLastResult()));
+
+ String removable;
+ String path;
+
+ while (pEnum->MoveNext() == E_SUCCESS)
+ {
+ String* pKey = static_cast< String* > (pEnum->GetKey());
+ TryReturn(pEnum, false, "GetKey() failed. [%s]", GetErrorMessage(GetLastResult()));
+
+ String* pValue = static_cast< String* > (pEnum->GetValue());
+ TryReturn(pEnum, false, "GetValue() failed. [%s]", GetErrorMessage(GetLastResult()));
+
+ AppLog("key = [%ls], value = [%ls]", pKey->GetPointer(), pValue->GetPointer());
+
+ if (pKey->Equals(L"removable", false) == true)
+ {
+ removable = (*pValue);
+ }
+
+ if (pKey->Equals(L"path", false) == true)
+ {
+ path = (*pValue);
+ }
+ }
+
+ if (removable.Equals(L"false", false) == true)
+ {
+ isCscPackage = true;
+
+ AppLog("uninstall updates for csc-preloaded app [%ls]", path.GetPointer());
+ originPath = cscInfo;
+
+ return true;
+ }
+ else
+ {
+ AppLog("uninstall package for csc-preloaded app. [%ls]");
+ }
}
return false;
}
int
-InstallerManager::RequestCsc(const String& buffer, InstallerOption option)
+InstallerManager::RequestCsc(const String& buffer, InstallerOption option, void* pPkgmgrInstaller)
{
int errorType = 0;
if (op.Equals(L"install", false) == true)
{
- errorType = InstallerManager::Request(path, INSTALLER_OPERATION_INSTALL, option, null, &buffer);
+ errorType = InstallerManager::Request(path, INSTALLER_OPERATION_INSTALL, option, pPkgmgrInstaller, &buffer);
}
else if (op.Equals(L"uninstall", false) == true)
{