1
0
Fork 0
mirror of synced 2024-05-03 12:03:22 +12:00

Split symlink path to two path and file name (#127)

This commit is contained in:
Rafał Mikrut 2020-12-21 21:19:59 +01:00 committed by GitHub
parent 1412a39389
commit 7c3b9681b1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 29 additions and 40 deletions

View file

@ -84,7 +84,7 @@ pub fn connect_button_delete(gui_data: &GuiData) {
tree_remove(scrolled_window_same_music_finder.clone(), ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, ColumnsSameMusic::Color as i32, &gui_data);
}
"scrolled_window_invalid_symlinks" => {
basic_remove_invalid_symlinks(scrolled_window_invalid_symlinks.clone(), ColumnsInvalidSymlinks::SymlinkPath as i32, &gui_data);
basic_remove(scrolled_window_invalid_symlinks.clone(), ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, &gui_data);
}
e => panic!("Not existent {}", e),
}
@ -177,38 +177,6 @@ fn empty_folder_remover(scrolled_window: gtk::ScrolledWindow, column_file_name:
selection.unselect_all();
}
fn basic_remove_invalid_symlinks(scrolled_window: gtk::ScrolledWindow, column_symlink_path: i32, gui_data: &GuiData) {
let text_view_errors = gui_data.text_view_errors.clone();
let tree_view = scrolled_window.get_children().get(0).unwrap().clone().downcast::<gtk::TreeView>().unwrap();
let selection = tree_view.get_selection();
let (selection_rows, tree_model) = selection.get_selected_rows();
if selection_rows.is_empty() {
return;
}
let list_store = tree_model.clone().downcast::<gtk::ListStore>().unwrap();
// let new_tree_model = TreeModel::new(); // TODO - maybe create new model when inserting a new data, because this seems to be not optimal when using thousands of rows
let mut messages: String = "".to_string();
// Must be deleted from end to start, because when deleting entries, TreePath(and also TreeIter) will points to invalid data
for tree_path in selection_rows.iter().rev() {
let symlink_path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_symlink_path).get::<String>().unwrap().unwrap();
match fs::remove_file(&symlink_path) {
Ok(_) => {
list_store.remove(&list_store.get_iter(tree_path).unwrap());
}
Err(_) => messages += format!("Failed to remove file {} because file doesn't exists or you don't have permissions.\n", symlink_path).as_str(),
}
}
text_view_errors.get_buffer().unwrap().set_text(messages.as_str());
selection.unselect_all();
}
fn basic_remove(scrolled_window: gtk::ScrolledWindow, column_file_name: i32, column_path: i32, gui_data: &GuiData) {
let text_view_errors = gui_data.text_view_errors.clone();

View file

@ -622,13 +622,15 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{
let list_store = get_list_store(&scrolled_window_invalid_symlinks);
let col_indices = [0, 1, 2, 3];
let col_indices = [0, 1, 2, 3, 4];
let vector = ifs.get_invalid_symlinks();
for file_entry in vector {
let values: [&dyn ToValue; 4] = [
&file_entry.symlink_path.to_string_lossy().to_string(),
let (directory, file) = split_path(&file_entry.symlink_path);
let values: [&dyn ToValue; 5] = [
&file,
&directory,
&file_entry.destination_path.to_string_lossy().to_string(),
&get_text_from_invalid_symlink_cause(&file_entry.type_of_error),
&(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()),

View file

@ -399,10 +399,19 @@ pub fn create_tree_view_invalid_symlinks(tree_view: &mut gtk::TreeView) {
let renderer = gtk::CellRendererText::new();
let column: gtk::TreeViewColumn = TreeViewColumn::new();
column.pack_start(&renderer, true);
column.set_title("Symlink Path");
column.set_title("Symlink File Name");
column.set_resizable(true);
column.set_min_width(50);
column.add_attribute(&renderer, "text", ColumnsInvalidSymlinks::SymlinkPath as i32);
column.add_attribute(&renderer, "text", ColumnsInvalidSymlinks::Name as i32);
tree_view.append_column(&column);
let renderer = gtk::CellRendererText::new();
let column: gtk::TreeViewColumn = TreeViewColumn::new();
column.pack_start(&renderer, true);
column.set_title("Symlink Folder");
column.set_resizable(true);
column.set_min_width(50);
column.add_attribute(&renderer, "text", ColumnsInvalidSymlinks::Path as i32);
tree_view.append_column(&column);
let renderer = gtk::CellRendererText::new();

View file

@ -55,6 +55,13 @@ pub fn opening_double_click_function_similar_images(tree_view: &gtk::TreeView, e
gtk::Inhibit(false)
}
pub fn opening_double_click_function_invalid_symlinks(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress {
common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32);
}
gtk::Inhibit(false)
}
pub fn common_open_function(tree_view: &gtk::TreeView, column_name: i32, column_path: i32) {
let selection = tree_view.get_selection();
let (selection_rows, tree_model) = selection.get_selected_rows();

View file

@ -94,7 +94,8 @@ pub enum ColumnsSameMusic {
TextColor,
}
pub enum ColumnsInvalidSymlinks {
SymlinkPath = 0,
Name = 0,
Path,
DestinationPath,
TypeOfError,
Modification,

View file

@ -280,7 +280,7 @@ pub fn initialize_gui(gui_data: &GuiData) {
}
// Invalid Symlinks
{
let col_types: [glib::types::Type; 4] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String];
let col_types: [glib::types::Type; 5] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
@ -289,6 +289,8 @@ pub fn initialize_gui(gui_data: &GuiData) {
create_tree_view_invalid_symlinks(&mut tree_view);
tree_view.connect_button_press_event(opening_double_click_function_invalid_symlinks);
scrolled_window_invalid_symlinks.add(&tree_view);
scrolled_window_invalid_symlinks.show_all();
}