const utils = Editor.require('packages://build-helper/core/libs/utils.js'); let ListItem; (() => { 'use strict'; return function init ( panel ) { let viewEL = panel.$.view; let tmpl = 'packages://build-helper/panel/assets-hotupdate-setting.tmpl'; Editor.import(tmpl).then(content => { viewEL.innerHTML = content; let assetsHotUpdate = `assetsHotUpdate`; let update = panel.getSettingItem(assetsHotUpdate) || {}; // 热更开关 let enableCheckboxEle = viewEL.querySelector('#enableCheckbox'); enableCheckboxEle.value = update.enable; enableCheckboxEle.addEventListener('change', (event) => { update.enable = event.target.value; panel.setSettingItem(assetsHotUpdate, update); }); // 热更远程URL let remoteUrlEle = viewEL.querySelector('#remoteUrl'); remoteUrlEle.value = update.remoteUrl; remoteUrlEle.addEventListener('confirm', e => { if (!utils.isURL(event.target.value)) { Editor.error('请输入正确的URL'); return; } update.remoteUrl = event.target.value; panel.setSettingItem(assetsHotUpdate, update); }); // 支持平台 let platformEle = viewEL.querySelector('#platform'); platformEle.value = update.platform; platformEle.addEventListener('confirm', e => { update.platform = event.target.value; panel.setSettingItem(assetsHotUpdate, update); }); // 检查manifest文件 function checkManifest (relative) { let root = Editor.Project.path + '/' + relative; let assetsdb = 'db://'; let assetsIdx = root.indexOf('assets'); if (assetsIdx !== -1) { assetsdb += root.substr(assetsIdx, root.length); } else { assetsdb += '/assets'; } let host = remoteUrlEle.value || 'http://localhost'; let projectManifestPath = root + '/project.manifest'; utils.accessPath(projectManifestPath, (err)=> { if (err && err.code === 'ENOENT') { let assetsdbProjectManifestPath = assetsdb + '/project.manifest'; utils.createProjectManifestAssets(assetsdbProjectManifestPath, host, (err, results) => { if (err) { Editor.error(err); return; } }); } }); let versionManifestPath = root + '/version.manifest'; utils.accessPath(versionManifestPath, (err)=> { if (err && err.code === 'ENOENT') { let assetsdbVersionManifestPath = assetsdb + '/version.manifest'; utils.createVersionManifestAssets(assetsdbVersionManifestPath, host, (err, results) => { if (err) { Editor.error(err); return; } }); } }); } // 源码目录 let srcEle = viewEL.querySelector('#src'); srcEle.value = update.src; if (update.src) { checkManifest(update.src); } // 源码目录选择按钮 let srcSelectBtnEle = viewEL.querySelector('#srcSelectBtn'); srcSelectBtnEle.addEventListener('click', (event) => { let res = Editor.Dialog.openFile({ title: '选择源码根目录', defaultPath: Editor.Project.path + '/assets', properties: ['openDirectory', 'createDirectory'] }); if (res !== -1) { let newPath = res[0]; let projectPathIdx = newPath.indexOf(Editor.Project.path); if (projectPathIdx === -1) { srcEle.value = ''; update.src = ''; update.versionManifestUUID = ''; Editor.warn('源码目录必须在本工程' + Editor.Project.path + '中'); return; } let assetsIdx = newPath.indexOf('assets'); if (assetsIdx === -1) { srcEle.value = ''; update.src = ''; update.versionManifestUUID = ''; Editor.warn('源码目录必须在' + Editor.Project.path + '/assets中'); return; } let relative = utils.getRelative(Editor.Project.path, newPath); srcEle.value = relative; checkManifest(relative); update.src = relative; panel.setSettingItem(assetsHotUpdate, update); } }); // 目标目录 let destEle = viewEL.querySelector('#dest'); if (update.dest) { destEle.value = update.dest; } // 目标目录选择按钮 let destSelectBtnEle = viewEL.querySelector('#destSelectBtn'); destSelectBtnEle.addEventListener('click', (event) => { let res = Editor.Dialog.openFile({ title: '选择目标根目录', defaultPath: Editor.Project.path, properties: ['openDirectory', 'createDirectory'] }); if (res !== -1) { let newPath = res[0]; let relative = utils.getRelative(Editor.Project.path, newPath); destEle.value = relative; update.dest = relative; panel.setSettingItem(assetsHotUpdate, update); } }); let ignores = update.ignores || []; let listEle = viewEL.querySelector('#list'); if (!ListItem) { ListItem = Editor.UI.registerElement('update-ignore-list-item', { template: `