diff --git a/appmgr/src/backup/target/cifs.rs b/appmgr/src/backup/target/cifs.rs
index d94ec6071..04dd25059 100644
--- a/appmgr/src/backup/target/cifs.rs
+++ b/appmgr/src/backup/target/cifs.rs
@@ -1,4 +1,4 @@
-use std::path::PathBuf;
+use std::path::{Path, PathBuf};
use color_eyre::eyre::eyre;
use futures::TryStreamExt;
@@ -47,7 +47,7 @@ pub async fn add(
let guard = TmpMountGuard::mount(&cifs).await?;
let embassy_os = recovery_info(&guard).await?;
guard.unmount().await?;
- let path_string = cifs.path.display().to_string();
+ let path_string = Path::new("/").join(&cifs.path).display().to_string();
let id: u32 = sqlx::query!(
"INSERT INTO cifs_shares (hostname, path, username, password) VALUES (?, ?, ?, ?) RETURNING id AS \"id: u32\"",
cifs.hostname,
@@ -95,7 +95,7 @@ pub async fn update(
let guard = TmpMountGuard::mount(&cifs).await?;
let embassy_os = recovery_info(&guard).await?;
guard.unmount().await?;
- let path_string = cifs.path.display().to_string();
+ let path_string = Path::new("/").join(&cifs.path).display().to_string();
if sqlx::query!(
"UPDATE cifs_shares SET hostname = ?, path = ?, username = ?, password = ? WHERE id = ?",
cifs.hostname,
diff --git a/appmgr/src/disk/mount/filesystem/cifs.rs b/appmgr/src/disk/mount/filesystem/cifs.rs
index c7004617b..d1929f5fa 100644
--- a/appmgr/src/disk/mount/filesystem/cifs.rs
+++ b/appmgr/src/disk/mount/filesystem/cifs.rs
@@ -3,6 +3,7 @@ use std::os::unix::ffi::OsStrExt;
use std::path::{Path, PathBuf};
use async_trait::async_trait;
+use color_eyre::eyre::eyre;
use digest::generic_array::GenericArray;
use digest::Digest;
use serde::{Deserialize, Serialize};
@@ -12,6 +13,7 @@ use tracing::instrument;
use super::FileSystem;
use crate::disk::mount::guard::TmpMountGuard;
+use crate::net::mdns::resolve_mdns;
use crate::util::Invoke;
use crate::Error;
@@ -24,16 +26,21 @@ pub async fn mount_cifs(
mountpoint: impl AsRef
- Path *
Using a shared folder is the recommended way to recover from backup, since it works with all Embassy hardware configurations.
- To restore from a shared folder, please follow the instructions.
+ To restore from a shared folder, please follow the instructions.
Warning! Plugging in more than one physical drive to Embassy can lead to power failure and data corruption.
- To restore from a physical drive, please follow the instructions.
+ To restore from a physical drive, please follow the instructions.
- Shared folders are the recommended way to create Embassy backups.
+ Shared folders are the recommended way to create Embassy backups. View the Instructions
- To backup to a physical drive, please follow the instructions.
+ To backup to a physical drive, please follow the instructions.
diff --git a/ui/src/app/components/backup-drives/backup-drives.component.ts b/ui/src/app/components/backup-drives/backup-drives.component.ts
index fa98a73a8..09e1a9d41 100644
--- a/ui/src/app/components/backup-drives/backup-drives.component.ts
+++ b/ui/src/app/components/backup-drives/backup-drives.component.ts
@@ -238,8 +238,10 @@ const CifsSpec: ConfigSpec = {
hostname: {
type: 'string',
name: 'Hostname',
- description: 'The local URL of the shared folder.',
- placeholder: `e.g. My Computer, Bob's Laptop`,
+ description: 'The hostname of your target device on the Local Area Network.',
+ placeholder: `e.g. 'My Computer' OR 'my-computer.local'`,
+ pattern: '^[a-zA-Z0-9._-]+( [a-zA-Z0-9]+)*$',
+ 'pattern-description': `Must be a valid hostname. e.g. 'My Computer' OR 'my-computer.local'`,
nullable: false,
masked: false,
copyable: false,
@@ -247,7 +249,7 @@ const CifsSpec: ConfigSpec = {
path: {
type: 'string',
name: 'Path',
- description: 'The path to the shared folder on the target device.',
+ description: 'The directory path to the shared folder on your target device.',
placeholder: 'e.g. /Desktop/my-folder',
nullable: false,
masked: false,
diff --git a/ui/src/app/components/install-wizard/prebaked-wizards.ts b/ui/src/app/components/install-wizard/prebaked-wizards.ts
index b6fe4faec..7c0c5fd22 100644
--- a/ui/src/app/components/install-wizard/prebaked-wizards.ts
+++ b/ui/src/app/components/install-wizard/prebaked-wizards.ts
@@ -277,7 +277,8 @@ export class WizardBaker {
whileLoading: { },
afterLoading: { text: 'Cancel' },
},
- next: 'Stop Service' },
+ next: 'Stop Service',
+ },
},
{
slide: {
diff --git a/ui/src/app/components/status/status.component.html b/ui/src/app/components/status/status.component.html
index f1e4a8d6c..41262c8f7 100644
--- a/ui/src/app/components/status/status.component.html
+++ b/ui/src/app/components/status/status.component.html
@@ -6,14 +6,16 @@
>
{{ disconnected ? 'Unknown' : rendering.display }}
- ...
+
- Installing... {{ installProgress }}%
+ Installing
+ {{ installProgress }}%
= 99">
- Finalizing install. This could take a minute...
+ Finalizing install. This could take a minute
+
diff --git a/ui/src/app/pages/marketplace-routes/marketplace-list/marketplace-list.page.html b/ui/src/app/pages/marketplace-routes/marketplace-list/marketplace-list.page.html
index 0d5d1a4bd..f6f5ec387 100644
--- a/ui/src/app/pages/marketplace-routes/marketplace-list/marketplace-list.page.html
+++ b/ui/src/app/pages/marketplace-routes/marketplace-list/marketplace-list.page.html
@@ -109,13 +109,16 @@
-
-
-
-