blob: 671d1404172fd40cdb74adb9f730e346bdb22816 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#include "core/bridge/eagle_bridge_ext.h"
#include "third_party/json11/json11.hpp"
#include "core/manager/weex_core_manager.h"
#ifdef OS_ANDROID
#include "wson/wson.h"
#include "android/utils/params_utils.h"
#include "base/string_util.h"
#endif
namespace WeexCore {
namespace EagleExt{
std::function<void(const char*, const char*)> CreatePageDownloadExec(const char* instanceId,
const char* func,
const char* script,
int script_length,
const char* opts,
const char* initData,
const char* extendsApi){
std::function<void(const char*, const char*)> exec_js =
[instanceId = std::string(instanceId), func = std::string(func),
opts = std::string(opts), initData = std::string(initData),
extendsApi = std::string(extendsApi)](const char* result, const char* bundleType) {
std::string error;
auto opts_json = json11::Json::parse(opts, error);
std::map<std::string, json11::Json>& opts_map =
const_cast<std::map<std::string, json11::Json>&>(
opts_json.object_items());
opts_map["bundleType"] = bundleType;
std::vector<INIT_FRAMEWORK_PARAMS*> params;
auto bridge = WeexCoreManager::Instance()
->script_bridge()
->script_side();
if(!bridge){
return;
}
bridge->CreateInstance(instanceId.c_str(), func.c_str(), result,
opts_json.dump().c_str(), initData.c_str(),
strcmp("Rax", bundleType) ? "\0" : extendsApi.c_str(),
params);
};
return exec_js;
}
#ifdef OS_ANDROID
void RefreshPageEagle(const char* page_id, const char* init_data) {
std::vector<VALUE_WITH_TYPE*> msg;
VALUE_WITH_TYPE* event = getValueWithTypePtr();
event->type = ParamsType::BYTEARRAY;
auto buffer = wson_buffer_new();
wson_push_type_uint8_string(
buffer, reinterpret_cast<const uint8_t*>(page_id), strlen(page_id));
event->value.byteArray = genWeexByteArray(
static_cast<const char*>(buffer->data), buffer->position);
wson_buffer_free(buffer);
msg.push_back(event);
// args -> { method: 'fireEvent', args: [ref, "nodeEvent", args , domChanges, {params: [ {"templateId": templateId, "componentId": id, "type": type, "params" : [...]} ]}] }
VALUE_WITH_TYPE* args = getValueWithTypePtr();
args->type = ParamsType::JSONSTRING;
json11::Json final_json = json11::Json::array{
json11::Json::object{
{"method", "fireEvent"},
{"args",
json11::Json::array{
"", "refresh", json11::Json::array{}, "",
json11::Json::object{
{"params",
json11::Json::array{
json11::Json::object{
{"data", init_data}
}
}}
}
}}
}
};
std::string out = final_json.dump();
auto utf16_key = weex::base::to_utf16(const_cast<char*>(out.c_str()),
out.length());
args->value.string = genWeexString(
reinterpret_cast<const uint16_t*>(utf16_key.c_str()), utf16_key.size());
msg.push_back(args);
auto bridge = WeexCore::WeexCoreManager::Instance()->script_bridge()->script_side();
if (!bridge){
return;
}
bridge->ExecJS(
page_id, "", "callJS", msg);
freeParams(msg);
}
#endif
}
}