Temp
This commit is contained in:
parent
3be13a914b
commit
2cfc243912
16
Cargo.lock
generated
16
Cargo.lock
generated
|
@ -57,9 +57,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "anstream"
|
||||
version = "0.3.1"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6342bd4f5a1205d7f41e94a41a901f5647c938cdfa96036338e8533c9d6c2450"
|
||||
checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
|
||||
dependencies = [
|
||||
"anstyle",
|
||||
"anstyle-parse",
|
||||
|
@ -389,9 +389,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.2.5"
|
||||
version = "4.2.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a1f23fa97e1d1641371b51f35535cb26959b8e27ab50d167a8b996b5bada819"
|
||||
checksum = "3d70680e56dc65cb226c361aaa4e4a16d1f7e082bfed9ffceaee39c2012384ec"
|
||||
dependencies = [
|
||||
"clap_builder",
|
||||
"clap_derive",
|
||||
|
@ -400,9 +400,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap_builder"
|
||||
version = "4.2.5"
|
||||
version = "4.2.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0fdc5d93c358224b4d6867ef1356d740de2303e9892edc06c5340daeccd96bab"
|
||||
checksum = "3fad499d5e07338414687350c5fdb82b1ab0001e9b26aa6275deccb684b14164"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
|
@ -3746,9 +3746,9 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
|
|||
|
||||
[[package]]
|
||||
name = "winnow"
|
||||
version = "0.4.4"
|
||||
version = "0.4.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5617da7e1f97bf363947d767b91aaf3c2bbc19db7fda9c65af1278713d58e0a2"
|
||||
checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
|
|
@ -4,10 +4,6 @@ use std::process;
|
|||
|
||||
use clap::Parser;
|
||||
|
||||
use crate::commands::{
|
||||
Args, BadExtensionsArgs, BiggestFilesArgs, BrokenFilesArgs, DuplicatesArgs, EmptyFilesArgs, EmptyFoldersArgs, InvalidSymlinksArgs, SameMusicArgs, SimilarImagesArgs,
|
||||
SimilarVideosArgs, TemporaryArgs,
|
||||
};
|
||||
use commands::Commands;
|
||||
use czkawka_core::big_file::SearchMode;
|
||||
use czkawka_core::common::{get_number_of_threads, set_default_number_of_threads};
|
||||
|
@ -28,6 +24,11 @@ use czkawka_core::{
|
|||
temporary::{self, Temporary},
|
||||
};
|
||||
|
||||
use crate::commands::{
|
||||
Args, BadExtensionsArgs, BiggestFilesArgs, BrokenFilesArgs, DuplicatesArgs, EmptyFilesArgs, EmptyFoldersArgs, InvalidSymlinksArgs, SameMusicArgs, SimilarImagesArgs,
|
||||
SimilarVideosArgs, TemporaryArgs,
|
||||
};
|
||||
|
||||
mod commands;
|
||||
|
||||
fn main() {
|
||||
|
|
|
@ -2,11 +2,10 @@ use std::collections::{BTreeSet, HashMap};
|
|||
use std::fs::File;
|
||||
use std::io::prelude::*;
|
||||
use std::io::BufWriter;
|
||||
use std::mem;
|
||||
use std::path::PathBuf;
|
||||
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
||||
use std::sync::Arc;
|
||||
|
||||
use std::mem;
|
||||
use std::time::SystemTime;
|
||||
|
||||
use crossbeam_channel::Receiver;
|
||||
|
@ -393,7 +392,7 @@ impl BadExtensions {
|
|||
};
|
||||
let proper_extension = kind.extension();
|
||||
|
||||
let Some(current_extension)= self.get_and_validate_extension(&file_entry, proper_extension) else {
|
||||
let Some(current_extension) = self.get_and_validate_extension(&file_entry, proper_extension) else {
|
||||
return Some(None);
|
||||
};
|
||||
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
use std::collections::BTreeMap;
|
||||
use std::fs;
|
||||
use std::fs::{DirEntry, File, Metadata};
|
||||
use std::io::{BufWriter, Write};
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::atomic::AtomicBool;
|
||||
use std::sync::atomic::{AtomicUsize, Ordering};
|
||||
use std::sync::Arc;
|
||||
|
||||
use std::fs;
|
||||
use std::time::SystemTime;
|
||||
|
||||
use crossbeam_channel::Receiver;
|
||||
|
@ -175,7 +174,7 @@ impl BigFile {
|
|||
|
||||
// Check every sub folder/file/link etc.
|
||||
for entry in read_dir {
|
||||
let Some((entry_data,metadata)) = common_get_entry_data_metadata(&entry, &mut warnings, current_folder) else {
|
||||
let Some((entry_data, metadata)) = common_get_entry_data_metadata(&entry, &mut warnings, current_folder) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ use std::io::{BufReader, BufWriter};
|
|||
use std::path::{Path, PathBuf};
|
||||
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
||||
use std::sync::Arc;
|
||||
|
||||
use std::time::SystemTime;
|
||||
use std::{fs, mem, panic};
|
||||
|
||||
|
@ -91,7 +90,8 @@ pub struct BrokenFiles {
|
|||
stopped_search: bool,
|
||||
checked_types: CheckedTypes,
|
||||
use_cache: bool,
|
||||
delete_outdated_cache: bool, // TODO add this to GUI
|
||||
// TODO add this to GUI
|
||||
delete_outdated_cache: bool,
|
||||
save_also_as_json: bool,
|
||||
}
|
||||
|
||||
|
@ -224,7 +224,7 @@ impl BrokenFiles {
|
|||
|
||||
// Check every sub folder/file/link etc.
|
||||
for entry in read_dir {
|
||||
let Some((entry_data,metadata)) = common_get_entry_data_metadata(&entry, &mut warnings, current_folder) else {
|
||||
let Some((entry_data, metadata)) = common_get_entry_data_metadata(&entry, &mut warnings, current_folder) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
|
|
|
@ -14,13 +14,14 @@ use directories_next::ProjectDirs;
|
|||
use futures::channel::mpsc::UnboundedSender;
|
||||
use image::{DynamicImage, ImageBuffer, Rgb};
|
||||
use imagepipe::{ImageSource, Pipeline};
|
||||
#[cfg(feature = "heif")]
|
||||
use libheif_rs::{ColorSpace, HeifContext, RgbChroma};
|
||||
|
||||
// #[cfg(feature = "heif")]
|
||||
// use libheif_rs::LibHeif;
|
||||
use crate::common_dir_traversal::{CheckingMethod, ProgressData};
|
||||
use crate::common_directory::Directories;
|
||||
use crate::common_items::ExcludedItems;
|
||||
#[cfg(feature = "heif")]
|
||||
use libheif_rs::{ColorSpace, HeifContext, RgbChroma};
|
||||
|
||||
static NUMBER_OF_THREADS: state::Storage<usize> = state::Storage::new();
|
||||
|
||||
|
@ -32,13 +33,16 @@ pub fn get_number_of_threads() -> usize {
|
|||
num_cpus::get()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_default_number_of_threads() {
|
||||
set_number_of_threads(num_cpus::get());
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn get_default_number_of_threads() -> usize {
|
||||
num_cpus::get()
|
||||
}
|
||||
|
||||
pub fn set_number_of_threads(thread_number: usize) {
|
||||
NUMBER_OF_THREADS.set(thread_number);
|
||||
|
||||
|
@ -182,8 +186,8 @@ pub fn get_dynamic_image_from_raw_image(path: impl AsRef<Path> + std::fmt::Debug
|
|||
}
|
||||
};
|
||||
|
||||
let Some(image) = ImageBuffer::<Rgb<u8>, Vec<u8>>::from_raw(image.width as u32, image.height as u32, image.data) else {
|
||||
return None;
|
||||
let Some(image) = ImageBuffer::<Rgb<u8>, Vec<u8>>::from_raw(image.width as u32, image.height as u32, image.data) else {
|
||||
return None;
|
||||
};
|
||||
|
||||
// println!("Properly hashed {:?}", path);
|
||||
|
|
|
@ -370,7 +370,7 @@ where
|
|||
|
||||
// Check every sub folder/file/link etc.
|
||||
'dir: for entry in read_dir {
|
||||
let Some((entry_data,metadata)) = common_get_entry_data_metadata(&entry, &mut warnings, current_folder) else {
|
||||
let Some((entry_data, metadata)) = common_get_entry_data_metadata(&entry, &mut warnings, current_folder) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
|
@ -692,6 +692,7 @@ pub fn common_read_dir(current_folder: &Path, warnings: &mut Vec<String>) -> Opt
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn common_get_entry_data_metadata<'a>(entry: &'a Result<DirEntry, std::io::Error>, warnings: &mut Vec<String>, current_folder: &Path) -> Option<(&'a DirEntry, Metadata)> {
|
||||
let entry_data = match entry {
|
||||
Ok(t) => t,
|
||||
|
@ -715,6 +716,7 @@ pub fn common_get_entry_data_metadata<'a>(entry: &'a Result<DirEntry, std::io::E
|
|||
};
|
||||
Some((entry_data, metadata))
|
||||
}
|
||||
|
||||
pub fn get_modified_time(metadata: &Metadata, warnings: &mut Vec<String>, current_file_name: &Path, is_folder: bool) -> u64 {
|
||||
match metadata.modified() {
|
||||
Ok(t) => match t.duration_since(UNIX_EPOCH) {
|
||||
|
|
|
@ -1494,7 +1494,7 @@ pub fn load_hashes_from_file(text_messages: &mut Messages, delete_outdated_cache
|
|||
open_cache_folder(&get_file_hash_name(type_of_hash, is_prehash), false, false, &mut text_messages.warnings)
|
||||
{
|
||||
// Unwrap could fail when failed to open cache file, but json would exists
|
||||
let Some(file_handler) = file_handler else { return Default::default() };
|
||||
let Some(file_handler) = file_handler else { return Default::default(); };
|
||||
let reader = BufReader::new(file_handler);
|
||||
|
||||
let mut hashmap_loaded_entries: BTreeMap<u64, Vec<FileEntry>> = Default::default();
|
||||
|
|
|
@ -424,7 +424,7 @@ impl SameMusic {
|
|||
true
|
||||
}
|
||||
fn read_single_file_tag(&self, path: &str, mut music_entry: MusicEntry) -> Option<MusicEntry> {
|
||||
let Ok(mut file) = File::open(path) else{return None};
|
||||
let Ok(mut file) = File::open(path) else { return None; };
|
||||
|
||||
let result = panic::catch_unwind(move || {
|
||||
match read_from(&mut file) {
|
||||
|
|
|
@ -2,12 +2,11 @@ use std::collections::{BTreeSet, HashMap, HashSet};
|
|||
use std::fs::{DirEntry, File, Metadata};
|
||||
use std::io::Write;
|
||||
use std::io::*;
|
||||
use std::mem;
|
||||
use std::panic;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
||||
use std::sync::Arc;
|
||||
|
||||
use std::mem;
|
||||
use std::time::SystemTime;
|
||||
|
||||
use bk_tree::BKTree;
|
||||
|
@ -92,7 +91,8 @@ pub struct SimilarImages {
|
|||
recursive_search: bool,
|
||||
minimal_file_size: u64,
|
||||
maximal_file_size: u64,
|
||||
image_hashes: HashMap<ImHash, Vec<FileEntry>>, // Hashmap with image hashes and Vector with names of files
|
||||
image_hashes: HashMap<ImHash, Vec<FileEntry>>,
|
||||
// Hashmap with image hashes and Vector with names of files
|
||||
stopped_search: bool,
|
||||
similarity: u32,
|
||||
images_to_check: HashMap<String, FileEntry>,
|
||||
|
@ -318,7 +318,7 @@ impl SimilarImages {
|
|||
};
|
||||
|
||||
for entry in read_dir {
|
||||
let Some((entry_data,metadata)) = common_get_entry_data_metadata(&entry, &mut warnings, current_folder) else {
|
||||
let Some((entry_data, metadata)) = common_get_entry_data_metadata(&entry, &mut warnings, current_folder) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
|
|
|
@ -2,11 +2,10 @@ use std::collections::{BTreeMap, BTreeSet, HashMap};
|
|||
use std::fs::{DirEntry, File, Metadata};
|
||||
use std::io::Write;
|
||||
use std::io::*;
|
||||
use std::mem;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
||||
use std::sync::Arc;
|
||||
|
||||
use std::mem;
|
||||
use std::time::SystemTime;
|
||||
|
||||
use crossbeam_channel::Receiver;
|
||||
|
@ -283,7 +282,7 @@ impl SimilarVideos {
|
|||
|
||||
// Check every sub folder/file/link etc.
|
||||
for entry in read_dir {
|
||||
let Some((entry_data,metadata)) = common_get_entry_data_metadata(&entry, &mut warnings, current_folder) else {
|
||||
let Some((entry_data, metadata)) = common_get_entry_data_metadata(&entry, &mut warnings, current_folder) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
|
@ -327,7 +326,7 @@ impl SimilarVideos {
|
|||
fn add_video_file_entry(&self, metadata: &Metadata, entry_data: &DirEntry, fe_result: &mut Vec<(String, FileEntry)>, warnings: &mut Vec<String>, current_folder: &Path) {
|
||||
let Some(file_name_lowercase) = get_lowercase_name(entry_data,
|
||||
warnings) else {
|
||||
return;
|
||||
return;
|
||||
};
|
||||
|
||||
if !self.allowed_extensions.matches_filename(&file_name_lowercase) {
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
use std::fs;
|
||||
use std::fs::{DirEntry, File, Metadata};
|
||||
use std::io::prelude::*;
|
||||
use std::io::BufWriter;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
||||
use std::sync::Arc;
|
||||
|
||||
use std::fs;
|
||||
use std::time::SystemTime;
|
||||
|
||||
use crossbeam_channel::Receiver;
|
||||
|
@ -175,7 +174,7 @@ impl Temporary {
|
|||
|
||||
// Check every sub folder/file/link etc.
|
||||
for entry in read_dir {
|
||||
let Some((entry_data,metadata)) = common_get_entry_data_metadata(&entry, &mut warnings, current_folder) else {
|
||||
let Some((entry_data, metadata)) = common_get_entry_data_metadata(&entry, &mut warnings, current_folder) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
|
|
|
@ -1345,6 +1345,7 @@ fn vector_sort_unstable_entry_by_path(vector: &Vec<FileEntry>) -> Vec<FileEntry>
|
|||
vector.clone()
|
||||
}
|
||||
}
|
||||
|
||||
fn vector_sort_simple_unstable_entry_by_path(vector: &[FileEntry]) -> Vec<FileEntry> {
|
||||
let mut vector = vector.to_owned();
|
||||
vector.sort_unstable_by_key(|e| {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use fs_extra::dir::CopyOptions;
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
use fs_extra::dir::CopyOptions;
|
||||
use gtk4::prelude::*;
|
||||
use gtk4::{ResponseType, TreePath};
|
||||
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
use futures::channel::mpsc::UnboundedSender;
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::sync::Arc;
|
||||
use std::thread;
|
||||
|
||||
use futures::channel::mpsc::UnboundedSender;
|
||||
use glib::Sender;
|
||||
use gtk4::prelude::*;
|
||||
|
||||
use czkawka_core::bad_extensions::BadExtensions;
|
||||
use czkawka_core::big_file::BigFile;
|
||||
use czkawka_core::broken_files::{BrokenFiles, CheckedTypes};
|
||||
|
||||
use czkawka_core::common_dir_traversal::ProgressData;
|
||||
use czkawka_core::duplicate::DuplicateFinder;
|
||||
use czkawka_core::empty_files::EmptyFiles;
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
#![allow(clippy::type_complexity)]
|
||||
#![allow(clippy::needless_late_init)]
|
||||
|
||||
use futures::channel::mpsc;
|
||||
use futures::channel::mpsc::{UnboundedReceiver, UnboundedSender};
|
||||
use std::env;
|
||||
use std::ffi::OsString;
|
||||
|
||||
use futures::channel::mpsc;
|
||||
use futures::channel::mpsc::{UnboundedReceiver, UnboundedSender};
|
||||
use gtk4::gio::ApplicationFlags;
|
||||
use gtk4::prelude::*;
|
||||
use gtk4::Application;
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
use glib::types::Type;
|
||||
|
||||
use crate::help_functions::{
|
||||
BottomButtonsEnum, ColumnsBadExtensions, ColumnsBigFiles, ColumnsBrokenFiles, ColumnsDuplicates, ColumnsEmptyFiles, ColumnsEmptyFolders, ColumnsInvalidSymlinks,
|
||||
ColumnsSameMusic, ColumnsSimilarImages, ColumnsSimilarVideos, ColumnsTemporaryFiles, PopoverTypes,
|
||||
};
|
||||
use crate::notebook_enums::{NotebookMainEnum, NUMBER_OF_NOTEBOOK_MAIN_TABS};
|
||||
use glib::types::Type;
|
||||
|
||||
pub struct NotebookObject {
|
||||
pub notebook_type: NotebookMainEnum,
|
||||
|
|
Loading…
Reference in a new issue