| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /**
- * 供 type: fun 的 method 桥接:adb-* → adb-parser;json-to-arr / json-json-to-arr → json-to-arr.js
- */
- const path = require('path')
- const adbParserExecute = require(path.join(__dirname, 'adb', 'adb-parser.js')).execute
- const ADB_SUBMETHODS = new Set([
- 'input',
- 'click',
- 'locate',
- 'swipe',
- 'scroll',
- 'keyevent',
- 'press',
- 'string-press',
- 'send-img-to-device',
- ])
- function buildSyntheticAdbAction (action, adbMethod) {
- return {
- type: 'adb',
- method: adbMethod,
- inVars: Array.isArray(action.inVars) ? action.inVars : [],
- outVars: Array.isArray(action.outVars) ? action.outVars : [],
- target: action.target,
- value: action.value,
- variable: action.variable,
- clear: action.clear,
- area: action.area,
- avatar: action.avatar,
- }
- }
- function buildAdbExecuteCtx (ctx, device, folderPath) {
- const resolution = ctx.resolution || { width: 1080, height: 1920 }
- return {
- device,
- folderPath,
- resolution,
- variableContext: ctx.variableContext,
- api: ctx.electronAPI,
- extractVarName: ctx.extractVarName,
- resolveValue: ctx.resolveValue,
- logOutVars: ctx.logOutVars,
- DEFAULT_SCROLL_DISTANCE: ctx.DEFAULT_SCROLL_DISTANCE ?? 100,
- }
- }
- /**
- * @returns {Promise<null|{success:boolean}>} null 表示非桥接 method,由 run() 继续分发
- */
- async function runFunBridgedMethod (actionType, action, ctx, device, folderPath) {
- if (typeof actionType !== 'string') return null
- if (actionType.startsWith('adb-')) {
- const sub = actionType.slice(4)
- if (!ADB_SUBMETHODS.has(sub)) {
- return { success: false, error: `未知的 fun.method adb 子命令: ${sub}(支持: ${[...ADB_SUBMETHODS].join(', ')})` }
- }
- const syn = buildSyntheticAdbAction(action, sub)
- const adbCtx = buildAdbExecuteCtx(ctx, device, folderPath)
- return adbParserExecute(syn, adbCtx)
- }
- if (actionType === 'json-to-arr' || actionType === 'json-json-to-arr') {
- const { executeJsonToArr } = require(path.join(__dirname, 'json', 'json-to-arr.js'))
- const jsonString = action.inVars && action.inVars.length > 0 ? action.inVars[0] : undefined
- const result = await executeJsonToArr({ jsonString })
- if (!result.success) return { success: false, error: result.error }
- const { extractVarName, variableContext, logOutVars } = ctx
- const outputVarName =
- action.outVars && action.outVars.length > 0 ? extractVarName(String(action.outVars[0]).trim()) : null
- if (outputVarName && Array.isArray(result.result)) variableContext[outputVarName] = result.result
- await logOutVars(action, variableContext, folderPath)
- return { success: true, ...result }
- }
- return null
- }
- module.exports = { runFunBridgedMethod, ADB_SUBMETHODS }
|