下载
中文
注册

开发示例

本章节提供开发者在准备好自定义厂商信息后的操作步骤,从而实现自定义厂商功能。

操作步骤

  1. 打开自定义厂商信息功能开关。

    将配置文件project.conf的“_NeedCustomizedWebAssets”字段改为“yes”

  2. 准备自定义厂商信息配置文件config.json,并将其存放在{project_dir}/src/app/add_customized_web_assets/WhiteboxConfig/json”路径下。
  3. 准备自定义图片,并将其存放于{project_dir}/src/app/add_customized_web_assets/WhiteboxConfig/img”目录下。
  4. {project_dir}/src/app/add_customized_web_assets”目录下,实现配置脚本build_customized_web_assets.sh,参考示例如下
    #!/bin/bash
    VENDOR_CONFIG_PATH="."
    WEB_MANAGER_PATH=""
    IMG_DIR="WhiteboxConfig/img"
    IMG_LIST=("${IMG_DIR}/device.png" "${IMG_DIR}/device-en.png" "${IMG_DIR}/favicon.ico" "${IMG_DIR}/model.svg" "${IMG_DIR}/logo.png" "${IMG_DIR}/login.png")
    
    JSON_DIR="WhiteboxConfig/json"
    CONFIG_JSON_PATH="${JSON_DIR}/config.json"
    OS_NAME=$(< "/etc/os-release" grep "^NAME=" | awk -F "=" '{print $2}' | tr -d '"')
    
    function check_img()
    {
        local image_path="$1"
        local img_suffix=""
        local img_max_size="10485760"  # 最大10M
    
        img_suffix="$(basename "${image_path}" | awk -F "." '{print $2}')"
        if [[ ! -f "${image_path}" ]]; then
            echo "${img_suffix} image ${image_path} file not exist"
            return 1
        fi
    
        # 检查文件大小
        if [[ $(stat -c %s "${image_path}") -gt "${img_max_size}" ]]; then
            echo "${img_suffix} image ${image_path} is too large"
            return 1
        fi
    
        echo "check ${img_suffix} image ${image_path} success"
        return 0
    }
    
    
    function check_config_json()
    {
        if [[ "${OS_NAME}" != "Ubuntu" ]]; then
          if ! dos2unix "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" &> /dev/null; then
              echo "convert ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, please check "
              return 1
          fi
        fi
    
        if ! python3 -m json.tool "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" &> /dev/null; then
            echo "Invalid json ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}"
            return 1
        fi
    
        if ! grep -P '^\s*"model"\s*:\s*"[a-zA-Z0-9()\ ]{1,128}"' "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" &> /dev/null; then
            echo "check ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, please check <model> field"
            return 1
        fi
    
        if ! grep -P '^\s*"systemName"\s*:\s*{' "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" &> /dev/null; then
            echo "check ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, please check <systemName> field"
            return 1
        fi
    
        if ! grep -P '^\s*"websiteTitle"\s*:\s*{' "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" &> /dev/null; then
            echo "check ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, please check <websiteTitle> field"
            return 1
        fi
    
        if ! grep -P '^\s*"userGuide"\s*:\s*{' "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" &> /dev/null; then
            echo "check ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, please check <userGuide> field"
            return 1
        fi
    
        if ! grep -P '^\s*"copyRight"\s*:\s*{' "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" &> /dev/null; then
            echo "check ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, please check <copyRight> field"
            return 1
        fi
    
        if [[ $(grep -cP '^\s*"zh"\s*:\s*"[a-zA-Z0-9()x{4e00}-\x{9fa5}() ]{0,128}"' "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}") -ne "4" ]]; then
            echo "check ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, missing <zh> field, please check "
            return 1
        fi
    
        if [[ $(grep -cP '^\s*"en"\s*:\s*"[a-zA-Z0-9()., ]{0,128}"' "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}") -ne "4" ]]; then
            echo "check ${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH} failed, missing <en> field, please check "
            return 1
        fi
    
        return 0
    }
    
    
    function check_assets()
    {
        if [[ ! -f "${VENDOR_CONFIG_PATH}/${IMG_DIR}/device-en.png" ]]; then
          cp "${VENDOR_CONFIG_PATH}/${IMG_DIR}/device.png" "${VENDOR_CONFIG_PATH}/${IMG_DIR}/device-en.png"
        fi
    
        for (( i= 0; i < "${#IMG_LIST[@]}"; i++)); do
            if ! check_img "${VENDOR_CONFIG_PATH}/${IMG_LIST[i]}"; then
                echo "check config img failed, please check"
                return 1
            fi
        done
    
        if ! check_config_json; then
            echo "check config json failed, please check"
            return 1
        fi
    
        return 0
    }
    
    function copy_config_and_assets()
    {
        # 拷贝json配置
        if [[ ! -d "${WEB_MANAGER_PATH}/${JSON_DIR}" ]]; then
            mkdir -p "${WEB_MANAGER_PATH}/${JSON_DIR}"
        fi
    
        if ! cp -rf "${VENDOR_CONFIG_PATH}/${CONFIG_JSON_PATH}" "${WEB_MANAGER_PATH}/${CONFIG_JSON_PATH}"; then
            echo "cp ${CONFIG_JSON_PATH} failed, please check"
            return 1
        fi
    
        # 拷贝图片配置
        if [[ ! -d "${WEB_MANAGER_PATH}/${IMG_DIR}" ]]; then
            mkdir -p "${WEB_MANAGER_PATH}/${IMG_DIR}"
        fi
    
        for (( i= 0; i < "${#IMG_LIST[@]}"; i++)); do
            if ! cp -f "${VENDOR_CONFIG_PATH}/${IMG_LIST[i]}" "${WEB_MANAGER_PATH}/${IMG_LIST[i]}"; then
                echo "cp ${IMG_LIST[i]} failed, please check"
                return 1
            fi
        done
    
        if [[ "${OS_NAME}" = "Ubuntu" ]]; then
          chown -R nobody:nogroup "${WEB_MANAGER_PATH}"
        else
          chown -R nobody:nobody "${WEB_MANAGER_PATH}"
        fi
    
        return 0
    }
    
    function main()
    {
        # 校验 web manager 路径
        WEB_MANAGER_PATH="$1/platform/omsdk/software/nginx/html/manager"
        VENDOR_CONFIG_PATH="$1/src/app/add_customized_web_assets"
        echo "WEB_MANAGER_PATH: ${WEB_MANAGER_PATH}"
        if [[ ! -d "${WEB_MANAGER_PATH}" ]]; then
            mkdir -p "${WEB_MANAGER_PATH}"
        fi
    
        # 检查静态文件
        if ! check_assets; then
            echo "check asset files failed."
            return 1
        fi
    
        echo "check environment and assets successfully, start copy assets to web project directory...."
    
    
        if ! copy_config_and_assets; then
            echo "cp asset files to web project directory failed, please check"
            return 1
        fi
    
        echo "The customized configuration files has been copied."
    
        return 0
    }
    
    
    echo  -e "\n####################### begin to copy customized configuration files #####################################\n"
    main "$@"
    RESULT=$?
    exit "${RESULT}"
  5. {project_dir}/build/build.sh”中,实现调用扩展_NeedCustomizedWebAssets开关的编译脚本。
    # 配置自定义图片和厂商信息
    # build_customized_web_assets.sh具体实现可参考对应章节实现
    # TOP_DIR={project_dir}
    if [ "${_NeedCustomizedWebAssets}" == "yes" ]; then
        if ! bash "${TOP_DIR}/src/app/add_customized_web_assets/build_customized_web_assets.sh" "${TOP_DIR}";then
            return 1
        fi
    fi