jasonelle-v2 icon indicating copy to clipboard operation
jasonelle-v2 copied to clipboard

$agent actions break success chaining

Open rolloclarke opened this issue 6 years ago • 2 comments

Describe the bug If an action triggers another action which is of type $agent.request and $return.success is returned, the original action's success is never executed.

So the yay success alert of action1 is never executed:

"action1": {
	"type": "trigger",
	"options": {
		"name": "action2"
	},
	"success": {
		"type": "$util.alert",
		"options": {
			"title": "YAY",
			"description": "yay"
		}
	}
},
"action2": {
	"type": "$agent.request",
	"options": {
		"id": "someid",
		"method": "whatever"
	},
	"success": {
		"type": "$return.success"
	}
}

This is true of all agent actions not just $agent.request

The problem is In JasonAgentAction the caller event object is ignored, and never passed through to the JasonAgentService, and so all the JasonHelper.next(...) calls are made with empty event objects.

rolloclarke avatar Oct 24 '19 14:10 rolloclarke

thanks for reporting :)

clsource avatar Oct 24 '19 18:10 clsource

Upon some testing it seems that At least Android needs a little time. Around 100 ms before responding to an action so the system can process it.

Example from $media.permissions

// We need at least 100 ms to call the success with the result
            // If not then it will be omitted since it will too fast 
            // for the system to process.
            new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
                @Override
                public void run() {
                    try {
                        JSONObject ret = new JSONObject();
                        ret.put("files", ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
                        ret.put("camera", ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED);
                        JasonHelper.next("success", action, ret, event, context);
                    }  catch (Exception e) {
                        Log.d("Warning", e.getStackTrace()[0].getMethodName() + " : " + e.toString());
                    }
                }
            }, 100); // Millisecond 1000 = 1 sec

https://raw.githubusercontent.com/jasonelle/jasonette-android/f1329f999a29e39bba53cdd78066d3ed2ff315e1/app/src/main/java/com/jasonette/seed/Action/JasonMediaAction.java

clsource avatar Sep 09 '21 03:09 clsource