X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fjobs%2Fwidget_install%2Ftask_manifest_file.cpp;h=33b1283dc05998e95697867bf8847180b4ca2c1b;hb=7fb83d1e97cd557be2a3b16edd5dc651a2d27306;hp=41767b0580be46b77b43818239094513767f40e2;hpb=5d574277e4e45cd5ca48ba76596644a23ff5dd40;p=framework%2Fweb%2Fwrt-installer.git diff --git a/src/jobs/widget_install/task_manifest_file.cpp b/src/jobs/widget_install/task_manifest_file.cpp index 41767b0..33b1283 100644 --- a/src/jobs/widget_install/task_manifest_file.cpp +++ b/src/jobs/widget_install/task_manifest_file.cpp @@ -33,6 +33,8 @@ #include #include #include +#include +#include #include #include #include @@ -109,6 +111,7 @@ TaskManifestFile::TaskManifestFile(InstallerContext &inCont) : // for widget update. AddStep(&TaskManifestFile::stepBackupIconFiles); AddStep(&TaskManifestFile::stepCopyIconFiles); + AddStep(&TaskManifestFile::stepCreateExecFile); AddStep(&TaskManifestFile::stepGenerateManifest); AddStep(&TaskManifestFile::stepParseUpgradedManifest); AddStep(&TaskManifestFile::stepUpdateFinalize); @@ -133,10 +136,15 @@ void TaskManifestFile::stepCreateExecFile() 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) @@ -146,30 +154,44 @@ void TaskManifestFile::stepCreateExecFile() "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) { + // 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"); @@ -286,8 +308,7 @@ void TaskManifestFile::stepBackupIconFiles() { LogDebug("Backup Icon Files"); - backup_dir << m_context.locations->getPackageInstallationDir(); - backup_dir << "/" << "backup" << "/"; + backup_dir << m_context.locations->getBackupDir() << "/"; backupIconFiles(); @@ -523,18 +544,22 @@ void TaskManifestFile::stepParseManifest() void TaskManifestFile::stepParseUpgradedManifest() { - int code = pkgmgr_parser_parse_manifest_for_upgrade( - DPL::ToUTF8String(manifest_file).c_str(), NULL); + if (m_context.widgetConfig.packagingType != + PKG_TYPE_HYBRID_WEB_APP) + { + int code = pkgmgr_parser_parse_manifest_for_upgrade( + DPL::ToUTF8String(manifest_file).c_str(), NULL); - if (code != 0) { - LogError("Manifest parser error: " << code); - ThrowMsg(Exceptions::ManifestInvalid, "Parser returncode: " << code); - } + if (code != 0) { + LogError("Manifest parser error: " << code); + ThrowMsg(Exceptions::ManifestInvalid, "Parser returncode: " << code); + } - m_context.job->UpdateProgress( - InstallerContext::INSTALL_CREATE_MANIFEST, - "Widget Manifest Parsing Finished"); - LogDebug("Manifest parsed"); + m_context.job->UpdateProgress( + InstallerContext::INSTALL_CREATE_MANIFEST, + "Widget Manifest Parsing Finished"); + LogDebug("Manifest parsed"); + } } void TaskManifestFile::commitManifest() @@ -542,7 +567,11 @@ void TaskManifestFile::commitManifest() LogDebug("Commiting manifest file : " << manifest_file); std::ostringstream destFile; - destFile << "/opt/share/packages" << "/"; //TODO constant with path + if (m_context.mode.rootPath == InstallMode::RootPath::RO) { + destFile << "/usr/share/packages" << "/"; //TODO constant with path + } else { + destFile << "/opt/share/packages" << "/"; //TODO constant with path + } destFile << DPL::ToUTF8String(manifest_name); LogInfo("cp " << manifest_file << " " << destFile.str()); @@ -562,31 +591,29 @@ void TaskManifestFile::writeManifest(const DPL::String & path) 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 - setAppServicesInfo(uiApp); - setAppControlsInfo(uiApp); -#endif setAppCategory(uiApp); + setMetadata(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); @@ -596,49 +623,35 @@ void TaskManifestFile::writeManifest(const DPL::String & path) 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); - + setMetadata(uiApp); 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; +#else + //default widget content + setWidgetExecPath(uiApp); + setWidgetName(manifest, uiApp); + setWidgetIds(manifest, uiApp); + setWidgetIcons(uiApp); + setWidgetDescription(manifest); + setWidgetManifest(manifest); + setWidgetOtherInfo(uiApp); + setAppControlsInfo(uiApp); + setAppCategory(uiApp); + setMetadata(uiApp); + setLiveBoxInfo(manifest); + setAccount(manifest); + setPrivilege(manifest); - uiApp.setTaskmanage(true); - uiApp.setNodisplay(true); -#ifdef MULTIPROCESS_SERVICE_SUPPORT_INLINE - uiApp.setTaskmanage(ConfigParserData::ServiceInfo::Disposition::INLINE != it->m_disposition); - uiApp.setMultiple(ConfigParserData::ServiceInfo::Disposition::INLINE == it->m_disposition); + manifest.addUiApplication(uiApp); #endif - 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"); } @@ -813,6 +826,39 @@ void TaskManifestFile::generateWidgetIcon(UiApplication & uiApp, m_context.job->SendProgressIconPath(iconPath.str()); } +void TaskManifestFile::setWidgetDescription(Manifest & manifest) +{ + FOREACH(localizedData, m_context.widgetConfig.configInfo.localizedDataSet) + { + Locale i = localizedData->first; + DPL::OptionalString tag = getLangTag(i); // translate en -> en_US etc + if (tag.IsNull()) { + tag = i; + } + DPL::OptionalString description = localizedData->second.description; + generateWidgetDescription(manifest, tag, description); + } +} + +void TaskManifestFile::generateWidgetDescription(Manifest & manifest, + const DPL::OptionalString& tag, + DPL::OptionalString description) +{ + if (!!description) { + if (!!tag) { + DPL::String locale = + LanguageTagsProvider::BCP47LanguageTagToLocale(*tag); + if (!locale.empty()) { + manifest.addDescription(DescriptionType(*description, locale)); + } else { + manifest.addDescription(DescriptionType(*description)); + } + } else { + manifest.addDescription(DescriptionType(*description)); + } + } +} + void TaskManifestFile::setWidgetManifest(Manifest & manifest) { manifest.setPackage(m_context.widgetConfig.tzPkgid); @@ -851,22 +897,6 @@ void TaskManifestFile::setWidgetOtherInfo(UiApplication & uiApp) //that were in desktop file } -void TaskManifestFile::setAppServicesInfo(UiApplication & uiApp) -{ - WrtDB::ConfigParserData::ServiceInfoList appServiceList = - m_context.widgetConfig.configInfo.appServiceList; - - if (appServiceList.empty()) { - LogInfo("Widget doesn't contain application service"); - return; - } - - // x-tizen-svc=http://tizen.org/appcontrol/operation/pick|NULL|image; - FOREACH(it, appServiceList) { - setAppServiceInfo(uiApp, *it); - } - } - void TaskManifestFile::setAppControlsInfo(UiApplication & uiApp) { WrtDB::ConfigParserData::AppControlInfoList appControlList = @@ -883,22 +913,6 @@ void TaskManifestFile::setAppControlsInfo(UiApplication & uiApp) } } -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) { @@ -936,6 +950,21 @@ void TaskManifestFile::setAppCategory(UiApplication &uiApp) } } +void TaskManifestFile::setMetadata(UiApplication &uiApp) +{ + WrtDB::ConfigParserData::MetadataList metadataList = + m_context.widgetConfig.configInfo.metadataList; + + if (metadataList.empty()) { + LogInfo("Web application doesn't contain metadata"); + return; + } + FOREACH(it, metadataList) { + MetadataType metadataType(it->key, it->value); + uiApp.addMetadata(metadataType); + } +} + void TaskManifestFile::stepAbortParseManifest() { LogError("[Parse Manifest] Abroting...."); @@ -1018,13 +1047,28 @@ void TaskManifestFile::setLiveBoxInfo(Manifest& manifest) } if (ConfigInfo->m_boxInfo.m_boxMouseEvent == L"true") { - box.boxMouseEvent = ConfigInfo->m_boxInfo.m_boxMouseEvent; + std::string boxType; + if (ConfigInfo->m_type == L"") { + // in case of default livebox + boxType = web_provider_livebox_get_default_type(); + } else { + boxType = DPL::ToUTF8String(ConfigInfo->m_type); + } + + int box_scrollable = + web_provider_plugin_get_box_scrollable(boxType.c_str()); + + if (box_scrollable) { + box.boxMouseEvent = L"true"; + } else { + box.boxMouseEvent = L"false"; + } } else { box.boxMouseEvent = L"false"; } if (ConfigInfo->m_boxInfo.m_boxTouchEffect == L"true") { - box.boxTouchEffect = ConfigInfo->m_boxInfo.m_boxTouchEffect; + box.boxTouchEffect = L"true"; } else { box.boxTouchEffect= L"false"; }