std::string exec = m_context.locations->getExecFile();
std::string clientExeStr = GlobalConfig::GetWrtClientExec();
+ //default widget
LogInfo("link -s " << clientExeStr << " " << exec);
-
errno = 0;
- if (symlink(clientExeStr.c_str(), exec.c_str()) != 0)
+ if (symlink(clientExeStr.c_str(), exec.c_str()) != 0)
{
int error = errno;
- if(error)
+ if (error)
LogPedantic("Failed to make a symbolic name for a file "
<< "[" << DPL::GetErrnoString(error) << "]");
ThrowMsg(Exceptions::FileOperationFailed,
"Symbolic link creating is not done.");
}
+
+#ifdef MULTIPROCESS_SERVICE_SUPPORT
+ //services
+ std::size_t serviceCount =
+ m_context.widgetConfig.configInfo.appControlList.size();
+ serviceCount += m_context.widgetConfig.configInfo.appServiceList.size();
+ for (std::size_t i = 0; i < serviceCount; ++i) {
+ std::stringstream postfix;
+ postfix << "-__SERVICE_PROCESS__" << i;
+ std::string serviceExec = exec;
+ serviceExec.append(postfix.str());
+ errno = 0;
+ if (symlink(clientExeStr.c_str(), serviceExec.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;
+ //default widget content
setWidgetExecPath(uiApp);
setWidgetName(manifest, uiApp);
+ setWidgetIds(manifest, uiApp);
setWidgetIcons(uiApp);
setWidgetManifest(manifest);
setWidgetOtherInfo(uiApp);
- setAppServiceInfo(uiApp);
- setAppControlInfo(uiApp);
+#ifndef MULTIPROCESS_SERVICE_SUPPORT
+ setAppServicesInfo(uiApp);
+ setAppControlsInfo(uiApp);
+#endif
setAppCategory(uiApp);
setLiveBoxInfo(manifest);
setAccount(manifest);
setPrivilege(manifest);
manifest.addUiApplication(uiApp);
+#ifdef MULTIPROCESS_SERVICE_SUPPORT
+ //services AppControl tag
+ ConfigParserData::AppControlInfoList appControlList =
+ m_context.widgetConfig.configInfo.appControlList;
+ unsigned count = 0;
+
+ FOREACH(it, appControlList) {
+ it->m_index = count;
+ UiApplication uiApp;
+
+ uiApp.setTaskmanage(true);
+ uiApp.setNodisplay(true);
+
+ std::stringstream postfix;
+ postfix << "-__SERVICE_PROCESS__" << count++;
+
+ setWidgetExecPath(uiApp, postfix.str());
+ setWidgetName(manifest, uiApp);
+ setWidgetIds(manifest, uiApp, postfix.str());
+ setWidgetIcons(uiApp);
+ setAppControlInfo(uiApp, *it);
+ setAppCategory(uiApp);
+ setAccount(manifest);
+ setPrivilege(manifest);
+
+ manifest.addUiApplication(uiApp);
+ }
+ //TODO: AppService tag will be removed
+ //services AppService tag
+ WrtDB::ConfigParserData::ServiceInfoList appServiceList =
+ m_context.widgetConfig.configInfo.appServiceList;
+ FOREACH(it, appServiceList) {
+ it->m_index = count;
+ UiApplication uiApp;
+
+ uiApp.setTaskmanage(true);
+ uiApp.setNodisplay(true);
+
+ std::stringstream postfix;
+ postfix << "-__SERVICE_PROCESS__" << count++;
+
+ setWidgetExecPath(uiApp, postfix.str());
+ setWidgetName(manifest, uiApp);
+ setWidgetIds(manifest, uiApp, postfix.str());
+ setWidgetIcons(uiApp);
+ setAppServiceInfo(uiApp, *it);
+ setAppCategory(uiApp);
+ setAccount(manifest);
+ setPrivilege(manifest);
+
+ manifest.addUiApplication(uiApp);
+ }
+#endif
manifest.generate(path);
LogDebug("Manifest file serialized");
}
-void TaskManifestFile::setWidgetExecPath(UiApplication & uiApp)
+void TaskManifestFile::setWidgetExecPath(UiApplication & uiApp,
+ const std::string &postfix)
{
- uiApp.setExec(DPL::FromASCIIString(m_context.locations->getExecFile()));
+ std::string exec = m_context.locations->getExecFile();
+ if (!postfix.empty()) {
+ exec.append(postfix);
+ }
+ LogDebug("exec = " << exec);
+ uiApp.setExec(DPL::FromASCIIString(exec));
}
-void TaskManifestFile::setWidgetName(Manifest & manifest, UiApplication & uiApp)
+void TaskManifestFile::setWidgetName(Manifest & manifest,
+ UiApplication & uiApp)
{
bool defaultNameSaved = false;
name,
defaultNameSaved);
}
+}
+
+void TaskManifestFile::setWidgetIds(Manifest & manifest,
+ UiApplication & uiApp,
+ const std::string &postfix)
+{
//appid
TizenAppId appid = m_context.widgetConfig.tzAppid;
+ if (!postfix.empty()) {
+ appid = DPL::FromUTF8String(DPL::ToUTF8String(appid).append(postfix));
+ }
uiApp.setAppid(appid);
//extraid
//that were in desktop file
}
-void TaskManifestFile::setAppServiceInfo(UiApplication & uiApp)
+void TaskManifestFile::setAppServicesInfo(UiApplication & uiApp)
{
WrtDB::ConfigParserData::ServiceInfoList appServiceList =
m_context.widgetConfig.configInfo.appServiceList;
// x-tizen-svc=http://tizen.org/appcontrol/operation/pick|NULL|image;
FOREACH(it, appServiceList) {
- AppControl appControl;
- if (!it->m_operation.empty()) {
- appControl.addOperation(it->m_operation); //TODO: encapsulation?
- }
- if (!it->m_scheme.empty()) {
- appControl.addUri(it->m_scheme);
- }
- if (!it->m_mime.empty()) {
- appControl.addMime(it->m_mime);
- }
- uiApp.addAppControl(appControl);
- }
-}
+ setAppServiceInfo(uiApp, *it);
+ }
+ }
-void TaskManifestFile::setAppControlInfo(UiApplication & uiApp)
+void TaskManifestFile::setAppControlsInfo(UiApplication & uiApp)
{
WrtDB::ConfigParserData::AppControlInfoList appControlList =
m_context.widgetConfig.configInfo.appControlList;
return;
}
- // x-tizen-svc=http://tizen.org/appcontrol/operation/pick|NULL|image;
+ // x-tizen-svc=http://tizen.org/appcontrol/operation/pick|NULL|image;
FOREACH(it, appControlList) {
- AppControl appControl;
- if (!it->m_operation.empty()) {
- appControl.addOperation(it->m_operation); //TODO: encapsulation?
- }
- if (!it->m_uriList.empty()) {
- FOREACH(uri, it->m_uriList) {
- appControl.addUri(*uri);
- }
+ setAppControlInfo(uiApp, *it);
+ }
+}
+
+void TaskManifestFile::setAppServiceInfo(UiApplication & uiApp,
+ const ConfigParserData::ServiceInfo & service)
+{
+ AppControl appControl;
+ if (!service.m_operation.empty()) {
+ appControl.addOperation(service.m_operation); //TODO: encapsulation?
+ }
+ if (!service.m_scheme.empty()) {
+ appControl.addUri(service.m_scheme);
+ }
+ if (!service.m_mime.empty()) {
+ appControl.addMime(service.m_mime);
+ }
+ uiApp.addAppControl(appControl);
+}
+
+void TaskManifestFile::setAppControlInfo(UiApplication & uiApp,
+ const WrtDB::ConfigParserData::AppControlInfo & service)
+{
+ // x-tizen-svc=http://tizen.org/appcontrol/operation/pick|NULL|image;
+ AppControl appControl;
+ if (!service.m_operation.empty()) {
+ appControl.addOperation(service.m_operation); //TODO: encapsulation?
+ }
+ if (!service.m_uriList.empty()) {
+ FOREACH(uri, service.m_uriList) {
+ appControl.addUri(*uri);
}
- if (!it->m_mimeList.empty()) {
- FOREACH(mime, it->m_mimeList) {
- appControl.addMime(*mime);
- }
+ }
+ if (!service.m_mimeList.empty()) {
+ FOREACH(mime, service.m_mimeList) {
+ appControl.addMime(*mime);
}
- uiApp.addAppControl(appControl);
}
+ uiApp.addAppControl(appControl);
}
void TaskManifestFile::setAppCategory(UiApplication &uiApp)