Skip to content

Commit 97563a7

Browse files
committed
Fix problem with manual adding of windows disks like C:/
1 parent 5d79dc7 commit 97563a7

File tree

1 file changed

+69
-3
lines changed

1 file changed

+69
-3
lines changed

czkawka_gui/src/connect_things/connect_selection_of_directories.rs

+69-3
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,7 @@ fn add_manually_directories(window_main: &Window, tree_view: &TreeView, excluded
162162
#[cfg(target_family = "windows")]
163163
let mut text = Common::normalize_windows_path(text).to_string_lossy().to_string();
164164

165-
while text != "/" && (text.ends_with('/') || text.ends_with('\\')) {
166-
text.pop();
167-
}
165+
remove_ending_slashes(&mut text);
168166

169167
if !text.is_empty() {
170168
let list_store = get_list_store(&tree_view);
@@ -186,3 +184,71 @@ fn add_manually_directories(window_main: &Window, tree_view: &TreeView, excluded
186184
dialog.close();
187185
});
188186
}
187+
fn remove_ending_slashes(original_string: &mut String) {
188+
let mut windows_disk_path: bool = false;
189+
let mut chars = original_string.chars();
190+
if let Some(first_character) = chars.next() {
191+
if first_character.is_alphabetic() {
192+
if let Some(second_character) = chars.next() {
193+
if second_character == ':' {
194+
windows_disk_path = true;
195+
original_string.push('/'); // In case of adding window path without ending slash e.g. C: instead C:/ or C:\
196+
}
197+
}
198+
}
199+
}
200+
201+
while (original_string != "/" && (original_string.ends_with('/') || original_string.ends_with('\\'))) && (!windows_disk_path || original_string.len() > 3) {
202+
original_string.pop();
203+
}
204+
}
205+
#[test]
206+
pub fn test_remove_ending_slashes() {
207+
let mut original = "/home/rafal".to_string();
208+
remove_ending_slashes(&mut original);
209+
assert_eq!(&original, "/home/rafal");
210+
211+
let mut original = "/home/rafal/".to_string();
212+
remove_ending_slashes(&mut original);
213+
assert_eq!(&original, "/home/rafal");
214+
215+
let mut original = "/home/rafal\\".to_string();
216+
remove_ending_slashes(&mut original);
217+
assert_eq!(&original, "/home/rafal");
218+
219+
let mut original = "/home/rafal/////////".to_string();
220+
remove_ending_slashes(&mut original);
221+
assert_eq!(&original, "/home/rafal");
222+
223+
let mut original = "/home/rafal/\\//////\\\\".to_string();
224+
remove_ending_slashes(&mut original);
225+
assert_eq!(&original, "/home/rafal");
226+
227+
let mut original = "/home/rafal\\\\\\\\\\\\\\\\".to_string();
228+
remove_ending_slashes(&mut original);
229+
assert_eq!(&original, "/home/rafal");
230+
231+
let mut original = "\\\\\\\\\\\\\\\\\\\\\\\\".to_string();
232+
remove_ending_slashes(&mut original);
233+
assert_eq!(&original, "");
234+
235+
let mut original = "//////////".to_string();
236+
remove_ending_slashes(&mut original);
237+
assert_eq!(&original, "/");
238+
239+
let mut original = "C:/".to_string();
240+
remove_ending_slashes(&mut original);
241+
assert_eq!(&original, "C:/");
242+
243+
let mut original = "C:\\".to_string();
244+
remove_ending_slashes(&mut original);
245+
assert_eq!(&original, "C:\\");
246+
247+
let mut original = "C://////////".to_string();
248+
remove_ending_slashes(&mut original);
249+
assert_eq!(&original, "C:/");
250+
251+
let mut original = "C:\\\\\\\\\\".to_string();
252+
remove_ending_slashes(&mut original);
253+
assert_eq!(&original, "C:\\");
254+
}

0 commit comments

Comments
 (0)