ConfigParserData::AppControlInfo& m_data;
};
- struct DispositionParser : public ElementParser
- {
- public:
- virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
- const DPL::String& /*name*/)
- {
- return &IgnoringParser::Create;
- }
-
- virtual void Accept(const Text& /*text*/)
- {}
-
- virtual void Accept(const Element& /*element*/)
- {}
-
- virtual void Accept(const XmlAttribute& attribute)
- {
- if (attribute.name == L"disposition") {
- if (attribute.value.size() > 0) {
- m_value = attribute.value;
- NormalizeString(m_value);
- }
- }
- }
-
- virtual void Verify()
- {
- if (m_value.IsNull() || *m_value != L"inline") {
- m_data.m_disposition = ConfigParserData::AppControlInfo::Disposition::WINDOW;
- }
- else {
- m_data.m_disposition = ConfigParserData::AppControlInfo::Disposition::INLINE;
- }
- }
-
- DispositionParser(ConfigParserData::AppControlInfo& data) :
- ElementParser(),
- m_properNamespace(false),
- m_data(data)
- {}
-
- private:
- bool m_properNamespace;
- DPL::OptionalString m_value;
- ConfigParserData::AppControlInfo& m_data;
- };
-
virtual ActionFunc GetElementParser(const DPL::String& /*ns*/,
const DPL::String& name)
{
return DPL::MakeDelegate(this, &AppControlParser::OnUriElement);
} else if (name == L"mime") {
return DPL::MakeDelegate(this, &AppControlParser::OnMimeElement);
- } else if (name == L"disposition") {
- return DPL::MakeDelegate(this,
- &AppControlParser::OnDispositionElement);
} else {
return &IgnoringParser::Create;
}
return ElementParserPtr(new MimeParser(m_appControl));
}
- ElementParserPtr OnDispositionElement()
- {
- return ElementParserPtr(new DispositionParser(m_appControl));
- }
-
AppControlParser(ConfigParserData& data) :
ElementParser(),
m_data(data),
std::string exec = m_context.locations->getExecFile();
std::string clientExeStr = GlobalConfig::GetWrtClientExec();
+#ifdef MULTIPROCESS_SERVICE_SUPPORT
//default widget
- LogInfo("link -s " << clientExeStr << " " << exec);
+ std::stringstream postfix;
+ postfix << AppControlPrefix::PROCESS_PREFIX << 0;
+ std::string controlExec = exec;
+ controlExec.append(postfix.str());
+
errno = 0;
- if (symlink(clientExeStr.c_str(), exec.c_str()) != 0)
+ if (symlink(clientExeStr.c_str(), controlExec.c_str()) != 0)
{
int error = errno;
if (error)
"Symbolic link creating is not done.");
}
-#ifdef MULTIPROCESS_SERVICE_SUPPORT
- //services
- std::size_t appcontrolCount =
- m_context.widgetConfig.configInfo.appControlList.size();
- for (std::size_t i = 0; i < appcontrolCount; ++i) {
+ // app-control widgets
+ unsigned int indexMax = 0;
+ FOREACH(it, m_context.widgetConfig.configInfo.appControlList) {
+ if (it->m_index > indexMax) {
+ indexMax = it->m_index;
+ }
+ }
+
+ for (std::size_t i = 1; i <= indexMax; ++i) {
std::stringstream postfix;
- postfix << "-__SERVICE_PROCESS__" << i;
- std::string serviceExec = exec;
- serviceExec.append(postfix.str());
+ postfix << AppControlPrefix::PROCESS_PREFIX << i;
+ std::string controlExec = exec;
+ controlExec.append(postfix.str());
errno = 0;
- if (symlink(clientExeStr.c_str(), serviceExec.c_str()) != 0)
- {
+ if (symlink(clientExeStr.c_str(), controlExec.c_str()) != 0) {
int error = errno;
- if (error)
+ if (error) {
LogPedantic("Failed to make a symbolic name for a file "
- << "[" << DPL::GetErrnoString(error) << "]");
+ << "[" << DPL::GetErrnoString(error) << "]");
+ }
ThrowMsg(Exceptions::FileOperationFailed,
- "Symbolic link creating is not done.");
+ "Symbolic link creating is not done.");
}
-
+ }
+#else
+ //default widget
+ LogInfo("link -s " << clientExeStr << " " << exec);
+ errno = 0;
+ if (symlink(clientExeStr.c_str(), exec.c_str()) != 0)
+ {
+ int error = errno;
+ if (error)
+ LogPedantic("Failed to make a symbolic name for a file "
+ << "[" << DPL::GetErrnoString(error) << "]");
+ ThrowMsg(Exceptions::FileOperationFailed,
+ "Symbolic link creating is not done.");
}
#endif
-
m_context.job->UpdateProgress(
InstallerContext::INSTALL_CREATE_EXECFILE,
"Widget execfile creation Finished");
Manifest manifest;
UiApplication uiApp;
+#ifdef MULTIPROCESS_SERVICE_SUPPORT
//default widget content
- setWidgetExecPath(uiApp);
+ std::stringstream postfix;
+ // index 0 is reserved
+ postfix << AppControlPrefix::PROCESS_PREFIX << 0;
+ setWidgetExecPath(uiApp, postfix.str());
setWidgetName(manifest, uiApp);
setWidgetIds(manifest, uiApp);
setWidgetIcons(uiApp);
setWidgetDescription(manifest);
setWidgetManifest(manifest);
setWidgetOtherInfo(uiApp);
-#ifndef MULTIPROCESS_SERVICE_SUPPORT
- setAppControlsInfo(uiApp);
-#endif
setAppCategory(uiApp);
setLiveBoxInfo(manifest);
setAccount(manifest);
setPrivilege(manifest);
-
manifest.addUiApplication(uiApp);
-#ifdef MULTIPROCESS_SERVICE_SUPPORT
- //services AppControl tag
+
+ //app-control content
ConfigParserData::AppControlInfoList appControlList =
m_context.widgetConfig.configInfo.appControlList;
- unsigned count = 0;
-
FOREACH(it, appControlList) {
- it->m_index = count;
UiApplication uiApp;
uiApp.setTaskmanage(true);
uiApp.setMultiple(ConfigParserData::AppControlInfo::Disposition::INLINE == it->m_disposition);
#endif
std::stringstream postfix;
- postfix << "-__SERVICE_PROCESS__" << count++;
-
+ postfix << AppControlPrefix::PROCESS_PREFIX << it->m_index;
setWidgetExecPath(uiApp, postfix.str());
setWidgetName(manifest, uiApp);
- setWidgetIds(manifest, uiApp, postfix.str());
+ setWidgetIds(manifest, uiApp);
setWidgetIcons(uiApp);
setAppControlInfo(uiApp, *it);
setAppCategory(uiApp);
- setAccount(manifest);
- setPrivilege(manifest);
-
manifest.addUiApplication(uiApp);
}
+#else
+ //default widget content
+ setWidgetExecPath(uiApp);
+ setWidgetName(manifest, uiApp);
+ setWidgetIds(manifest, uiApp);
+ setWidgetIcons(uiApp);
+ setWidgetManifest(manifest);
+ setWidgetOtherInfo(uiApp);
+ setAppControlsInfo(uiApp);
+ setAppCategory(uiApp);
+ setLiveBoxInfo(manifest);
+ setAccount(manifest);
+ setPrivilege(manifest);
+
+ manifest.addUiApplication(uiApp);
#endif
+
manifest.generate(path);
LogDebug("Manifest file serialized");
}
* @brief Implementation file for installer task widget config
*/
+#include <map>
#include <sstream>
#include <string>
#include <sys/stat.h>
AddStep(&TaskWidgetConfig::ProcessBackgroundPageFile);
AddStep(&TaskWidgetConfig::ProcessLocalizedIcons);
AddStep(&TaskWidgetConfig::ProcessWidgetInstalledPath);
+ AddStep(&TaskWidgetConfig::ProcessAppControlInfo);
AddStep(&TaskWidgetConfig::StepVerifyFeatures);
AddStep(&TaskWidgetConfig::StepCheckMinVersionInfo);
}
ProcessStartFile(S(L"index.svg"), S(L"image/svg+xml"));
ProcessStartFile(S(L"index.xhtml"), S(L"application/xhtml+xml"));
ProcessStartFile(S(L"index.xht"), S(L"application/xhtml+xml"));
- // TODO: (l.wrzosek) we need better check if in current locales widget is
- // valid.
+ // TODO: we need better check if in current locales widget is valid
FOREACH(it, m_installContext.widgetConfig.localizationData.startFiles) {
if (it->propertiesForLocales.size() > 0) {
return;
m_installContext.locations->getPackageInstallationDir());
}
+void TaskWidgetConfig::ProcessAppControlInfo()
+{
+ LogDebug("ProcessAppControlInfo");
+ using namespace WrtDB;
+
+ WrtDB::ConfigParserData::AppControlInfo::Disposition disposition =
+ WrtDB::ConfigParserData::AppControlInfo::Disposition::WINDOW;
+ FOREACH(it, m_installContext.widgetConfig.configInfo.settingsList) {
+ if (!strcmp(DPL::ToUTF8String(it->m_name).c_str(), "nodisplay") &&
+ !strcmp(DPL::ToUTF8String(it->m_value).c_str(), "true"))
+ {
+ disposition =
+ WrtDB::ConfigParserData::AppControlInfo::Disposition::INLINE;
+ }
+ }
+
+ std::map<std::string, int> srcMap;
+ int index = 0;
+ // index = 0 is reserved for start file
+ FOREACH(startFileIt, m_installContext.widgetConfig.localizationData.startFiles)
+ {
+ if (!startFileIt->propertiesForLocales.empty()) {
+ std::string src = DPL::ToUTF8String(startFileIt->path);
+ if (srcMap.find(src) == srcMap.end()) {
+ LogDebug("Insert [" << src << "," << index << "]");
+ srcMap.insert(std::pair<std::string, int>(src, index++));
+ }
+ }
+ }
+
+ FOREACH(appControlIt, m_installContext.widgetConfig.configInfo.appControlList)
+ {
+ appControlIt->m_disposition = disposition;
+ std::string src = DPL::ToUTF8String(appControlIt->m_src);
+ LogDebug("src = [" << src << "]");
+ std::map<std::string, int>::iterator findIt = srcMap.find(src);
+ if (findIt == srcMap.end()) {
+ LogDebug("Insert [" << src << "," << index << "]");
+ srcMap.insert(std::pair<std::string, int>(src, index));
+ appControlIt->m_index = index++;
+ } else {
+ LogDebug("Exist [" << src << "," << findIt->second << "]");
+ appControlIt->m_index = findIt->second;
+ }
+ }
+}
+
void TaskWidgetConfig::StepCheckMinVersionInfo()
{
if (!isMinVersionCompatible(