const char kVconfLanguageKey[] = "db/menu_widget/language";
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::CreateDir(tmp_dir))
return false;
LOG(DEBUG) << "Unpack at temporary dir: " << tmp_dir;
- if (!ExtractPackageArchive(file_path, kConfigFileName, tmp_dir))
+ bool is_hybrid = false;
+ if (!ExtractPackageArchive(file_path, kHybridConfigFileName, tmp_dir))
return false;
+ if (bf::exists(tmp_dir / kHybridConfigFileName)) {
+ is_hybrid = true;
+ } else {
+ if (!ExtractPackageArchive(file_path, kConfigFileName, tmp_dir))
+ return false;
+ }
wgt::parse::WidgetConfigParser parser;
- bf::path manifest_path = tmp_dir / kConfigFileName;
+ bf::path manifest_path;
+ if (is_hybrid)
+ manifest_path = tmp_dir / kHybridConfigFileName;
+ else
+ manifest_path = tmp_dir / kConfigFileName;
if (!parser.ParseManifest(manifest_path)) {
LOG(ERROR) << "Failed to parse";
bf::remove_all(tmp_dir);
LOG(WARNING) << "Failed to get privileges info";
std::string icon = GetIconInfo(parser);
if (!icon.empty()) {
- if (!ExtractPackageArchive(file_path, icon.c_str(), tmp_dir)) {
+ std::string icon_path;
+ if (is_hybrid)
+ icon_path = "res/wgt/" + icon;
+ else
+ icon_path = icon;
+ if (!ExtractPackageArchive(file_path, icon_path.c_str(), tmp_dir)) {
bf::remove_all(tmp_dir);
return false;
}
- if (!ReadIcon(icon, tmp_dir, info)) {
+ if (!ReadIcon(icon_path, tmp_dir, info)) {
LOG(WARNING) << "Failed to get icon info";
bf::remove_all(tmp_dir);
return false;