Approximate comparison of music (#483)
This commit is contained in:
parent
c8549b3810
commit
ce3d86fd4e
|
@ -95,6 +95,7 @@ pub struct SameMusic {
|
|||
delete_method: DeleteMethod,
|
||||
music_similarity: MusicSimilarity,
|
||||
stopped_search: bool,
|
||||
approximate_comparison: bool,
|
||||
}
|
||||
|
||||
impl SameMusic {
|
||||
|
@ -113,6 +114,7 @@ impl SameMusic {
|
|||
maximal_file_size: u64::MAX,
|
||||
duplicated_music_entries: vec![],
|
||||
music_to_check: Vec::with_capacity(2048),
|
||||
approximate_comparison: true,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -157,6 +159,10 @@ impl SameMusic {
|
|||
self.delete_method = delete_method;
|
||||
}
|
||||
|
||||
pub fn set_approximate_comparison(&mut self, approximate_comparison: bool) {
|
||||
self.approximate_comparison = approximate_comparison;
|
||||
}
|
||||
|
||||
pub fn set_recursive_search(&mut self, recursive_search: bool) {
|
||||
self.recursive_search = recursive_search;
|
||||
}
|
||||
|
@ -470,8 +476,13 @@ impl SameMusic {
|
|||
}
|
||||
let mut hash_map: BTreeMap<String, Vec<FileEntry>> = Default::default();
|
||||
for file_entry in vec_file_entry {
|
||||
let title = file_entry.title.to_lowercase().trim().to_string();
|
||||
let mut title = file_entry.title.to_lowercase().trim().to_string();
|
||||
if !title.is_empty() {
|
||||
if self.approximate_comparison {
|
||||
if let Some(index) = title.find('(') {
|
||||
title = title[0..index].trim().to_string();
|
||||
}
|
||||
}
|
||||
hash_map.entry(title.clone()).or_insert_with(Vec::new);
|
||||
hash_map.get_mut(title.as_str()).unwrap().push(file_entry);
|
||||
}
|
||||
|
@ -497,7 +508,12 @@ impl SameMusic {
|
|||
}
|
||||
let mut hash_map: BTreeMap<String, Vec<FileEntry>> = Default::default();
|
||||
for file_entry in vec_file_entry {
|
||||
let artist = file_entry.artist.to_lowercase().trim().to_string();
|
||||
let mut artist = file_entry.artist.to_lowercase().trim().to_string();
|
||||
if self.approximate_comparison {
|
||||
if let Some(index) = artist.find('(') {
|
||||
artist = artist[0..index].trim().to_string();
|
||||
}
|
||||
}
|
||||
if !artist.is_empty() {
|
||||
hash_map.entry(artist.clone()).or_insert_with(Vec::new);
|
||||
hash_map.get_mut(artist.as_str()).unwrap().push(file_entry);
|
||||
|
@ -524,7 +540,12 @@ impl SameMusic {
|
|||
}
|
||||
let mut hash_map: BTreeMap<String, Vec<FileEntry>> = Default::default();
|
||||
for file_entry in vec_file_entry {
|
||||
let album_title = file_entry.album_title.to_lowercase().trim().to_string();
|
||||
let mut album_title = file_entry.album_title.to_lowercase().trim().to_string();
|
||||
if self.approximate_comparison {
|
||||
if let Some(index) = album_title.find('(') {
|
||||
album_title = album_title[0..index].trim().to_string();
|
||||
}
|
||||
}
|
||||
if !album_title.is_empty() {
|
||||
hash_map.entry(album_title.clone()).or_insert_with(Vec::new);
|
||||
hash_map.get_mut(album_title.as_str()).unwrap().push(file_entry);
|
||||
|
@ -551,7 +572,12 @@ impl SameMusic {
|
|||
}
|
||||
let mut hash_map: BTreeMap<String, Vec<FileEntry>> = Default::default();
|
||||
for file_entry in vec_file_entry {
|
||||
let album_artist = file_entry.album_artist.to_lowercase().trim().to_string();
|
||||
let mut album_artist = file_entry.album_artist.to_lowercase().trim().to_string();
|
||||
if self.approximate_comparison {
|
||||
if let Some(index) = album_artist.find('(') {
|
||||
album_artist = album_artist[0..index].trim().to_string();
|
||||
}
|
||||
}
|
||||
if !album_artist.is_empty() {
|
||||
hash_map.entry(album_artist.clone()).or_insert_with(Vec::new);
|
||||
hash_map.get_mut(album_artist.as_str()).unwrap().push(file_entry);
|
||||
|
|
|
@ -115,6 +115,7 @@ pub fn connect_button_search(
|
|||
let entry_info = gui_data.entry_info.clone();
|
||||
let button_settings = gui_data.header.button_settings.clone();
|
||||
let button_app_info = gui_data.header.button_app_info.clone();
|
||||
let check_button_music_approximate_comparison = gui_data.main_notebook.check_button_music_approximate_comparison.clone();
|
||||
|
||||
buttons_search_clone.connect_clicked(move |_| {
|
||||
let included_directories = get_path_buf_from_vector_of_strings(get_string_from_list_store(&tree_view_included_directories));
|
||||
|
@ -409,6 +410,7 @@ pub fn connect_button_search(
|
|||
|
||||
let minimal_file_size = entry_same_music_minimal_size.text().as_str().parse::<u64>().unwrap_or(1024 * 8);
|
||||
let maximal_file_size = entry_same_music_maximal_size.text().as_str().parse::<u64>().unwrap_or(1024 * 1024 * 1024 * 1024);
|
||||
let approximate_comparison = check_button_music_approximate_comparison.is_active();
|
||||
|
||||
let mut music_similarity: MusicSimilarity = MusicSimilarity::NONE;
|
||||
|
||||
|
@ -441,6 +443,7 @@ pub fn connect_button_search(
|
|||
mf.set_maximal_file_size(maximal_file_size);
|
||||
mf.set_recursive_search(recursive_search);
|
||||
mf.set_music_similarity(music_similarity);
|
||||
mf.set_approximate_comparison(approximate_comparison);
|
||||
mf.find_same_music(Some(&stop_receiver), Some(&futures_sender_same_music));
|
||||
let _ = glib_stop_sender.send(Message::SameMusic(mf));
|
||||
});
|
||||
|
|
|
@ -57,6 +57,7 @@ pub struct GuiMainNotebook {
|
|||
pub check_button_music_album_title: gtk::CheckButton,
|
||||
pub check_button_music_album_artist: gtk::CheckButton,
|
||||
pub check_button_music_year: gtk::CheckButton,
|
||||
pub check_button_music_approximate_comparison: gtk::CheckButton,
|
||||
|
||||
//// Radio Buttons
|
||||
// Duplicates
|
||||
|
@ -171,6 +172,7 @@ impl GuiMainNotebook {
|
|||
let check_button_music_album_title: gtk::CheckButton = builder.object("check_button_music_album_title").unwrap();
|
||||
let check_button_music_album_artist: gtk::CheckButton = builder.object("check_button_music_album_artist").unwrap();
|
||||
let check_button_music_year: gtk::CheckButton = builder.object("check_button_music_year").unwrap();
|
||||
let check_button_music_approximate_comparison: gtk::CheckButton = builder.object("check_button_music_approximate_comparison").unwrap();
|
||||
|
||||
//// Radio Buttons
|
||||
let radio_button_duplicates_name: gtk::RadioButton = builder.object("radio_button_duplicates_name").unwrap();
|
||||
|
@ -265,6 +267,7 @@ impl GuiMainNotebook {
|
|||
check_button_music_album_title,
|
||||
check_button_music_album_artist,
|
||||
check_button_music_year,
|
||||
check_button_music_approximate_comparison,
|
||||
radio_button_duplicates_name,
|
||||
radio_button_duplicates_size,
|
||||
radio_button_duplicates_hash,
|
||||
|
|
|
@ -1936,6 +1936,31 @@ Author: Rafał Mikrut
|
|||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="check_button_music_approximate_comparison">
|
||||
<property name="label" translatable="yes">Approximate Comparison</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">False</property>
|
||||
<property name="draw-indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolled_window_same_music_finder">
|
||||
<property name="visible">True</property>
|
||||
|
@ -1949,7 +1974,7 @@ Author: Rafał Mikrut
|
|||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
|
|
Loading…
Reference in New Issue