if (operation == INSTALLER_OPERATION_INSTALL)
{
- databaseManager.UnregisterPackageInfo(pContext);
+ databaseManager.UnregisterPackageInfo(pContext->__packageId);
databaseManager.RegisterPackageInfo(pContext);
}
else
{
- databaseManager.UnregisterPackageInfo(pContext);
+ databaseManager.UnregisterPackageInfo(pContext->__packageId);
}
AppLog("Installer::OnRegister() - END");
AppLog("------------------------------------------");
#include <FBase_StringConverter.h>
#include "ConfigurationManager.h"
+#include "DatabaseManager.h"
#include "ManifestGenerator.h"
#include "InstallerUtil.h"
#include "SmackManager.h"
bool
ConfigurationManager::PostInstall(InstallationContext* pContext, bool error) const
{
- app2ext_handle* pHandle = (app2ext_handle*)pContext->__pApp2ExtHandle;
-
PackageId packageId = pContext->__packageId;
std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
TryReturn(pPackageId, false, "pPackageId is null.");
if (error == false)
{
- RegisterCoreXmlFile(pContext);
-
SmackManager smackManager;
smackManager.Construct(pContext);
smackManager.EnablePermissions(packageId);
+
+ RegisterCoreXmlFile(pContext);
+
+ if ((pContext->__isUpdated == true) && (pContext->__isPreloaded == false))
+ {
+ CopyData(pContext);
+ RemoveBackup(pContext);
+ }
+ }
+ else
+ {
+ if ((pContext->__isUpdated == true) && (pContext->__isPreloaded == false))
+ {
+ RestoreBackup(pContext);
+ }
}
+ app2ext_handle* pHandle = (app2ext_handle*)pContext->__pApp2ExtHandle;
if (pHandle)
{
if (error == true)
}
bool
+ConfigurationManager::CreateBackup(InstallationContext* pContext) const
+{
+ TryReturn(pContext, false, "pContext is null.");
+ TryReturn(pContext->__packageId.IsEmpty() == false, false, "packageId is empty.");
+
+ if (pContext->__isHybridService == true)
+ {
+ return true;
+ }
+
+ bool res = true;
+ result r = E_SUCCESS;
+ PackageId packageId = pContext->__packageId;
+ String rootPath;
+
+ rootPath += PATH_OPT_USR_APPS;
+ rootPath += L"/";
+ rootPath += packageId;
+ TryReturn(File::IsFileExist(rootPath) == true, false, "rootPath[%ls] is not found.", rootPath.GetPointer());
+
+ String backupPath = rootPath + BACKUP_NAME_RULE;
+ if (File::IsFileExist(backupPath) == true)
+ {
+ InstallerUtil::Remove(backupPath);
+ }
+
+ // folder
+ r = Directory::Rename(rootPath, backupPath);
+ TryReturn(r == E_SUCCESS, false, "Directory::Rename(%ls, %ls) failed.", rootPath.GetPointer(), backupPath.GetPointer());
+
+ AppLog("[%ls] -> [%ls] is renamed.", rootPath.GetPointer(), backupPath.GetPointer());
+
+ // database
+ DatabaseManager databaseManager;
+ res = databaseManager.BackupPackageInfo(pContext);
+ TryReturn(res == true, false, "databaseManager.BackupPackageInfo() failed.");
+
+ // core xml
+ String rwXmlPath;
+ rwXmlPath.Format(1024, DIR_RW_PACKAGE_SYSTEM_MANIFEST, packageId.GetPointer());
+
+ if (File::IsFileExist(rwXmlPath) == true)
+ {
+ String backupXmlPath = rwXmlPath + BACKUP_NAME_RULE;
+ if (File::IsFileExist(backupXmlPath) == true)
+ {
+ InstallerUtil::Remove(backupXmlPath);
+ }
+
+ result r = File::Move(rwXmlPath, backupXmlPath);
+ TryReturn(r == E_SUCCESS, false, "File::Move(%ls, %ls) failed.", rwXmlPath.GetPointer(), backupXmlPath.GetPointer());
+
+ AppLog("[%ls] -> [%ls] is renamed.", rwXmlPath.GetPointer(), backupXmlPath.GetPointer());
+ }
+ else
+ {
+ AppLog("It's updated from preloaded to downloaded, need not to backup xml file. [%ls]", packageId.GetPointer());
+ }
+
+ return true;
+}
+
+bool
+ConfigurationManager::RemoveBackup(InstallationContext* pContext) const
+{
+ TryReturn(pContext, false, "pContext is null.");
+ TryReturn(pContext->__packageId.IsEmpty() == false, false, "packageId is empty.");
+
+ if (pContext->__isHybridService == true)
+ {
+ return true;
+ }
+
+ PackageId packageId = pContext->__packageId;
+ bool res = true;
+ String backupPath;
+
+ backupPath += PATH_OPT_USR_APPS;
+ backupPath += L"/";
+ backupPath += packageId;
+ backupPath += BACKUP_NAME_RULE;
+ TryReturn(File::IsFileExist(backupPath) == true, false, "backupPath[%ls] is not found.", backupPath.GetPointer());
+
+ // folder
+ InstallerUtil::Remove(backupPath);
+ AppLog("[%ls] is removed.", backupPath.GetPointer());
+
+ // database
+ DatabaseManager databaseManager;
+ res = databaseManager.UnregisterPackageInfo(packageId, true);
+ TryReturn(res == true, false, "databaseManager.UnregisterPackageInfo() failed.");
+
+ // core xml
+ String backupXmlPath;
+ backupXmlPath.Format(1024, DIR_RW_PACKAGE_SYSTEM_MANIFEST, packageId.GetPointer());
+ backupXmlPath += BACKUP_NAME_RULE;
+
+ if (File::IsFileExist(backupXmlPath) == true)
+ {
+ InstallerUtil::Remove(backupXmlPath);
+ }
+ else
+ {
+ AppLog("It's updated from preloaded to downloaded, There is no backup xml file. [%ls]", packageId.GetPointer());
+ }
+
+ return true;
+}
+
+bool
+ConfigurationManager::RestoreBackup(InstallationContext* pContext) const
+{
+ TryReturn(pContext, false, "pContext is null.");
+ TryReturn(pContext->__packageId.IsEmpty() == false, false, "packageId is empty.");
+
+ if (pContext->__isHybridService == true)
+ {
+ return true;
+ }
+
+ bool res = true;
+ result r = E_SUCCESS;
+ PackageId packageId = pContext->__packageId;
+ String rootPath;
+ String backupPath;
+
+ rootPath += PATH_OPT_USR_APPS;
+ rootPath += L"/";
+ rootPath += packageId;
+
+ if (File::IsFileExist(rootPath) == true)
+ {
+ InstallerUtil::Remove(rootPath);
+ }
+
+ backupPath = rootPath + BACKUP_NAME_RULE;
+ TryReturn(File::IsFileExist(backupPath) == true, false, "backupPath[%ls] is not found.", backupPath.GetPointer());
+
+ // folder
+ r = Directory::Rename(backupPath, rootPath);
+ TryReturn(r == E_SUCCESS, false, "Directory::Rename(%ls, %ls) failed.", backupPath.GetPointer(), rootPath.GetPointer());
+
+ AppLog("[%ls] -> [%ls] is renamed.", backupPath.GetPointer(), rootPath.GetPointer());
+
+ // database
+ DatabaseManager databaseManager;
+ res = databaseManager.RestorePackageInfo(pContext);
+ TryReturn(res == true, false, "databaseManager.RestorePackageInfo() failed.");
+
+ // core xml
+ String rwXmlPath;
+ rwXmlPath.Format(1024, DIR_RW_PACKAGE_SYSTEM_MANIFEST, packageId.GetPointer());
+
+ String backupXmlPath = rwXmlPath + BACKUP_NAME_RULE;
+ if (File::IsFileExist(backupXmlPath) == true)
+ {
+ if (File::IsFileExist(rwXmlPath) == true)
+ {
+ InstallerUtil::Remove(rwXmlPath);
+ }
+
+ result r = File::Move(backupXmlPath, rwXmlPath);
+ TryReturn(r == E_SUCCESS, false, "File::Move(%ls, %ls) failed.", backupXmlPath.GetPointer(), rwXmlPath.GetPointer());
+
+ AppLog("[%ls] -> [%ls] is renamed.", backupXmlPath.GetPointer(), rwXmlPath.GetPointer());
+ }
+
+ return true;
+}
+
+bool
+ConfigurationManager::CopyData(InstallationContext* pContext) const
+{
+ TryReturn(pContext, false, "pContext is null.");
+ TryReturn(pContext->__packageId.IsEmpty() == false, false, "packageId is empty.");
+
+ if (pContext->__isHybridService == true)
+ {
+ return true;
+ }
+
+ SmackManager smackManager;
+ smackManager.Construct(pContext);
+
+ PackageId packageId = pContext->__packageId;
+ String srcPath;
+ String destPath;
+ String rootPath;
+ String backupPath;
+
+ rootPath += PATH_OPT_USR_APPS;
+ rootPath += L"/";
+ rootPath += packageId;
+
+ backupPath = rootPath + BACKUP_NAME_RULE;
+
+ // data
+ srcPath = backupPath + DIR_DATA;
+ destPath = rootPath + DIR_DATA;
+ InstallerUtil::CopyDirectory(srcPath, destPath);
+ InstallerUtil::ChangeDirectoryPermission(destPath, PERM_BASE, true);
+ smackManager.SetupPath(packageId, destPath, SMACK_DIR_TYPE_PRIVATE);
+
+ // setting
+ srcPath = backupPath + DIR_SETTING;
+ destPath = rootPath + DIR_SETTING;
+ InstallerUtil::CopyDirectory(srcPath, destPath);
+ InstallerUtil::ChangeDirectoryPermission(destPath, PERM_BASE | PERM_WRITE, false);
+ smackManager.SetupPath(packageId, destPath, SMACK_DIR_TYPE_SETTINGS_RW);
+
+ // shared/data
+ srcPath = backupPath + DIR_SHARED_DATA;
+ destPath = rootPath + DIR_SHARED_DATA;
+ InstallerUtil::CopyDirectory(srcPath, destPath);
+ InstallerUtil::ChangeDirectoryPermission(destPath, PERM_BASE, true);
+ smackManager.SetupPath(packageId, destPath, SMACK_DIR_TYPE_PUBLIC_RO);
+
+ // shared/trust
+ srcPath = backupPath + DIR_SHARED_TRUSTED;
+ destPath = rootPath + DIR_SHARED_TRUSTED;
+ InstallerUtil::CopyDirectory(srcPath, destPath);
+ InstallerUtil::ChangeDirectoryPermission(destPath, PERM_BASE, true);
+ smackManager.SetupPath(packageId, destPath, SMACK_DIR_TYPE_GROUP_RW);
+
+ return true;
+}
+
+bool
ConfigurationManager::CreateCoreXmlFile(InstallationContext* pContext) const
{
AppLog("------------------------------------------");
bool PostInstall(InstallationContext* pContext, bool error) const;
bool PostUninstall(InstallationContext* pContext) const;
+ bool CreateBackup(InstallationContext* pContext) const;
+
private:
bool CreateCoreXmlFile(InstallationContext* pContext) const;
bool RegisterCoreXmlFile(InstallationContext* pContext) const;
bool CreateAppInfoFile(AppData* pAppData, const Tizen::Base::String& rootPath) const;
+ bool RemoveBackup(InstallationContext* pContext) const;
+ bool RestoreBackup(InstallationContext* pContext) const;
+ bool CopyData(InstallationContext* pContext) const;
+
}; // ConfigurationManager
#endif // _CONFIGURATION_MANAGER_H_
bool
DatabaseManager::RegisterLaunchConditionList(AppData* pAppData, Database& db) const
{
- TryReturn(pAppData, E_SYSTEM, "pAppData is null.");
- TryReturn(pAppData->__pLaunchConditionList, E_SYSTEM, "__pLaunchConditionList is null.");
+ TryReturn(pAppData, false, "pAppData is null.");
+ TryReturn(pAppData->__pLaunchConditionList, false, "__pLaunchConditionList is null.");
result r = E_SUCCESS;
MultiHashMap* pList = pAppData->__pLaunchConditionList;
bool
DatabaseManager::RegisterAppFeatureList(AppData* pAppData, Database& db) const
{
- TryReturn(pAppData, E_SYSTEM, "pAppData is null.");
- TryReturn(pAppData->__pFeatureList, E_SYSTEM, "__pFeatureList is null.");
+ TryReturn(pAppData, false, "pAppData is null.");
+ TryReturn(pAppData->__pFeatureList, false, "__pFeatureList is null.");
result r = E_SUCCESS;
HashMap* pList = pAppData->__pFeatureList;
bool
DatabaseManager::RegisterDataControlList(AppData* pAppData, Database& db) const
{
- TryReturn(pAppData, E_SYSTEM, "pAppData is null.");
- TryReturn(pAppData->__pDataControlList, E_SYSTEM, "__pDataControlList is null.");
+ TryReturn(pAppData, false, "pAppData is null.");
+ TryReturn(pAppData->__pDataControlList, false, "__pDataControlList is null.");
result r = E_SUCCESS;
}
bool
-DatabaseManager::UnregisterPackageInfo(InstallationContext* pContext) const
+DatabaseManager::UnregisterPackageInfo(const PackageId& uniquePackageId, bool backup) const
{
Database db;
String query;
- PackageId packageId = pContext->__packageId;
+ PackageId packageId;
+
+ if (backup == false)
+ {
+ packageId = uniquePackageId;
+ }
+ else
+ {
+ packageId = uniquePackageId + BACKUP_NAME_RULE;
+ }
result r = db.Construct(L"/opt/usr/dbspace/.app-package.db", "r+");
TryReturn(r == E_SUCCESS, false, "db.Construct failed. [%s]", GetErrorMessage(r));
}
query.Clear();
+ AppLog("Remove PackageInfo[%ls] in db", packageId.GetPointer());
+
+ return true;
+}
+
+bool
+DatabaseManager::BackupPackageInfo(InstallationContext* pContext) const
+{
+ TryReturn(pContext, false, "pContext is null.");
+ TryReturn(pContext->__packageId.IsEmpty() == false, false, "packageId is empty.");
+
+ result r = E_SUCCESS;
+ PackageId packageId = pContext->__packageId;
+ Database db;
+ String query;
+ String backupId = packageId + BACKUP_NAME_RULE;
+
+ r = db.Construct(L"/opt/usr/dbspace/.app-package.db", "r+");
+ TryReturn(r == E_SUCCESS, false, "db.Construct failed. [%s]", GetErrorMessage(r));
+
+ query.Format(1024, L"UPDATE PkgInfo SET PKG_ID = '%ls' WHERE PKG_ID = '%ls'", backupId.GetPointer(), packageId.GetPointer());
+
+ std::unique_ptr< DbStatement > pStmt(_PackageManagerImpl::CreateStatementN(db, query));
+ TryReturn(pStmt, false, "CreateStatementN() failed. [%s]", GetErrorMessage(GetLastResult()));
+
+ std::unique_ptr< DbEnumerator > pEnum(_PackageManagerImpl::ExecuteStatementN(db, pStmt.get()));
+ TryReturn(!IsFailed(GetLastResult()), false, "ExecuteStatementN() failed. [%s]", GetErrorMessage(GetLastResult()));
+
+ AppLog("Backup PackageInfo[%ls] in db", backupId.GetPointer());
+
+ return BackupAppInfoList(pContext, db);
+}
+
+bool
+DatabaseManager::BackupAppInfoList(InstallationContext* pContext, Database& db) const
+{
+ TryReturn(pContext, false, "pContext is null.");
+
+ String query;
+
+ IListT<AppData*>* pAppDataList = pContext->__pAppDataList;
+ TryReturn(pAppDataList, false, "pAppDataList is null.");
+
+ int count = pAppDataList->GetCount();
+
+ for (int i = 0; i < count; i++)
+ {
+ AppData* pAppData = null;
+ pAppDataList->GetAt(i, pAppData);
+
+ if (pAppData)
+ {
+ AppId backupAppId = pAppData->__appId + BACKUP_NAME_RULE;
+ query.Format(1024, L"UPDATE AppInfo SET PACKAGE_NAME = '%ls' WHERE PACKAGE_NAME = '%ls'", backupAppId.GetPointer(), pAppData->__appId.GetPointer());
+
+ std::unique_ptr< DbStatement > pStmt(_PackageManagerImpl::CreateStatementN(db, query));
+ TryReturn(pStmt, false, "CreateStatementN() failed. [%s]", GetErrorMessage(GetLastResult()));
+
+ std::unique_ptr< DbEnumerator > pEnum(_PackageManagerImpl::ExecuteStatementN(db, pStmt.get()));
+ TryReturn(!IsFailed(GetLastResult()), false, "ExecuteStatementN() failed. [%s]", GetErrorMessage(GetLastResult()));
+
+ AppLog("Backup AppInfo[%ls] in db", backupAppId.GetPointer());
+ }
+ }
+
+ return true;
+}
+
+bool
+DatabaseManager::RestorePackageInfo(InstallationContext* pContext) const
+{
+ TryReturn(pContext, false, "pContext is null.");
+ TryReturn(pContext->__packageId.IsEmpty() == false, false, "packageId is empty.");
+
+ result r = E_SUCCESS;
+ PackageId packageId = pContext->__packageId;
+ Database db;
+ String query;
+ String backupId = packageId + BACKUP_NAME_RULE;
+
+ UnregisterPackageInfo(packageId);
+
+ r = db.Construct(L"/opt/usr/dbspace/.app-package.db", "r+");
+ TryReturn(r == E_SUCCESS, false, "db.Construct failed. [%s]", GetErrorMessage(r));
+
+ query.Format(1024, L"UPDATE PkgInfo SET PKG_ID = '%ls' WHERE PKG_ID = '%ls'", packageId.GetPointer(), backupId.GetPointer());
+
+ std::unique_ptr< DbStatement > pStmt(_PackageManagerImpl::CreateStatementN(db, query));
+ TryReturn(pStmt, false, "CreateStatementN() failed. [%s]", GetErrorMessage(GetLastResult()));
+
+ std::unique_ptr< DbEnumerator > pEnum(_PackageManagerImpl::ExecuteStatementN(db, pStmt.get()));
+ TryReturn(!IsFailed(GetLastResult()), false, "ExecuteStatementN() failed. [%s]", GetErrorMessage(GetLastResult()));
+
+ AppLog("Restore PackageInfo[%ls] in db", backupId.GetPointer());
+
+ return RestoreAppInfoList(pContext, db);
+}
+
+bool
+DatabaseManager::RestoreAppInfoList(InstallationContext* pContext, Database& db) const
+{
+ TryReturn(pContext, false, "pContext is null.");
+
+ String query;
+
+ IListT<AppData*>* pAppDataList = pContext->__pAppDataList;
+ TryReturn(pAppDataList, false, "pAppDataList is null.");
+
+ int count = pAppDataList->GetCount();
+
+ for (int i = 0; i < count; i++)
+ {
+ AppData* pAppData = null;
+ pAppDataList->GetAt(i, pAppData);
+
+ if (pAppData)
+ {
+ AppId backupAppId = pAppData->__appId + BACKUP_NAME_RULE;
+ query.Format(1024, L"UPDATE AppInfo SET PACKAGE_NAME = '%ls' WHERE PACKAGE_NAME = '%ls'", pAppData->__appId.GetPointer(), backupAppId.GetPointer());
+
+ std::unique_ptr< DbStatement > pStmt(_PackageManagerImpl::CreateStatementN(db, query));
+ TryReturn(pStmt, false, "CreateStatementN() failed. [%s]", GetErrorMessage(GetLastResult()));
+
+ std::unique_ptr< DbEnumerator > pEnum(_PackageManagerImpl::ExecuteStatementN(db, pStmt.get()));
+ TryReturn(!IsFailed(GetLastResult()), false, "ExecuteStatementN() failed. [%s]", GetErrorMessage(GetLastResult()));
+
+ AppLog("Restore AppInfo[%ls] in db", backupAppId.GetPointer());
+ }
+ }
+
return true;
}
virtual ~DatabaseManager(void);
bool RegisterPackageInfo(InstallationContext* pContext) const;
- bool UnregisterPackageInfo(InstallationContext* pContext) const;
+ bool UnregisterPackageInfo(const Tizen::App::PackageId& uniquePackageId, bool backup = false) const;
+
+ bool BackupPackageInfo(InstallationContext* pContext) const;
+ bool RestorePackageInfo(InstallationContext* pContext) const;
bool DisableAutoRestart(Tizen::App::AppId appId) const;
bool CreatePackageTables(void) const;
+ bool BackupAppInfoList(InstallationContext* pContext, Tizen::Io::Database& db) const;
+ bool RestoreAppInfoList(InstallationContext* pContext, Tizen::Io::Database& db) const;
+
}; // DatabaseManager
#endif // _DATABASE_MANAGER_H_
return true;
}
-#if 0
-bool
-SmackManager::AddLabelSharedDir(const PackageId& packageId, const String& dirPath)
-{
- TryReturn(__pContext, false, "__pContext is null");
-
-// if (__pContext->__isVerificationMode == false)
-// {
-// AppLog("VerificationMode is off.");
-// return true;
-// }
-
- int res = 0;
- String label = packageId;
-
- std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
- TryReturn(pPackageId, false, "pPackageId is null.");
-
- std::unique_ptr<char[]> pPath(_StringConverter::CopyToCharArrayN(dirPath));
- TryReturn(pPath, false, "pPath is null.");
-
- if (dirPath.Contains(L"shared/data") == true)
- {
- //label.Append("_shareddata");
- //AddSharedDirReaders(label);
-
- label = L"*";
- }
- else if (dirPath.Contains(L"shared/trusted") == true)
- {
- if (__pContext->__isVerificationMode == true)
- {
- Sha1Hash hash;
- String base64Value;
- result r = E_SUCCESS;
-
- IListT<String *>* pAuthorCertList = __pContext->__pAuthorCertList;
- TryReturn(pAuthorCertList, false, "pAuthorCertList is null.");
-
- String *pEntity = null;
- r = pAuthorCertList->GetAt(0, pEntity);
- TryReturn(!IsFailed(r), false, "pAuthorCertList->GetAt() is failed.");
- TryReturn(pEntity, false, "pEntity is null.");
-
- std::unique_ptr<ByteBuffer> pEncodedData(StringUtil::DecodeBase64StringN(*pEntity));
- TryReturn(pEncodedData, false, "pEncodedData is null.");
-
- std::unique_ptr<ByteBuffer> pHashValue(hash.GetHashN(*pEncodedData.get()));
- TryReturn(pHashValue, false, "pHashValue is null.");
-
- r = StringUtil::EncodeToBase64String(*pHashValue, base64Value);
- TryReturn(!IsFailed(r), false, "EncodeToBase64String() is failed.");
-
- // in smack, '/' is not allowed for label.
- r = base64Value.Replace(L"/", L"#");
- TryReturn(!IsFailed(r), false, "base64Value.Replace() is failed.");
-
- std::unique_ptr<char[]> pHashEncodedValue(_StringConverter::CopyToCharArrayN(base64Value));
- TryReturn(pHashEncodedValue, false, "pHashEncodedValue is null.");
-
- label = pHashEncodedValue.get();
- AppLog("pHashEncodedValue = [%s]", pHashEncodedValue.get());
- }
- else
- {
- AddLabelDir(pPackageId.get(), pPath.get());
- return true;
- }
- }
- else
- {
- AppLog("Invalid Directory = [%ls]", dirPath.GetPointer());
- return false;
- }
-
- std::unique_ptr<char[]> pLabel(_StringConverter::CopyToCharArrayN(label));
- TryReturn(pLabel, false, "pLabel is null.");
-
- res = AddLabelSharedDir(pPackageId.get(), pLabel.get(), pPath.get());
-
- return true;
-}
-#endif
-
-#if 0
-bool
-SmackManager::AddSharedDirReaders(const String& label)
-{
- TryReturn(__pContext, false, "__pContext is null");
-
- int error = 0;
- bool res = true;
- IList* pPackageList = null;
-
- std::unique_ptr<char[]> pLabel(_StringConverter::CopyToCharArrayN(label));
- TryReturn(pLabel, false, "pLabel is null.");
-
- if (__pContext->__isPreloaded == true)
- {
- pPackageList = GetPreloadedAppListN();
- }
- else
- {
- pPackageList = _PackageManagerImpl::GetInstance()->GetPackageInfoListN();
- }
- TryReturn(pPackageList, false, "pPackageList is null.");
-
- int count = pPackageList->GetCount();
-
- const char** pList = new (std::nothrow) const char*[count+1];
- TryReturn(pList, false, "pList is null.");
- int len = sizeof(const char*) * (count+1);
- memset(pList, 0, len);
- AppLog("pList : init: size=%d", len);
-
- for (int i = 0; i < count; i++)
- {
- if (__pContext->__isPreloaded == true)
- {
- String* pPackage = dynamic_cast < String* >(pPackageList->GetAt(i));
- if (pPackage)
- {
- PackageId packageId = *pPackage;
-
- if (packageId == __pContext->__packageId)
- {
- AppLog("package [%ls] is skipped.", packageId.GetPointer());
- continue;
- }
-
- std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
- TryCatch(pPackageId, res = false, "pPackage is null.");
-
- pList[i] = pPackageId.release();
- AppLog("Package - [%s]", pList[i]);
- }
- }
- else
- {
- PackageInfo* pPackage = dynamic_cast < PackageInfo* >(pPackageList->GetAt(i));
- if (pPackage)
- {
- PackageId packageId = pPackage->GetId();
-
- if (packageId == __pContext->__packageId)
- {
- AppLog("package [%ls] is skipped.", packageId.GetPointer());
- continue;
- }
-
- std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
- TryCatch(pPackageId, res = false, "pPackage is null.");
-
- pList[i] = pPackageId.release();
- AppLog("Package - [%s]", pList[i]);
- }
- }
- }
-
- pList[count] = null;
-
- error = AddSharedDirReaders(pLabel.get(), pList);
- res = true;
-
-CATCH:
- for (int i = 0; pList[i] != null; i++)
- {
- delete[] pList[i];
- }
- delete[] pList;
- delete pPackageList;
-
- return res;
-}
-#endif
-
bool
SmackManager::AddFriend(const Tizen::App::PackageId& packageId1, const Tizen::App::PackageId& packageId2)
{
int res = 0;
String realPath;
+ if (File::IsFileExist(dirPath) == false)
+ {
+ AppLog("dirPath [%ls] is not existed. skip!", dirPath.GetPointer());
+ return true;
+ }
+
std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
TryReturn(pPackageId, false, "pPackageId is null.");
return 0;
}
-#if 0
-int
-SmackManager::AddLabelSharedDir(const char* pLabel, const char* pSharedLabel, const char* pDirPath)
-{
- int ret = 0;
- void* pHandle = null;
- char* pErrorMsg = null;
- int (*app_label_shared_dir)(const char*, const char*, const char*) = null;
-
- pHandle = dlopen("libprivilege-control.so.0", RTLD_LAZY | RTLD_GLOBAL);
- if (!pHandle)
- {
- AppLog("AddLabelSharedDir(): dlopen() failed. [%s]", dlerror());
- return -1;
- }
-
- app_label_shared_dir = reinterpret_cast <int (*)(const char*, const char*, const char*)>(dlsym(pHandle, "app_label_shared_dir"));
- pErrorMsg = dlerror();
- if ((pErrorMsg != null) || (app_label_shared_dir == null))
- {
- AppLog("AddLabelSharedDir(): dlsym() failed. [%s]", pErrorMsg);
- dlclose(pHandle);
- return -1;
- }
-
- AppLog("[smack] app_label_shared_dir(%s, %s, %s)", pLabel, pSharedLabel, pDirPath);
- ret = app_label_shared_dir(pLabel, pSharedLabel, pDirPath);
- AppLog("[smack] app_label_shared_dir(%s, %s, %s), result = [%d]", pLabel, pSharedLabel, pDirPath, ret);
-
- dlclose(pHandle);
-
- return 0;
-}
-#endif
-
-#if 0
-int
-SmackManager::AddSharedDirReaders(const char* pSharedLabel, const char** ppAppList)
-{
- int ret = 0;
- void* pHandle = null;
- char* pErrorMsg = null;
- int (*add_shared_dir_readers)(const char*, const char**) = null;
-
- pHandle = dlopen("libprivilege-control.so.0", RTLD_LAZY | RTLD_GLOBAL);
- if (!pHandle)
- {
- AppLog("AddSharedDirReaders(): dlopen() failed. [%s]", dlerror());
- return -1;
- }
-
- add_shared_dir_readers = reinterpret_cast <int (*)(const char*, const char**)>(dlsym(pHandle, "add_shared_dir_readers"));
- pErrorMsg = dlerror();
- if ((pErrorMsg != null) || (add_shared_dir_readers == null))
- {
- AppLog("AddSharedDirReaders(): dlsym() failed. [%s]", pErrorMsg);
- dlclose(pHandle);
- return -1;
- }
-
- AppLog("[smack] add_shared_dir_readers(%s)", pSharedLabel);
- ret = add_shared_dir_readers(pSharedLabel, ppAppList);
- AppLog("[smack] add_shared_dir_readers(%s), result = [%d]", pSharedLabel, ret);
-
- dlclose(pHandle);
-
- return 0;
-}
-#endif
-
int
SmackManager::AddFriend(const char* pPackageId1, const char* pPackageId2)
{
bool AddLabelDir(const Tizen::Base::String& label, const Tizen::Base::String& dirPath, bool rootDirectory = false);
bool AddLabelSymlink(const Tizen::Base::String& symlink);
- //bool AddLabelSharedDir(const Tizen::App::PackageId& packageId, const Tizen::Base::String& dirPath);
- //bool AddSharedDirReaders(const Tizen::Base::String& label);
bool AddFriend(const Tizen::App::PackageId& packageId1, const Tizen::App::PackageId& packageId2);
bool EnablePermissions(const Tizen::App::PackageId& packageId);
int Uninstall(const char* pPackageId);
int AddLabelDir(const char* pLabel, const char* pDirPath);
- //int AddLabelSharedDir(const char* pLabel, const char* pSharedLabel, const char* pDirPath);
- //int AddSharedDirReaders(const char* pSharedLabel, const char** ppAppList);
int AddFriend(const char* pPackageId1, const char* pPackageId2);
int EnablePermissions(const char* pPackageId, int appType, const char** ppPermissions, bool persistent);
#include "InstallationContext.h"
#include "SystemCheckStep.h"
+#include "ConfigurationManager.h"
#include "DatabaseManager.h"
using namespace Tizen::App;
error = OnStateVersionCheck();
break;
- case STATE_AGENT_CHECK:
- error = OnStateAgentCheck();
+ case STATE_BACKUP:
+ error = OnStateBackup();
break;
case STATE_AGENT_TIMER:
}
InstallerError
-SystemCheckStep::OnStateAgentCheck(void)
+SystemCheckStep::OnStateBackup(void)
{
InstallerError error = INSTALLER_ERROR_NONE;
+ if ((__pContext->__isUpdated == true) && (__pContext->__isPreloaded == false))
+ {
+ ConfigurationManager configurationManager;
+ bool res = configurationManager.CreateBackup(__pContext);
+ TryReturn(res == true, INSTALLER_ERROR_BACKUP_FAILED, "configurationManager.CreateBackup(%ls) failed.", __pContext->__packageId.GetPointer());
+ }
+
GoNextState();
return error;
}
enum
{
STATE_VERSION_CHECK,
- STATE_AGENT_CHECK,
+ STATE_BACKUP,
STATE_AGENT_TIMER,
STATE_DONE
};
void GoNextState(void);
InstallerError OnStateVersionCheck(void);
- InstallerError OnStateAgentCheck(void);
+ InstallerError OnStateBackup(void);
InstallerError OnStateAgentTimer(void);
InstallerError OnStateDone(void);
const char *pkg_info = null;
char* pkg_path = null;
const char* pOptional = null;
+ const char* pStoreClientId = null;
String path;
String optionalData;
PackageId packageId;
AppLog(" # path = [%ls] -> optionalData = [%ls]", path.GetPointer(), optionalData.GetPointer());
}
+ pStoreClientId = pkgmgr_installer_get_caller_pkgid(pi);
+ if (pStoreClientId)
+ {
+ PackageId StoreClientId = pStoreClientId;
+ optionalData.Append(":StoreClientId=");
+ optionalData.Append(StoreClientId);
+ AppLog(" # optionalData = [%ls]", optionalData.GetPointer());
+ }
+
errorType = InstallerManager::Request(path, INSTALLER_OPERATION_INSTALL, INSTALLER_OPTION_NORMAL, pi, &optionalData);
// if (errorType != 0)