#include "lib/wgt_archive_info.h"
-#include <package-manager-plugin.h>
-#include <pkgmgr-info.h>
#include <vconf.h>
+#include <boost/filesystem/path.hpp>
+
#include <wgt_manifest_handlers/widget_config_parser.h>
#include <wgt_manifest_handlers/application_icons_handler.h>
#include <wgt_manifest_handlers/application_manifest_constants.h>
#include <common/utils/file_util.h>
-#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <string>
const char kConfigFileName[] = "config.xml";
const char kHybridConfigFileName[] = "res/wgt/config.xml";
-bool ExtractPackageArchive(const char* file_path, const char* file,
- const bf::path& tmp_dir) {
- if (!ci::ExtractToTmpDir(file_path, tmp_dir, file)) {
+bool ExtractPackageArchive(const std::string& file_path,
+ const std::string& file, const bf::path& tmp_dir) {
+ if (!ci::ExtractToTmpDir(file_path.c_str(), tmp_dir, file.c_str())) {
LOG(ERROR) << "Failed to extract";
return false;
}
return true;
}
-bool GetPackageInfo(const wgt::parse::WidgetConfigParser& parser,
- package_manager_pkg_detail_info_t* info) {
+} // namespace
+
+bool WgtArchiveInfo::GetPackageInfo(
+ const wgt::parse::WidgetConfigParser& parser) {
auto widget_info =
std::static_pointer_cast<const wgt::parse::WidgetInfo>(
parser.GetManifestData(wgt::parse::WidgetInfo::Key()));
return false;
}
- snprintf(info->pkg_type, sizeof(info->pkg_type), "wgt");
- snprintf(info->version, sizeof(info->version), "%s",
- widget_info->version().c_str());
- snprintf(info->author, sizeof(info->version), "%s",
- widget_info->author().c_str());
-
- snprintf(info->pkg_name, sizeof(info->pkg_name), "%s",
- app_info->package().c_str());
- snprintf(info->pkgid, sizeof(info->pkgid), "%s", app_info->package().c_str());
- snprintf(info->api_version, sizeof(info->api_version), "%s",
- app_info->required_version().c_str());
+ type_ = "wgt";
+ name_ = app_info->package().c_str();
+ pkgid_ = app_info->package().c_str();
+ version_ = widget_info->version().c_str();
+ api_version_ = app_info->required_version().c_str();
+ author_ = widget_info->author().c_str();
return true;
}
-bool GetPrivilegesInfo(const wgt::parse::WidgetConfigParser& parser,
- package_manager_pkg_detail_info_t* info) {
+bool WgtArchiveInfo::GetPrivilegesInfo(
+ const wgt::parse::WidgetConfigParser& parser) {
auto privileges_info =
std::static_pointer_cast<const wgt::parse::PermissionsInfo>(
parser.GetManifestData(wgt::parse::PermissionsInfo::Key()));
return false;
const auto& privileges = privileges_info->GetAPIPermissions();
- for (auto& priv : privileges) {
- info->privilege_list = g_list_append(info->privilege_list,
- strdup(priv.c_str()));
+ for (auto& priv : privileges)
+ privileges_.emplace_back("wgt", priv);
+
+ return true;
+}
+
+bool WgtArchiveInfo::GetIconInfo(
+ const wgt::parse::WidgetConfigParser& parser) {
+ auto icons_info =
+ std::static_pointer_cast<const wgt::parse::ApplicationIconsInfo>(
+ parser.GetManifestData(wgt::parse::ApplicationIconsInfo::Key()));
+ if (!icons_info || icons_info->icons().empty())
+ return false;
+
+ icon_ = icons_info->icons().front().path();
+
+ return true;
+}
+
+bool WgtArchiveInfo::ReadIcon(const bf::path& icon, const bf::path& tmp_dir) {
+ bf::path icon_path = tmp_dir / icon;
+
+ LOG(INFO) << "Icon file path: " << icon_path;
+
+ if (!bf::exists(icon_path)) {
+ LOG(WARNING) << "Icon file doesn't actually exist, skip reading icon";
+ return true;
}
+ std::ifstream ifs(icon_path.c_str(),
+ std::ifstream::in | std::ifstream::binary);
+ ifs.seekg(0, ifs.end);
+ std::streamoff len = ifs.tellg();
+ ifs.seekg(0, ifs.beg);
+
+ if (len <= 0)
+ return false;
+
+ icon_buf_.resize(len / sizeof(unsigned char));
+ ifs.read(reinterpret_cast<char*>(icon_buf_.data()), len);
+ if (len != icon_buf_.size()) {
+ LOG(ERROR) << "Reading icon failed, icon size is: " << len
+ << ", but read size is: " << icon_buf_.size();
+ return false;
+ }
+
+ LOG(INFO) << "Reading icon file, " << icon_buf_.size() << " bytes";
+
return true;
}
-bool GetLabelInfo(const wgt::parse::WidgetConfigParser& parser,
- const char* locale, package_manager_pkg_detail_info_t* info) {
+bool WgtArchiveInfo::GetLabelInfo(const wgt::parse::WidgetConfigParser& parser,
+ const char* locale) {
auto widget_info =
std::static_pointer_cast<const wgt::parse::WidgetInfo>(
parser.GetManifestData(wgt::parse::WidgetInfo::Key()));
const auto& labels = widget_info->name_set();
if (labels.find(locale) != labels.end()) {
name = labels.find(locale)->second;
- snprintf(info->label, sizeof(info->label), "%s", name.c_str());
+ label_ = name;
return true;
} else if (labels.find("") != labels.end()) {
name = labels.find("")->second;
- snprintf(info->label, sizeof(info->label), "%s", name.c_str());
+ label_ = name;
return true;
}
return false;
}
-bool GetDescriptionInfo(const wgt::parse::WidgetConfigParser& parser,
- const char* locale, package_manager_pkg_detail_info_t* info) {
+bool WgtArchiveInfo::GetDescriptionInfo(
+ const wgt::parse::WidgetConfigParser& parser, const char* locale) {
auto widget_info =
std::static_pointer_cast<const wgt::parse::WidgetInfo>(
parser.GetManifestData(wgt::parse::WidgetInfo::Key()));
const auto& descriptions = widget_info->description_set();
if (descriptions.find(locale) != descriptions.end()) {
desc = descriptions.find(locale)->second;
- snprintf(info->pkg_description, sizeof(info->pkg_description), "%s",
- desc.c_str());
+ description_ = desc;
return true;
} else if (descriptions.find("") != descriptions.end()) {
desc = descriptions.find("")->second;
- snprintf(info->pkg_description, sizeof(info->pkg_description), "%s",
- desc.c_str());
+ description_ = desc;
return true;
}
return false;
}
-bool ReadIcon(const bf::path& icon, const bf::path& tmp_dir,
- package_manager_pkg_detail_info_t* info) {
- bf::path icon_path = tmp_dir / icon;
-
- LOG(INFO) << "Icon file path: " << icon_path;
-
- if (!bf::exists(icon_path)) {
- LOG(WARNING) << "Icon file doesn't actually exist, skip reading icon";
- return true;
- }
-
- std::ifstream ifs(icon_path.c_str(),
- std::ifstream::in | std::ifstream::binary);
- ifs.seekg(0, ifs.end);
- int len = ifs.tellg();
- ifs.seekg(0, ifs.beg);
-
- if (len <= 0)
- return false;
-
- char* buf = static_cast<char*>(malloc(sizeof(char) * len));
-
- LOG(INFO) << "Reading icon file, " << len << " bytes";
- ifs.read(buf, len);
-
- info->icon_buf = buf;
- info->icon_size = len;
-
- return true;
-}
-
-std::string GetIconInfo(const wgt::parse::WidgetConfigParser& parser) {
- auto icons_info =
- std::static_pointer_cast<const wgt::parse::ApplicationIconsInfo>(
- parser.GetManifestData(wgt::parse::ApplicationIconsInfo::Key()));
- if (!icons_info || icons_info->icons().empty())
- return {};
-
- return std::string(icons_info->icons().front().path());
-}
-
-} // namespace
-
-bool WgtArchiveInfo::GetArchiveInfo(const char* file_path,
- package_manager_pkg_detail_info_t* info) {
+bool WgtArchiveInfo::LoadArchiveInfo() {
bf::path tmp_dir = ci::GenerateTmpDir("/tmp");
if (!ci::CreateDir(tmp_dir))
return false;
LOG(DEBUG) << "Unpack at temporary dir: " << tmp_dir;
bool is_hybrid = false;
- if (!ExtractPackageArchive(file_path, kHybridConfigFileName, tmp_dir))
+ if (!ExtractPackageArchive(path_, kHybridConfigFileName, tmp_dir))
return false;
if (bf::exists(tmp_dir / kHybridConfigFileName)) {
is_hybrid = true;
} else {
- if (!ExtractPackageArchive(file_path, kConfigFileName, tmp_dir))
+ if (!ExtractPackageArchive(path_, kConfigFileName, tmp_dir))
return false;
}
return false;
}
- if (!GetPackageInfo(parser, info)) {
+ if (!GetPackageInfo(parser)) {
LOG(ERROR) << "Failed to get package info";
bf::remove_all(tmp_dir);
return false;
}
- if (!GetPrivilegesInfo(parser, info))
+ if (!GetPrivilegesInfo(parser))
LOG(WARNING) << "Failed to get privileges info";
- std::string icon = GetIconInfo(parser);
- if (!icon.empty()) {
+ if (!GetIconInfo(parser))
+ LOG(WARNING) << "Failed to get icon info";
+ if (!icon_.empty()) {
std::string icon_path;
if (is_hybrid)
- icon_path = "res/wgt/" + icon;
+ icon_path = "res/wgt/" + icon_;
else
- icon_path = icon;
- if (!ExtractPackageArchive(file_path, icon_path.c_str(), tmp_dir)) {
+ icon_path = icon_;
+ if (!ExtractPackageArchive(path_, icon_path, tmp_dir)) {
bf::remove_all(tmp_dir);
return false;
}
- if (!ReadIcon(icon_path, tmp_dir, info)) {
+ if (!ReadIcon(icon_path, tmp_dir)) {
LOG(WARNING) << "Failed to get icon info";
bf::remove_all(tmp_dir);
return false;
char* locale = vconf_get_str(kVconfLanguageKey);
if (!locale)
locale = strdup("");
- if (!GetLabelInfo(parser, locale, info))
+ if (!GetLabelInfo(parser, locale))
LOG(WARNING) << "Failed to get label info";
- if (!GetDescriptionInfo(parser, locale, info))
+ if (!GetDescriptionInfo(parser, locale))
LOG(WARNING) << "Failed to get description info";
free(locale);