docs: sync README/manifest to v0.2.1 behavior and i18n keys
Written by AI agent working for @jtmorris. Model: Grok 4.5.
This commit is contained in:
parent
7c31598594
commit
bbce7f0100
4 changed files with 20 additions and 29 deletions
24
README.md
24
README.md
|
|
@ -2,19 +2,21 @@
|
|||
|
||||
A lightweight widget plugin that shows Tailscale connectivity status on the Dank Bar with quick controls for toggling connection, switching exit nodes, and copying peer addresses.
|
||||
|
||||

|
||||

|
||||
|
||||
## Features
|
||||
|
||||
- **Status icon** in the bar — `vpn_key` when connected, `vpn_key_off` when disconnected
|
||||
- **Right-click** to toggle Tailscale on/off
|
||||
- **Left-click** to open a popout showing:
|
||||
- Your current Tailscale IP
|
||||
- Your current Tailscale IP (when connected)
|
||||
- Active exit node (with clear button)
|
||||
- Peer list with hostnames and IPs
|
||||
- Peer list with hostnames and IPs (when connected)
|
||||
- A clear "Not connected" empty state when disconnected (no stale peer list)
|
||||
- **Click-to-copy** any hostname or IP to clipboard
|
||||
- **Exit node selection** — click `↗` on any exit-node-capable peer to route through it
|
||||
- **On-demand status** — polls Tailscale for ground truth on load, explicit actions, and post-mutation verification (defensive poll-act-poll for toggles; no always-on timer)
|
||||
- **Single-flight actions** — concurrent status/toggle/exit/copy chains are rejected while an operation is in flight
|
||||
- **Toast notifications** for all errors
|
||||
|
||||
## Requirements
|
||||
|
|
@ -42,7 +44,8 @@ A lightweight widget plugin that shows Tailscale connectivity status on the Dank
|
|||
tailscalectl/
|
||||
├── plugin.json
|
||||
├── TailscaleWidget.qml
|
||||
└── lib.js
|
||||
├── lib.js
|
||||
└── i18n/
|
||||
```
|
||||
|
||||
3. Reload the plugin:
|
||||
|
|
@ -70,12 +73,14 @@ A lightweight widget plugin that shows Tailscale connectivity status on the Dank
|
|||
"id": "tailscalectl",
|
||||
"name": "Tailscale",
|
||||
"description": "Tailscale status and controls on the Dank Bar",
|
||||
"version": "0.2.0",
|
||||
"author": "John Morris & Vybe (AI Slop... er... Coding Assistant)",
|
||||
"author": "John Morris",
|
||||
"icon": "vpn_key",
|
||||
"type": "widget",
|
||||
"capabilities": ["dankbar-widget"],
|
||||
"component": "./TailscaleWidget.qml",
|
||||
"permissions": ["settings_read", "settings_write", "process"]
|
||||
"permissions": ["process"],
|
||||
"requires": ["tailscale"],
|
||||
"version": "0.2.1"
|
||||
}
|
||||
```
|
||||
|
||||
|
|
@ -84,7 +89,10 @@ A lightweight widget plugin that shows Tailscale connectivity status on the Dank
|
|||
- Uses `Proc` singleton (from `qs.Common`) for all external `tailscale` commands (one-shot stdout capture + auto cleanup).
|
||||
- Fully I18n-ready via `I18n.tr(...)` (source keys in American English only today; see `tailscalectl/i18n/` for scaffolding).
|
||||
- Follows current `dms-plugin-dev` + DMS 1.4 plugin best practices (capabilities, requires, no raw Process for one-shots, etc.).
|
||||
- Toggle uses intentional defensive poll-act-poll (see code comments).
|
||||
- Toggle uses intentional defensive poll-act-poll; a failed status poll aborts the pending toggle (does not invent `up`/`down`).
|
||||
- When `BackendState` is not `Running`, peer list / exit node / self IP are cleared so the UI never shows a stale connected-looking peer list.
|
||||
- Status row uses `RowLayout` with a real `Layout.fillWidth` spacer (not a no-op on plain `Row`).
|
||||
- Peer `ListView` uses `Flickable.StopAtBounds` (no desktop rubber-band overshoot).
|
||||
|
||||
## Testing
|
||||
|
||||
|
|
|
|||
|
|
@ -11,25 +11,7 @@ This plugin is fully instrumented with `I18n.tr(...)` (from `qs.Common`) for all
|
|||
|
||||
See `getStrings()` and `errorMessage()` in `lib.js` for the canonical list.
|
||||
|
||||
Example `en.json` (for documentation / future tools):
|
||||
|
||||
```json
|
||||
{
|
||||
"Tailscale": "Tailscale",
|
||||
"Connected": "Connected",
|
||||
"Disconnected": "Disconnected",
|
||||
"Exit node: ": "Exit node: ",
|
||||
"None": "None",
|
||||
"Copied %1 to clipboard": "Copied %1 to clipboard",
|
||||
"Invalid exit node hostname": "Invalid exit node hostname",
|
||||
"Failed to connect to Tailscale": "Failed to connect to Tailscale",
|
||||
"Failed to disconnect from Tailscale": "Failed to disconnect from Tailscale",
|
||||
"Failed to set exit node": "Failed to set exit node",
|
||||
"Failed to read Tailscale status": "Failed to read Tailscale status",
|
||||
"Error copying to clipboard": "Error copying to clipboard",
|
||||
"Tailscale command failed": "Tailscale command failed"
|
||||
}
|
||||
```
|
||||
Example `en.json` (for documentation / future tools) lives beside this README.
|
||||
|
||||
## Notes
|
||||
|
||||
|
|
@ -37,4 +19,4 @@ Example `en.json` (for documentation / future tools):
|
|||
- Plugin name/description in `plugin.json` and technical IDs ("tailscalectl") remain English.
|
||||
- This follows DMS `dms-plugin-dev` best practice for future-proofing even when only en is shipped.
|
||||
|
||||
Written by AI agent working for @jtmorris. Model: grok-build-0.1.
|
||||
Written by AI agent working for @jtmorris. Model: Grok 4.5.
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
"None": "None",
|
||||
"Copied %1 to clipboard": "Copied %1 to clipboard",
|
||||
"Invalid exit node hostname": "Invalid exit node hostname",
|
||||
"Not connected": "Not connected",
|
||||
"Failed to connect to Tailscale": "Failed to connect to Tailscale",
|
||||
"Failed to disconnect from Tailscale": "Failed to disconnect from Tailscale",
|
||||
"Failed to set exit node": "Failed to set exit node",
|
||||
|
|
|
|||
|
|
@ -9,5 +9,5 @@
|
|||
"component": "./TailscaleWidget.qml",
|
||||
"permissions": ["process"],
|
||||
"requires": ["tailscale"],
|
||||
"version": "0.2.0"
|
||||
"version": "0.2.1"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue