"vault backup: 2026-03-31 14:09:22 from Flow"
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
<TaskerData sr="" dvi="1" tv="6.6.20">
|
||||
<Task sr="task9">
|
||||
<cdate>1774931800563</cdate>
|
||||
<edate>1774932946532</edate>
|
||||
<id>9</id>
|
||||
<nme>Git Sync</nme>
|
||||
<Action sr="act0" ve="7">
|
||||
<code>107361459</code>
|
||||
<Bundle sr="arg0">
|
||||
<Vals sr="val">
|
||||
<EnableDisableAccessibilityService><null></EnableDisableAccessibilityService>
|
||||
<EnableDisableAccessibilityService-type>java.lang.String</EnableDisableAccessibilityService-type>
|
||||
<Password><null></Password>
|
||||
<Password-type>java.lang.String</Password-type>
|
||||
<com.twofortyfouram.locale.intent.extra.BLURB>Actions To Perform: openApp(com.viscouspot.gitsync)
|
||||
|
||||
click(text,SYNC CHANGES)
|
||||
|
||||
backOutOfApp()
|
||||
Not In AutoInput: true
|
||||
Not In Tasker: true
|
||||
Separator: ,
|
||||
Check Millis: 1000</com.twofortyfouram.locale.intent.extra.BLURB>
|
||||
<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
|
||||
<net.dinglisch.android.tasker.JSON_ENCODED_KEYS>parameters</net.dinglisch.android.tasker.JSON_ENCODED_KEYS>
|
||||
<net.dinglisch.android.tasker.JSON_ENCODED_KEYS-type>java.lang.String</net.dinglisch.android.tasker.JSON_ENCODED_KEYS-type>
|
||||
<net.dinglisch.android.tasker.RELEVANT_VARIABLES><StringArray sr=""><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0>%ailastbounds
|
||||
Last Bounds
|
||||
Bounds (left,top,right,bottom) of the item that the action last interacted with</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1>%ailastcoordinates
|
||||
Last Coordinates
|
||||
Center coordinates (x,y) of the item that the action last interacted with</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2>%err
|
||||
Error Code
|
||||
Only available if you select &lt;b&gt;Continue Task After Error&lt;/b&gt; and the action ends in error</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3>%errmsg
|
||||
Error Message
|
||||
Only available if you select &lt;b&gt;Continue Task After Error&lt;/b&gt; and the action ends in error</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3></StringArray></net.dinglisch.android.tasker.RELEVANT_VARIABLES>
|
||||
<net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>[Ljava.lang.String;</net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>
|
||||
<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>parameters plugininstanceid plugintypeid </net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>
|
||||
<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>java.lang.String</net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>
|
||||
<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
|
||||
<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
|
||||
<parameters>{"_action":"openApp(com.viscouspot.gitsync)\n\nclick(text,SYNC CHANGES)\n\nbackOutOfApp()","_additionalOptions":{"checkMs":"1000","separator":",","withCoordinates":false},"_whenToPerformAction":{"notInAutoInput":true,"notInTasker":true},"generatedValues":{}}</parameters>
|
||||
<parameters-type>java.lang.String</parameters-type>
|
||||
<plugininstanceid>5910f160-ad6a-4b47-ab40-810a62e77df1</plugininstanceid>
|
||||
<plugininstanceid-type>java.lang.String</plugininstanceid-type>
|
||||
<plugintypeid>com.joaomgcd.autoinput.intent.IntentActionv2</plugintypeid>
|
||||
<plugintypeid-type>java.lang.String</plugintypeid-type>
|
||||
</Vals>
|
||||
</Bundle>
|
||||
<Str sr="arg1" ve="3">com.joaomgcd.autoinput</Str>
|
||||
<Str sr="arg2" ve="3">com.joaomgcd.autoinput.activity.ActivityConfigActionv2</Str>
|
||||
<Int sr="arg3" val="60"/>
|
||||
<Int sr="arg4" val="1"/>
|
||||
</Action>
|
||||
<Action sr="act1" ve="7">
|
||||
<code>130</code>
|
||||
<Str sr="arg0" ve="3">JWL_Merge</Str>
|
||||
<Int sr="arg1">
|
||||
<var>%priority</var>
|
||||
</Int>
|
||||
<Int sr="arg10" val="1"/>
|
||||
<Str sr="arg2" ve="3"/>
|
||||
<Str sr="arg3" ve="3"/>
|
||||
<Str sr="arg4" ve="3"/>
|
||||
<Int sr="arg5" val="0"/>
|
||||
<Int sr="arg6" val="0"/>
|
||||
<Str sr="arg7" ve="3"/>
|
||||
<Int sr="arg8" val="0"/>
|
||||
<Int sr="arg9" val="0"/>
|
||||
</Action>
|
||||
</Task>
|
||||
</TaskerData>
|
||||
110
21-Server Reference/homelab/stacks/n8n/JW_Backup/JW Backup.md
Normal file
110
21-Server Reference/homelab/stacks/n8n/JW_Backup/JW Backup.md
Normal file
@@ -0,0 +1,110 @@
|
||||
# JW Library Sync System: Architecture & Roadmap
|
||||
**Date:** 2026-03-31
|
||||
**Core Stack:** Android (Tablet/Phone), Tasker, AutoInput, GitSync, Gitea, n8n, jwlFusion.
|
||||
|
||||
---
|
||||
|
||||
## ## SYSTEM OVERVIEW
|
||||
|
||||
### 1. Local Backup (Tablet & Phone)
|
||||
* **Trigger:** Time-based (04:30 AM Tablet / 04:35 AM Phone).
|
||||
* **Action:** Tasker copies the `.jwlibrary` export from the app's export location to the local `vault` directory.
|
||||
* **Sync:** Tasker uses **AutoInput** to:
|
||||
1. Launch GitSync.
|
||||
2. Click the "Sync" or "Push" button for the `vault` repository.
|
||||
3. Wait for the notification/UI change indicating success.
|
||||
|
||||
### 2. Central Merge (The "Global Truth")
|
||||
* **Trigger:** Tablet at 04:45 AM.
|
||||
* **Action:** Tasker sends an **HTTP POST** to the n8n webhook (`bunny-wyvern.ts.net`).
|
||||
* **n8n Logic:** 1. SSH into the server.
|
||||
2. Pull all branch updates from Gitea.
|
||||
3. Run `jwlFusion` to merge device backups into `master.jwlibrary`.
|
||||
4. Commit and Push the merged file back to Gitea.
|
||||
5. Return a `200 OK` "Sync successful" message to Tasker.
|
||||
|
||||
### 3. Restoration (Sync Back)
|
||||
* **Action:** Upon receiving the `200 OK`, Tasker triggers the `RestoreFromMaster` task.
|
||||
* **Logic:** GitSync pulls the latest `master.jwlibrary`, and Tasker (via AutoInput or intent) imports it back into the JW Library app.
|
||||
|
||||
---
|
||||
|
||||
## ## CURRENT CONFIGURATION (POST-INTENT DEPRECATION)
|
||||
* **GitSync:** Bypassing Intent issues by using **AutoInput** to physically click the sync buttons.
|
||||
* **Storage:** Vault is located at `/storage/emulated/0/vault` (Shared Storage).
|
||||
* **Git Settings:** "Safe Directory" and "Credential Store" have been configured in the environment to prevent ownership/password prompts.
|
||||
|
||||
---
|
||||
|
||||
## ## TO-DO LIST (FOR TOMORROW)
|
||||
|
||||
- [ ] **AutoInput Optimization:** Refine the "Click" sequence in Tasker to ensure it handles the screen being off (using `Turn On` and `Dismiss Keyguard` actions).
|
||||
- [ ] **Validation Check:** Run a manual end-to-end test:
|
||||
1. Manually trigger Tablet Sync.
|
||||
2. Manually trigger Phone Sync.
|
||||
3. Manually trigger n8n Webhook via Tasker.
|
||||
- [ ] **Error Handling:** Add a Tasker "Else" condition for the HTTP Request—if n8n returns an error, send a Join/Gotify notification so you know the merge failed.
|
||||
- [ ] **Gitea Cleanup:** Verify the `.gitignore` in the `vault` folder is correctly ignoring temporary `.tmp` files created during the export process.
|
||||
- [ ] **Staggering Review:** Confirm if 5 minutes is enough buffer for the Phone to finish its push before the Tablet initiates the Merge Script.
|
||||
|
||||
---
|
||||
|
||||
## ## FINAL SYSTEM LOGIC (4:30 AM SEQUENCE)
|
||||
1. **04:30** (Tablet): Tasker -> AutoInput (GitSync Push).
|
||||
2. **04:35** (Phone): Tasker -> AutoInput (GitSync Push).
|
||||
3. **04:45** (Tablet): Tasker -> HTTP Request (n8n Webhook).
|
||||
4. **On Success**: Tasker -> Perform Task (RestoreFromMaster).
|
||||
|
||||
|
||||
# DETAILS
|
||||
|
||||
## PROJECT: Automated JW Library Multi-Device Sync (via Gitea/n8n)
|
||||
**Status:** In Progress (Active Debugging Phase)
|
||||
**User Persona:** INTJ (Prefers logic-first, no-fluff, technical precision)
|
||||
|
||||
---
|
||||
|
||||
### 1. THE ARCHITECTURE
|
||||
The goal is to sync JW Library backups (.jwlibrary) across multiple Android devices using a central "Master" merge script.
|
||||
|
||||
* **Source Devices:** Android Tablet & Phone.
|
||||
* **Storage:** Local Git "Vault" folder at `/storage/emulated/0/vault`.
|
||||
* **Git Client:** GitSync (Android App).
|
||||
* **Remote:** Self-hosted Gitea instance.
|
||||
* **Orchestration:** n8n (running on `bunny-wyvern.ts.net`).
|
||||
* **Merge Logic:** `jwlFusion` script on the server.
|
||||
|
||||
---
|
||||
|
||||
### 2. TECHNICAL HURDLES & CURRENT FIXES
|
||||
* **Termux Plugin Failure:** The `Termux:Tasker` plugin failed with "Missing/Disabled Receiver" errors (likely due to Android 14 security or Play Store/F-Droid version mismatch). We abandoned Termux scripts for now.
|
||||
* **GitSync Intent Failure:** Attempted to trigger GitSync via `com.viscouspot.gitsync.action.SYNC` intents, but the app did not respond to background broadcasts.
|
||||
* **Current Solution:** Using **Tasker + AutoInput**. Tasker wakes the device, opens the GitSync UI, and AutoInput physically clicks "Sync" to ensure the push/pull happens.
|
||||
|
||||
---
|
||||
|
||||
### 3. THE DAILY TIMELINE (SCHEDULED)
|
||||
* **04:30 AM (Tablet):** Tasker triggers. AutoInput clicks through GitSync to push the latest local backup to its own branch on Gitea.
|
||||
* **04:35 AM (Phone):** Same process. Pushes its unique backup to its own branch.
|
||||
* **04:45 AM (Tablet - Master Trigger):**
|
||||
1. Tasker sends an **HTTP POST** to the n8n Webhook.
|
||||
2. **n8n Workflow:** * SSH into the server.
|
||||
* Pull all device branches.
|
||||
* Run `jwlFusion` to merge everything into `master.jwlibrary`.
|
||||
* Push `master.jwlibrary` to the `master` branch.
|
||||
3. **Restoration:** Once n8n returns `200 OK`, the Tablet (and later the Phone) triggers a "Restore" task to pull the new `master` and import it into JW Library.
|
||||
|
||||
---
|
||||
|
||||
### 4. AGENT "TO-DO" LIST (FOR NEXT SESSION)
|
||||
1. **Refine AutoInput:** Ensure the "Sync" clicks are robust (handling screen-off states or unexpected popups).
|
||||
2. **n8n Webhook Verification:** Confirm the n8n SSH node is correctly executing the `jwlFusion` command and handling Git conflicts.
|
||||
3. **Restore Logic:** Finalize the Tasker task that takes the pulled `master.jwlibrary` and automates the "Import" into the JW Library app.
|
||||
4. **Race Condition Check:** Verify the 5-minute stagger between devices is sufficient for GitSync to finish its network operations.
|
||||
|
||||
---
|
||||
|
||||
### 5. REFERENCE DATA
|
||||
* **Vault Path:** `/storage/emulated/0/vault`
|
||||
* **n8n Webhook:** `http://n8n.bunny-wyvern.ts.net:5678/webhook/sync-jw-backup`
|
||||
* **Personality Context:** User is an INTJ. Provide direct, technical solutions. No fluff.
|
||||
@@ -0,0 +1,86 @@
|
||||
<TaskerData sr="" dvi="1" tv="6.6.20">
|
||||
<Task sr="task8">
|
||||
<cdate>1774931254224</cdate>
|
||||
<edate>1774932950369</edate>
|
||||
<id>8</id>
|
||||
<nme>JWL_Merge</nme>
|
||||
<Action sr="act0" ve="7">
|
||||
<code>339</code>
|
||||
<Bundle sr="arg0">
|
||||
<Vals sr="val">
|
||||
<net.dinglisch.android.tasker.RELEVANT_VARIABLES><StringArray sr=""><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0>%http_cookies
|
||||
Cookies
|
||||
The cookies the server sent in the response in the Cookie:COOKIE_VALUE format. You can use this directly in the 'Headers' field of the HTTP Request action</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1>%http_data
|
||||
Data
|
||||
Data that the server responded from the HTTP request.</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2>%http_file_output
|
||||
File Output
|
||||
Will always contain the file's full path even if you specified a directory as the File to save.</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3>%http_response_code
|
||||
Response Code
|
||||
The HTTP Code the server responded</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES4>%http_headers()
|
||||
Response Headers
|
||||
The HTTP Headers the server sent in the response. Each header is in the 'key:value' format</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES4><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES5>%http_response_length
|
||||
Response Length
|
||||
The size of the response in bytes</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES5></StringArray></net.dinglisch.android.tasker.RELEVANT_VARIABLES>
|
||||
<net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>[Ljava.lang.String;</net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>
|
||||
</Vals>
|
||||
</Bundle>
|
||||
<Int sr="arg1" val="1"/>
|
||||
<Int sr="arg10" val="0"/>
|
||||
<Int sr="arg11" val="0"/>
|
||||
<Int sr="arg12" val="1"/>
|
||||
<Str sr="arg2" ve="3">http://n8n.bunny-wyvern.ts.net:5678/webhook/sync-jw-backup</Str>
|
||||
<Str sr="arg3" ve="3"/>
|
||||
<Str sr="arg4" ve="3"/>
|
||||
<Str sr="arg5" ve="3">{"device": "Samsung-Tablet-S10+"}</Str>
|
||||
<Str sr="arg6" ve="3"/>
|
||||
<Str sr="arg7" ve="3"/>
|
||||
<Int sr="arg8" val="60"/>
|
||||
<Int sr="arg9" val="0"/>
|
||||
</Action>
|
||||
<Action sr="act1" ve="7">
|
||||
<code>30</code>
|
||||
<Int sr="arg0" val="0"/>
|
||||
<Int sr="arg1" val="2"/>
|
||||
<Int sr="arg2" val="0"/>
|
||||
<Int sr="arg3" val="0"/>
|
||||
<Int sr="arg4" val="0"/>
|
||||
</Action>
|
||||
<Action sr="act2" ve="7">
|
||||
<code>37</code>
|
||||
<ConditionList sr="if">
|
||||
<Condition sr="c0" ve="3">
|
||||
<lhs>%http_data</lhs>
|
||||
<op>2</op>
|
||||
<rhs>*Successful*</rhs>
|
||||
</Condition>
|
||||
</ConditionList>
|
||||
</Action>
|
||||
<Action sr="act3" ve="7">
|
||||
<code>30</code>
|
||||
<Int sr="arg0" val="0"/>
|
||||
<Int sr="arg1" val="3"/>
|
||||
<Int sr="arg2" val="0"/>
|
||||
<Int sr="arg3" val="0"/>
|
||||
<Int sr="arg4" val="0"/>
|
||||
</Action>
|
||||
<Action sr="act4" ve="7">
|
||||
<code>130</code>
|
||||
<Str sr="arg0" ve="3">JWL_Restore_From_Git</Str>
|
||||
<Int sr="arg1">
|
||||
<var>%priority+1</var>
|
||||
</Int>
|
||||
<Int sr="arg10" val="1"/>
|
||||
<Str sr="arg2" ve="3"/>
|
||||
<Str sr="arg3" ve="3"/>
|
||||
<Str sr="arg4" ve="3"/>
|
||||
<Int sr="arg5" val="0"/>
|
||||
<Int sr="arg6" val="0"/>
|
||||
<Str sr="arg7" ve="3"/>
|
||||
<Int sr="arg8" val="0"/>
|
||||
<Int sr="arg9" val="0"/>
|
||||
</Action>
|
||||
<Action sr="act5" ve="7">
|
||||
<code>38</code>
|
||||
</Action>
|
||||
</Task>
|
||||
</TaskerData>
|
||||
@@ -0,0 +1,146 @@
|
||||
<TaskerData sr="" dvi="1" tv="6.6.20">
|
||||
<Task sr="task5">
|
||||
<cdate>1774912401659</cdate>
|
||||
<edate>1774932910304</edate>
|
||||
<id>5</id>
|
||||
<nme>JWL_Restore_From_Git</nme>
|
||||
<pri>100</pri>
|
||||
<Action sr="act0" ve="7">
|
||||
<code>20</code>
|
||||
<App sr="arg0">
|
||||
<appClass>org.jw.jwlibrary.mobile.MainActivity</appClass>
|
||||
<appPkg>org.jw.jwlibrary.mobile</appPkg>
|
||||
<label>JW Library</label>
|
||||
</App>
|
||||
<Str sr="arg1" ve="3"/>
|
||||
<Int sr="arg2" val="0"/>
|
||||
<Int sr="arg3" val="1"/>
|
||||
</Action>
|
||||
<Action sr="act1" ve="7">
|
||||
<code>30</code>
|
||||
<Int sr="arg0" val="0"/>
|
||||
<Int sr="arg1" val="3"/>
|
||||
<Int sr="arg2" val="0"/>
|
||||
<Int sr="arg3" val="0"/>
|
||||
<Int sr="arg4" val="0"/>
|
||||
</Action>
|
||||
<Action sr="act2" ve="7">
|
||||
<code>107361459</code>
|
||||
<Bundle sr="arg0">
|
||||
<Vals sr="val">
|
||||
<EnableDisableAccessibilityService><null></EnableDisableAccessibilityService>
|
||||
<EnableDisableAccessibilityService-type>java.lang.String</EnableDisableAccessibilityService-type>
|
||||
<Password><null></Password>
|
||||
<Password-type>java.lang.String</Password-type>
|
||||
<com.twofortyfouram.locale.intent.extra.BLURB>Actions To Perform: click(id,org.jw.jwlibrary.mobile:id/nav_personal_study)
|
||||
|
||||
click(id,org.jw.jwlibrary.mobile:id/action_backup_restore)
|
||||
|
||||
click(text,Restore Backup)
|
||||
Not In AutoInput: true
|
||||
Not In Tasker: true
|
||||
Separator: ,
|
||||
Check Millis: 1000</com.twofortyfouram.locale.intent.extra.BLURB>
|
||||
<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
|
||||
<net.dinglisch.android.tasker.JSON_ENCODED_KEYS>parameters</net.dinglisch.android.tasker.JSON_ENCODED_KEYS>
|
||||
<net.dinglisch.android.tasker.JSON_ENCODED_KEYS-type>java.lang.String</net.dinglisch.android.tasker.JSON_ENCODED_KEYS-type>
|
||||
<net.dinglisch.android.tasker.RELEVANT_VARIABLES><StringArray sr=""><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0>%ailastbounds
|
||||
Last Bounds
|
||||
Bounds (left,top,right,bottom) of the item that the action last interacted with</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1>%ailastcoordinates
|
||||
Last Coordinates
|
||||
Center coordinates (x,y) of the item that the action last interacted with</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2>%err
|
||||
Error Code
|
||||
Only available if you select &lt;b&gt;Continue Task After Error&lt;/b&gt; and the action ends in error</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3>%errmsg
|
||||
Error Message
|
||||
Only available if you select &lt;b&gt;Continue Task After Error&lt;/b&gt; and the action ends in error</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3></StringArray></net.dinglisch.android.tasker.RELEVANT_VARIABLES>
|
||||
<net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>[Ljava.lang.String;</net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>
|
||||
<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>parameters plugininstanceid plugintypeid </net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>
|
||||
<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>java.lang.String</net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>
|
||||
<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
|
||||
<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
|
||||
<parameters>{"_action":"click(id,org.jw.jwlibrary.mobile:id/nav_personal_study)\n\nclick(id,org.jw.jwlibrary.mobile:id/action_backup_restore)\n\nclick(text,Restore Backup)","_additionalOptions":{"checkMs":"1000","separator":",","withCoordinates":false},"_whenToPerformAction":{"notInAutoInput":true,"notInTasker":true},"generatedValues":{}}</parameters>
|
||||
<parameters-type>java.lang.String</parameters-type>
|
||||
<plugininstanceid>4a568374-2445-46f3-be31-a879d2940e36</plugininstanceid>
|
||||
<plugininstanceid-type>java.lang.String</plugininstanceid-type>
|
||||
<plugintypeid>com.joaomgcd.autoinput.intent.IntentActionv2</plugintypeid>
|
||||
<plugintypeid-type>java.lang.String</plugintypeid-type>
|
||||
</Vals>
|
||||
</Bundle>
|
||||
<Str sr="arg1" ve="3">com.joaomgcd.autoinput</Str>
|
||||
<Str sr="arg2" ve="3">com.joaomgcd.autoinput.activity.ActivityConfigActionv2</Str>
|
||||
<Int sr="arg3" val="60"/>
|
||||
<Int sr="arg4" val="1"/>
|
||||
</Action>
|
||||
<Action sr="act3" ve="7">
|
||||
<code>30</code>
|
||||
<Int sr="arg0" val="0"/>
|
||||
<Int sr="arg1" val="3"/>
|
||||
<Int sr="arg2" val="0"/>
|
||||
<Int sr="arg3" val="0"/>
|
||||
<Int sr="arg4" val="0"/>
|
||||
</Action>
|
||||
<Action sr="act4" ve="7">
|
||||
<code>107361459</code>
|
||||
<Bundle sr="arg0">
|
||||
<Vals sr="val">
|
||||
<EnableDisableAccessibilityService><null></EnableDisableAccessibilityService>
|
||||
<EnableDisableAccessibilityService-type>java.lang.String</EnableDisableAccessibilityService-type>
|
||||
<Password><null></Password>
|
||||
<Password-type>java.lang.String</Password-type>
|
||||
<com.twofortyfouram.locale.intent.extra.BLURB>Actions To Perform: click(text,Show roots)
|
||||
|
||||
click(text,Spencer's Tab S8+)
|
||||
|
||||
click(text,Vault)
|
||||
|
||||
click(text,JW_Backups)
|
||||
|
||||
wait(500)
|
||||
|
||||
click(id,com.google.android.documentsui:id/icon_thumb)
|
||||
|
||||
wait(500)
|
||||
|
||||
click(text,RESTORE)
|
||||
|
||||
click(text,CLOSE)
|
||||
|
||||
wait(500)
|
||||
|
||||
backOutOfApp()
|
||||
Not In AutoInput: true
|
||||
Not In Tasker: true
|
||||
Separator: ,
|
||||
Check Millis: 1000</com.twofortyfouram.locale.intent.extra.BLURB>
|
||||
<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
|
||||
<net.dinglisch.android.tasker.JSON_ENCODED_KEYS>parameters</net.dinglisch.android.tasker.JSON_ENCODED_KEYS>
|
||||
<net.dinglisch.android.tasker.JSON_ENCODED_KEYS-type>java.lang.String</net.dinglisch.android.tasker.JSON_ENCODED_KEYS-type>
|
||||
<net.dinglisch.android.tasker.RELEVANT_VARIABLES><StringArray sr=""><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0>%ailastbounds
|
||||
Last Bounds
|
||||
Bounds (left,top,right,bottom) of the item that the action last interacted with</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1>%ailastcoordinates
|
||||
Last Coordinates
|
||||
Center coordinates (x,y) of the item that the action last interacted with</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2>%err
|
||||
Error Code
|
||||
Only available if you select &lt;b&gt;Continue Task After Error&lt;/b&gt; and the action ends in error</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3>%errmsg
|
||||
Error Message
|
||||
Only available if you select &lt;b&gt;Continue Task After Error&lt;/b&gt; and the action ends in error</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3></StringArray></net.dinglisch.android.tasker.RELEVANT_VARIABLES>
|
||||
<net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>[Ljava.lang.String;</net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>
|
||||
<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>parameters plugininstanceid plugintypeid </net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>
|
||||
<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>java.lang.String</net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>
|
||||
<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
|
||||
<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
|
||||
<parameters>{"_action":"click(text,Show roots)\n\nclick(text,Spencer's Tab S8+)\n\nclick(text,Vault)\n\nclick(text,JW_Backups)\n\nwait(500)\n\nclick(id,com.google.android.documentsui:id/icon_thumb)\n\nwait(500)\n\nclick(text,RESTORE)\n\nclick(text,CLOSE)\n\nwait(500)\n\nbackOutOfApp()","_additionalOptions":{"checkMs":"1000","separator":",","withCoordinates":false},"_whenToPerformAction":{"notInAutoInput":true,"notInTasker":true},"generatedValues":{}}</parameters>
|
||||
<parameters-type>java.lang.String</parameters-type>
|
||||
<plugininstanceid>b68fb928-2b48-41e9-b01f-359d4826b699</plugininstanceid>
|
||||
<plugininstanceid-type>java.lang.String</plugininstanceid-type>
|
||||
<plugintypeid>com.joaomgcd.autoinput.intent.IntentActionv2</plugintypeid>
|
||||
<plugintypeid-type>java.lang.String</plugintypeid-type>
|
||||
</Vals>
|
||||
</Bundle>
|
||||
<Str sr="arg1" ve="3">com.joaomgcd.autoinput</Str>
|
||||
<Str sr="arg2" ve="3">com.joaomgcd.autoinput.activity.ActivityConfigActionv2</Str>
|
||||
<Int sr="arg3" val="60"/>
|
||||
<Int sr="arg4" val="1"/>
|
||||
</Action>
|
||||
</Task>
|
||||
</TaskerData>
|
||||
Reference in New Issue
Block a user