#include <widget_install/job_widget_install.h>
#include <widget_install/widget_install_errors.h>
#include <widget_install/widget_install_context.h>
+#include <widget_install/directory_api.h>
#include <dpl/utils/wrt_utility.h>
#include <dpl/foreach.h>
#include <dpl/log/log.h>
m_context.locationType)
{
AddStep(&TaskFileManipulation::StepCreateDirs);
- AddStep(&TaskFileManipulation::StepCreatePrivateStorageDir);
if (m_context.widgetConfig.packagingType !=
WrtDB::PKG_TYPE_DIRECTORY_WEB_APP)
{
AddStep(&TaskFileManipulation::StepRenamePath);
AddAbortStep(&TaskFileManipulation::StepAbortRenamePath);
}
+ AddStep(&TaskFileManipulation::StepCreatePrivateStorageDir);
+ AddStep(&TaskFileManipulation::StepCreateSharedFolder);
AddStep(&TaskFileManipulation::StepLinkForPreload);
} else {
AddStep(&TaskFileManipulation::StepPrepareExternalDir);
AddStep(&TaskFileManipulation::StepInstallToExternal);
AddStep(&TaskFileManipulation::StepCreatePrivateStorageDir);
+ AddStep(&TaskFileManipulation::StepCreateSharedFolder);
AddAbortStep(&TaskFileManipulation::StepAbortCreateExternalDir);
}
LogDebug("Create resource directory");
WrtUtilMakeDir(widgetBinPath);
WrtUtilMakeDir(widgetSrcPath);
- if (m_context.job->getInstallerStruct().m_installMode
- == InstallMode::INSTALL_MODE_PRELOAD)
- {
+ if (m_context.mode.installTime == InstallMode::InstallTime::PRELOAD) {
std::string userWidgetDir = m_context.locations->getUserDataRootDir();
WrtUtilMakeDir(userWidgetDir);
}
std::string storagePath = m_context.locations->getPrivateStorageDir();
LogDebug("Create private storage directory : " <<
m_context.locations->getPrivateStorageDir());
+
+ if (m_context.isUpdateMode) { //update
+ std::string backData = m_context.locations->getBackupPrivateDir();
+ LogDebug("copy private storage " << backData << " to " << storagePath);
+ WrtUtilMakeDir(storagePath);
+ if (!DirectoryApi::DirectoryCopy(backData, storagePath)) {
+ LogError("Failed to rename " << backData << " to " << storagePath);
+ ThrowMsg(Exceptions::BackupFailed,
+ "Error occurs copy private strage files");
+ }
+ }
changeOwnerForDirectory(storagePath);
}
void TaskFileManipulation::StepLinkForPreload()
{
- if (m_context.job->getInstallerStruct().m_installMode
- == InstallMode::INSTALL_MODE_PRELOAD)
- {
+ if (m_context.mode.rootPath == InstallMode::RootPath::RO) {
std::string srcDir = m_context.locations->getUserDataRootDir() +
WrtDB::GlobalConfig::GetWidgetSrcPath();
ThrowMsg(Exceptions::RemovingFolderFailure,
"Error occurs during removing existing folder");
}
+ // Remove user data directory if preload web app.
+ std::string userData = m_context.locations->getUserDataRootDir();
+ if (0 == access(userData.c_str(), F_OK)) {
+ if (!WrtUtilRemove(userData)) {
+ ThrowMsg(Exceptions::RemovingFolderFailure,
+ "Error occurs during removing user data directory");
+ }
+ }
+
}
LogDebug("Rename widget path sucessful!");
}
}
WidgetInstallToExtSingleton::Instance().deinitialize();
}
+
+void TaskFileManipulation::StepCreateSharedFolder()
+{
+ LogDebug("StepCreateSharedFolder");
+ std::string sharedPath = m_context.locations->getSharedRootDir();
+ LogDebug("Create shared directory : " <<
+ m_context.locations->getSharedRootDir());
+
+ WrtUtilMakeDir(sharedPath);
+
+ if (m_context.isUpdateMode) { //update
+ std::string backData = m_context.locations->getBackupSharedDir();
+ LogDebug("copy shared storage " << backData << " to " << sharedPath);
+ if (!DirectoryApi::DirectoryCopy(backData, sharedPath)) {
+ LogError("Failed to rename " << backData << " to " << sharedPath);
+ ThrowMsg(Exceptions::BackupFailed,
+ "Error occurs copy shared strage files");
+ }
+ } else {
+ WrtUtilMakeDir(m_context.locations->getSharedResourceDir());
+ WrtUtilMakeDir(m_context.locations->getSharedDataDir());
+ WrtUtilMakeDir(m_context.locations->getSharedTrustedDir());
+ }
+}
} //namespace WidgetInstall
} //namespace Jobs