From 04ce61f1db1f72818e982cd1cb4fb251546c2ab4 Mon Sep 17 00:00:00 2001 From: Pawel Andruszkiewicz Date: Mon, 22 Dec 2014 15:21:40 +0100 Subject: [PATCH] [Archive] Added support for widget paths. [Verification] TCT pass rate 80/106. Change-Id: If0e2c62fd63aaf6ec07704deb3abe35b75ac7880 Signed-off-by: Pawel Andruszkiewicz --- src/archive/archive_api.js | 17 +++++++++++++++++ src/archive/archive_instance.cc | 34 +++++++++++++++++++++++++++++++++ src/archive/archive_instance.h | 3 +++ 3 files changed, 54 insertions(+) diff --git a/src/archive/archive_api.js b/src/archive/archive_api.js index 0d0e71c8..c54bdb89 100644 --- a/src/archive/archive_api.js +++ b/src/archive/archive_api.js @@ -29,6 +29,23 @@ CommonFS.cacheVirtualToReal = { } }; +function _initializeCache() { + var result = bridge.sync({ + cmd: 'Filesystem_getWidgetPaths' + }); + CommonFS.cacheVirtualToReal['wgt-package'] = { + path: result['wgt-package'] + }; + CommonFS.cacheVirtualToReal['wgt-private'] = { + path: result['wgt-private'] + }; + CommonFS.cacheVirtualToReal['wgt-private-tmp'] = { + path: result['wgt-private-tmp'] + }; +} + +_initializeCache(); + CommonFS.toRealPath = function(aPath) { var _fileRealPath = '', _uriPrefix = 'file://', i; if (aPath.indexOf(_uriPrefix) === 0) { diff --git a/src/archive/archive_instance.cc b/src/archive/archive_instance.cc index 13cbc0da..dc88057e 100644 --- a/src/archive/archive_instance.cc +++ b/src/archive/archive_instance.cc @@ -10,6 +10,9 @@ #include #include +#include + +#include "common/current_application.h" #include "common/picojson.h" #include "common/logger.h" #include "common/platform_exception.h" @@ -24,6 +27,7 @@ namespace archive { using namespace common; + ArchiveInstance& ArchiveInstance::getInstance() { static ArchiveInstance instance; @@ -50,6 +54,8 @@ ArchiveInstance::ArchiveInstance() { REGISTER_ASYNC("ArchiveFileEntry_extract", Extract); + REGISTER_SYNC("Filesystem_getWidgetPaths", GetWidgetPaths); + #undef REGISTER_ASYNC #undef REGISTER_SYNC } @@ -411,5 +417,33 @@ void ArchiveInstance::Extract(const picojson::value& args, picojson::object& out } } +void ArchiveInstance::GetWidgetPaths(const picojson::value& args, picojson::object& out) { + char *root_path = NULL; + std::string pkg_id = CurrentApplication::GetInstance().GetPackageId(); + + pkgmgrinfo_pkginfo_h handle = NULL; + if (PMINFO_R_OK != pkgmgrinfo_pkginfo_get_pkginfo(pkg_id.c_str(), &handle)) { + throw UnknownException("Error while getting package info"); + } + + if (PMINFO_R_OK != pkgmgrinfo_pkginfo_get_root_path(handle, &root_path)) { + throw UnknownException("Error while getting package info"); + } + + // Construction of the response + std::string root(root_path); + LoggerD("root path: %s", root_path); + + pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + + picojson::value result{picojson::object()}; + auto& result_obj = result.get(); + result_obj.insert(std::make_pair("wgt-package", root + "/res/wgt")); + result_obj.insert(std::make_pair("wgt-private", root + "/data")); + result_obj.insert(std::make_pair("wgt-private-tmp", root + "/tmp")); + + ReportSuccess(result, out); +} + } // namespace archive } // namespace extension diff --git a/src/archive/archive_instance.h b/src/archive/archive_instance.h index e21ec5f4..6cdfe149 100644 --- a/src/archive/archive_instance.h +++ b/src/archive/archive_instance.h @@ -33,6 +33,9 @@ private: /* ArchiveFileEntry methods */ void Extract(const picojson::value& args, picojson::object& out); + + /* Filesystem related method */ + void GetWidgetPaths(const picojson::value& args, picojson::object& out); }; } // namespace archive -- 2.34.1