diff --git a/README.md b/README.md
index e2a48fd..0c3ab8b 100644
--- a/README.md
+++ b/README.md
@@ -45,6 +45,7 @@ docker compose up -d
```
### Docker Permissions Note
+
If you encounter a `PermissionError` when running the Docker container, it's likely because the container's user (UID 1000) doesn't have permission to write to your host's `./meshchat-config` folder. You can fix this by running:
```bash
@@ -246,36 +247,36 @@ MeshChatX can be configured via command-line arguments or environment variables.
We use [Task](https://taskfile.dev/) for automation.
-| Task | Description |
-| :----------------------------- | :--------------------------------------------- |
-| `task install` | Install all dependencies |
-| `task run` | Run the application |
-| `task dev` | Run the application in development mode |
-| `task lint:all` | Run all linters (Python & Frontend) |
-| `task lint:be` | Lint Python code only |
-| `task lint:fe` | Lint frontend code only |
-| `task fmt:all` | Format all code (Python & Frontend) |
-| `task fmt:be` | Format Python code only |
-| `task fmt:fe` | Format frontend code only |
-| `task test:all` | Run all tests |
-| `task test:cov` | Run tests with coverage reports |
-| `task test:be` | Run Python tests only |
-| `task test:fe` | Run frontend tests only |
-| `task build:all` | Build frontend and backend |
-| `task build:fe` | Build only the frontend |
-| `task build:wheel` | Build Python wheel package |
-| `task compile` | Compile Python code to check for syntax errors |
-| `task docker:build` | Build Docker image using buildx |
-| `task docker:run` | Run Docker container using docker-compose |
-| `task dist:linux:appimage` | Build Linux AppImage |
-| `task dist:win:exe` | Build Windows portable executable |
-| `task dist:win:wine` | Build Windows portable (Wine cross-build) |
-| `task dist:all` | Build all Electron apps |
-| `task dist:all:wine` | Build all Electron apps (Wine cross-build) |
-| `task android:prepare` | Prepare Android build |
-| `task android:build` | Build Android APK |
-| `task dist:fe:flatpak` | Build Flatpak package |
-| `task clean` | Clean build artifacts and dependencies |
+| Task | Description |
+| :------------------------- | :--------------------------------------------- |
+| `task install` | Install all dependencies |
+| `task run` | Run the application |
+| `task dev` | Run the application in development mode |
+| `task lint:all` | Run all linters (Python & Frontend) |
+| `task lint:be` | Lint Python code only |
+| `task lint:fe` | Lint frontend code only |
+| `task fmt:all` | Format all code (Python & Frontend) |
+| `task fmt:be` | Format Python code only |
+| `task fmt:fe` | Format frontend code only |
+| `task test:all` | Run all tests |
+| `task test:cov` | Run tests with coverage reports |
+| `task test:be` | Run Python tests only |
+| `task test:fe` | Run frontend tests only |
+| `task build:all` | Build frontend and backend |
+| `task build:fe` | Build only the frontend |
+| `task build:wheel` | Build Python wheel package |
+| `task compile` | Compile Python code to check for syntax errors |
+| `task docker:build` | Build Docker image using buildx |
+| `task docker:run` | Run Docker container using docker-compose |
+| `task dist:linux:appimage` | Build Linux AppImage |
+| `task dist:win:exe` | Build Windows portable executable |
+| `task dist:win:wine` | Build Windows portable (Wine cross-build) |
+| `task dist:all` | Build all Electron apps |
+| `task dist:all:wine` | Build all Electron apps (Wine cross-build) |
+| `task android:prepare` | Prepare Android build |
+| `task android:build` | Build Android APK |
+| `task dist:fe:flatpak` | Build Flatpak package |
+| `task clean` | Clean build artifacts and dependencies |
## Security
diff --git a/meshchatx/src/frontend/components/App.vue b/meshchatx/src/frontend/components/App.vue
index 05ec0c1..9e65820 100644
--- a/meshchatx/src/frontend/components/App.vue
+++ b/meshchatx/src/frontend/components/App.vue
@@ -1095,8 +1095,7 @@ export default {
const status = this.propagationNodeStatus?.state;
const messagesReceived = this.propagationNodeStatus?.messages_received ?? 0;
const messagesStored = this.propagationNodeStatus?.messages_stored ?? 0;
- const deliveryConfirmations =
- this.propagationNodeStatus?.delivery_confirmations ?? 0;
+ const deliveryConfirmations = this.propagationNodeStatus?.delivery_confirmations ?? 0;
const messagesHidden = this.propagationNodeStatus?.messages_hidden ?? 0;
if (status === "complete" || status === "idle") {
const base = this.$t("app.sync_complete", { count: messagesReceived });
diff --git a/meshchatx/src/frontend/components/interfaces/Interface.vue b/meshchatx/src/frontend/components/interfaces/Interface.vue
index 75d2615..1cd6c07 100644
--- a/meshchatx/src/frontend/components/interfaces/Interface.vue
+++ b/meshchatx/src/frontend/components/interfaces/Interface.vue
@@ -38,7 +38,9 @@
-
{{ iface._name }}
+
+ {{ iface._name }}
+
{{ iface.type }}
{{
isInterfaceEnabled(iface) ? $t("app.enabled") : $t("app.disabled")
@@ -48,34 +50,40 @@
{{ description }}
-
- {{ $t("interface.bitrate") }} {{ formatBitsPerSecond(iface._stats?.bitrate ?? 0) }}
- {{ $t("interface.tx") }} {{ formatBytes(iface._stats?.txb ?? 0) }}
- {{ $t("interface.rx") }} {{ formatBytes(iface._stats?.rxb ?? 0) }}
- {{ $t("interface.noise") }} {{ iface._stats?.noise_floor }} dBm
- {{ $t("interface.clients") }} {{ iface._stats?.clients }}
-
-
- {{ iface._stats.ifac_size * 8 }}-bit IFAC
- • {{ iface._stats.ifac_netname }}
- •
-
-
+
+ {{ $t("interface.bitrate") }} {{ formatBitsPerSecond(iface._stats?.bitrate ?? 0) }}
+ {{ $t("interface.tx") }} {{ formatBytes(iface._stats?.txb ?? 0) }}
+ {{ $t("interface.rx") }} {{ formatBytes(iface._stats?.rxb ?? 0) }}
+ {{ $t("interface.noise") }} {{ iface._stats?.noise_floor }} dBm
+ {{ $t("interface.clients") }} {{ iface._stats?.clients }}
+
+
+ {{ iface._stats.ifac_size * 8 }}-bit IFAC
+ • {{ iface._stats.ifac_netname }}
+ •
+
+
-
+