* @brief Implementation file for main installer task
*/
#include <memory>
+#include <string>
+#include <sys/time.h>
+#include <ctime>
+#include <cstdlib>
+#include <limits.h>
+#include <regex.h>
#include <dpl/noncopyable.h>
#include <dpl/abstract_waitable_input_adapter.h>
#include <dpl/copy.h>
#include <dpl/assert.h>
#include <dpl/sstream.h>
-#include <dpl/wrt-dao-ro/common_dao_types.h>
#include <dpl/file_input.h>
#include <dpl/utils/wrt_utility.h>
+#include <dpl/wrt-dao-ro/common_dao_types.h>
+#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
+#include <dpl/wrt-dao-ro/global_config.h>
+#include <dpl/wrt-dao-rw/global_dao.h> // TODO remove
+#include <dpl/localization/w3c_file_localization.h>
+
+#include <libiriwrapper.h>
+#include <pkg-manager/pkgmgr_signal.h>
+#include <app_manager.h>
+#include <drm_client.h>
+#include <drm-oem-intel.h> //temporary code
+
#include "root_parser.h"
#include "widget_parser.h"
#include "parser_runner.h"
#include <widget_install/widget_install_errors.h>
#include <widget_install/widget_install_context.h>
-#include <string>
-#include <sys/time.h>
-#include <ctime>
-#include <cstdlib>
-#include <limits.h>
-#include <regex.h>
-#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
-#include <dpl/wrt-dao-ro/global_config.h>
-#include <dpl/wrt-dao-rw/global_dao.h> // TODO remove
-#include <dpl/localization/w3c_file_localization.h>
-#include <libiriwrapper.h>
-#include <pkg-manager/pkgmgr_signal.h>
-#include <app_manager.h>
-#include <drm_client.h>
-#include <drm-oem-intel.h> //temporary code
using namespace WrtDB;
//allowed: a-z, A-Z, 0-9
const char* REG_TIZENID_PATTERN = "^[a-zA-Z0-9]{10}$";
-const int MAX_TIZENID_LENGTH = 10;
static const DPL::String SETTING_VALUE_ENCRYPTION = L"encryption";
static const DPL::String SETTING_VALUE_ENCRYPTION_ENABLE = L"enable";
return result;
}
-std::string JobWidgetInstall::generateTizenId() {
- std::string allowed("0123456789"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz");
- std::string tizenId;
- tizenId.resize(MAX_TIZENID_LENGTH);
- for (int i = 0; i < MAX_TIZENID_LENGTH; ++i) {
- tizenId[i] = allowed[rand() % allowed.length()];
- }
- return tizenId;
-}
-
bool JobWidgetInstall::setTizenId(
const WrtDB::ConfigParserData &configInfo, ConfigureResult result)
{
m_installerContext.widgetConfig.pkgname = configInfo.tizenId;
} else {
- std::string tizenId = generateTizenId();
+ WidgetPkgName tizenId = WidgetDAOReadOnly::generateTizenId();
// only for installation, not for update
if (result == ConfigureResult::Ok) {
while (true) {
if (stat(newPath.str().c_str(), &dirStat) == 0) {
//path exist, chose another one
- tizenId = generateTizenId();
+ tizenId = WidgetDAOReadOnly::generateTizenId();
newPath.str("");
newPath << path << tizenId;
continue;
break;
}
- m_installerContext.widgetConfig.pkgname =
- DPL::FromUTF8String(tizenId);
+ m_installerContext.widgetConfig.pkgname = tizenId;
}
LogInfo("tizen_id name was generated by WRT: " << tizenId);
}
return true;
}
-DPL::OptionalString JobWidgetInstall::getNewTizenId() const
-{
- return m_installerContext.widgetConfig.pkgname;
-}
-
void JobWidgetInstall::configureWidgetLocation(const std::string & widgetPath,
const std::string& tempPath)
{
//inform widget info
JobWidgetInstall::displayWidgetInfo();
- DPL::OptionalString tizenId = getNewTizenId();
+ DPL::OptionalString & tizenId = m_installerContext.widgetConfig.pkgname;
// send signal of pkgmgr
PkgmgrSignalSingleton::Instance().sendSignal(
LogError("Error in installation step: " << m_exceptionCaught);
LogError("Message: " << m_exceptionMessage);
- DPL::OptionalString tizenId = getNewTizenId();
+ DPL::OptionalString & tizenId = m_installerContext.widgetConfig.pkgname;
LogDebug("Call widget install failure finishedCallback");
AddStep(&TaskDatabase::StepRegisterExternalFiles);
AddStep(&TaskDatabase::StepWrtDBInsert);
AddStep(&TaskDatabase::StepAceDBInsert);
+ AddStep(&TaskDatabase::StepRemoveExternalFiles);
AddAbortStep(&TaskDatabase::StepAbortDBInsert);
}
{
WidgetDAO dao(m_context.locations->getPkgname());
WrtDB::ExternalLocationList externalLocationsDB = dao.getWidgetExternalLocations();
- LogDebug("Removing external files:");
FOREACH(file, externalLocationsDB)
{
if(std::find(externalLocationsUpdate.begin(), externalLocationsUpdate.end(), *file) == externalLocationsUpdate.end())
{
- if(WrtUtilFileExists(*file))
- {
- LogDebug(" -> " << *file);
- remove(file->c_str());
- }
- else if(WrtUtilDirExists(*file))
- {
- LogDebug(" -> " << *file);
- if(!WrtUtilRemove(*file)){
- ThrowMsg(Exceptions::RemovingFolderFailure,
- "Failed to remove external directory");
- }
- }
- else
- {
- LogWarning(" -> " << *file << "(no such a path)");
- }
+ m_externalLocationsToRemove.push_back(*file);
}
}
}
LogDebug(" -> " << *file);
}
- //set external lcoations to be registered
+ //set external locations to be registered
m_context.widgetConfig.externalLocations = externalLocationsUpdate;
}
+void TaskDatabase::StepRemoveExternalFiles()
+{
+ if(!m_externalLocationsToRemove.empty())
+ {
+ LogDebug("Removing external files:");
+ }
+
+ FOREACH(file, m_externalLocationsToRemove)
+ {
+ if(WrtUtilFileExists(*file))
+ {
+ LogDebug(" -> " << *file);
+ remove(file->c_str());
+ }
+ else if(WrtUtilDirExists(*file))
+ {
+ LogDebug(" -> " << *file);
+ if(!WrtUtilRemove(*file)){
+ ThrowMsg(Exceptions::RemovingFolderFailure,
+ "Failed to remove external directory");
+ }
+ }
+ else
+ {
+ LogWarning(" -> " << *file << "(no such a path)");
+ }
+ }
+}
+
void TaskDatabase::StepAbortDBInsert()
{
LogWarning("[DB Update Task] Aborting... (DB Clean)");