windows: Bring back restoration of tabs (#25870)

张小白 created

Closes #25022

Release Notes:

- N/A

Change summary

crates/util/src/paths.rs                  | 6 ++++++
crates/workspace/src/persistence/model.rs | 4 ++--
2 files changed, 8 insertions(+), 2 deletions(-)

Detailed changes

crates/util/src/paths.rs 🔗

@@ -146,6 +146,12 @@ impl From<SanitizedPath> for Arc<Path> {
     }
 }
 
+impl From<SanitizedPath> for PathBuf {
+    fn from(sanitized_path: SanitizedPath) -> Self {
+        sanitized_path.0.as_ref().into()
+    }
+}
+
 impl<T: AsRef<Path>> From<T> for SanitizedPath {
     #[cfg(not(target_os = "windows"))]
     fn from(path: T) -> Self {

crates/workspace/src/persistence/model.rs 🔗

@@ -17,7 +17,7 @@ use std::{
     path::{Path, PathBuf},
     sync::Arc,
 };
-use util::ResultExt;
+use util::{paths::SanitizedPath, ResultExt};
 use uuid::Uuid;
 
 #[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
@@ -98,7 +98,7 @@ impl LocalPaths {
     pub fn new<P: AsRef<Path>>(paths: impl IntoIterator<Item = P>) -> Self {
         let mut paths: Vec<PathBuf> = paths
             .into_iter()
-            .map(|p| p.as_ref().to_path_buf())
+            .map(|p| SanitizedPath::from(p).into())
             .collect();
         // Ensure all future `zed workspace1 workspace2` and `zed workspace2 workspace1` calls are using the same workspace.
         // The actual workspace order is stored in the `LocalPathsOrder` struct.