2020-12-14 04:35:27 +13:00
|
|
|
// Remove console window in Windows OS
|
|
|
|
#![windows_subsystem = "windows"]
|
2021-07-16 16:51:54 +12:00
|
|
|
#![allow(clippy::collapsible_else_if)]
|
2021-11-25 20:36:49 +13:00
|
|
|
#![allow(clippy::too_many_arguments)]
|
2022-01-11 00:19:28 +13:00
|
|
|
#![allow(clippy::type_complexity)]
|
2022-02-26 06:47:25 +13:00
|
|
|
#![allow(clippy::needless_late_init)]
|
2020-12-14 04:35:27 +13:00
|
|
|
|
2022-06-01 03:52:55 +12:00
|
|
|
use std::env;
|
|
|
|
use std::ffi::OsString;
|
|
|
|
|
2023-05-03 08:37:12 +12:00
|
|
|
use futures::channel::mpsc;
|
|
|
|
use futures::channel::mpsc::{UnboundedReceiver, UnboundedSender};
|
2023-10-05 19:06:47 +13:00
|
|
|
use glib::Priority;
|
2022-05-22 20:59:09 +12:00
|
|
|
use gtk4::gio::ApplicationFlags;
|
|
|
|
use gtk4::prelude::*;
|
2023-10-05 19:06:47 +13:00
|
|
|
use gtk4::Application;
|
2023-10-11 07:54:41 +13:00
|
|
|
use log::info;
|
2021-11-28 08:49:20 +13:00
|
|
|
|
2022-01-14 03:58:33 +13:00
|
|
|
use connect_things::connect_about_buttons::*;
|
|
|
|
use connect_things::connect_button_compare::*;
|
|
|
|
use connect_things::connect_button_delete::*;
|
|
|
|
use connect_things::connect_button_hardlink::*;
|
|
|
|
use connect_things::connect_button_move::*;
|
|
|
|
use connect_things::connect_button_save::*;
|
|
|
|
use connect_things::connect_button_search::*;
|
|
|
|
use connect_things::connect_button_select::*;
|
|
|
|
use connect_things::connect_button_stop::*;
|
|
|
|
use connect_things::connect_change_language::*;
|
|
|
|
use connect_things::connect_duplicate_buttons::connect_duplicate_combo_box;
|
|
|
|
use connect_things::connect_header_buttons::*;
|
|
|
|
use connect_things::connect_notebook_tabs::*;
|
|
|
|
use connect_things::connect_progress_window::*;
|
|
|
|
use connect_things::connect_selection_of_directories::*;
|
|
|
|
use connect_things::connect_settings::*;
|
|
|
|
use connect_things::connect_show_hide_ui::*;
|
|
|
|
use connect_things::connect_similar_image_size_change::*;
|
2023-10-11 07:54:41 +13:00
|
|
|
use czkawka_core::common::{get_number_of_threads, print_version_mode, set_number_of_threads, setup_logger};
|
2023-05-03 08:37:12 +12:00
|
|
|
use czkawka_core::common_dir_traversal::ProgressData;
|
2022-06-01 03:52:55 +12:00
|
|
|
use czkawka_core::*;
|
2022-01-14 03:58:33 +13:00
|
|
|
use gui_structs::gui_data::*;
|
2021-11-28 08:49:20 +13:00
|
|
|
|
2022-06-01 03:52:55 +12:00
|
|
|
use crate::compute_results::*;
|
2023-02-19 22:21:14 +13:00
|
|
|
use crate::connect_things::connect_button_sort::connect_button_sort;
|
|
|
|
use crate::connect_things::connect_popovers_select::connect_popover_select;
|
|
|
|
use crate::connect_things::connect_popovers_sort::connect_popover_sort;
|
2023-05-08 06:54:05 +12:00
|
|
|
use crate::connect_things::connect_same_music_mode_changed::connect_same_music_change_mode;
|
2022-06-01 03:52:55 +12:00
|
|
|
use crate::initialize_gui::*;
|
|
|
|
use crate::language_functions::LANGUAGES_ALL;
|
|
|
|
use crate::saving_loading::*;
|
|
|
|
use crate::tests::validate_notebook_data;
|
|
|
|
|
2021-11-25 20:36:49 +13:00
|
|
|
mod compute_results;
|
2022-01-14 03:58:33 +13:00
|
|
|
mod connect_things;
|
2020-10-16 04:51:47 +13:00
|
|
|
mod create_tree_view;
|
2022-01-14 03:58:33 +13:00
|
|
|
mod gui_structs;
|
2021-12-14 07:13:53 +13:00
|
|
|
mod help_combo_box;
|
2020-09-30 05:44:20 +13:00
|
|
|
mod help_functions;
|
2020-12-08 03:25:44 +13:00
|
|
|
mod initialize_gui;
|
2021-12-12 04:16:14 +13:00
|
|
|
mod language_functions;
|
2022-01-20 10:35:07 +13:00
|
|
|
mod localizer_gui;
|
2021-01-11 00:06:25 +13:00
|
|
|
mod notebook_enums;
|
2022-06-22 03:24:08 +12:00
|
|
|
mod notebook_info;
|
2021-11-25 20:36:49 +13:00
|
|
|
mod opening_selecting_records;
|
2020-12-08 03:25:44 +13:00
|
|
|
mod saving_loading;
|
2021-02-21 00:24:36 +13:00
|
|
|
mod taskbar_progress;
|
|
|
|
#[cfg(not(target_os = "windows"))]
|
|
|
|
mod taskbar_progress_dummy;
|
|
|
|
#[cfg(target_os = "windows")]
|
|
|
|
mod taskbar_progress_win;
|
2021-11-25 20:36:49 +13:00
|
|
|
mod tests;
|
2020-09-30 05:44:20 +13:00
|
|
|
|
2020-09-02 05:34:39 +12:00
|
|
|
fn main() {
|
2023-02-19 22:21:14 +13:00
|
|
|
let application = Application::new(None::<String>, ApplicationFlags::HANDLES_OPEN | ApplicationFlags::HANDLES_COMMAND_LINE);
|
2022-04-17 04:31:01 +12:00
|
|
|
application.connect_command_line(move |app, cmdline| {
|
2023-10-05 19:06:47 +13:00
|
|
|
setup_logger(false);
|
2023-10-11 07:54:41 +13:00
|
|
|
print_version_mode();
|
2023-01-29 06:54:02 +13:00
|
|
|
build_ui(app, &cmdline.arguments());
|
2022-04-17 04:31:01 +12:00
|
|
|
0
|
|
|
|
});
|
|
|
|
application.run_with_args(&env::args().collect::<Vec<_>>());
|
|
|
|
}
|
2022-06-01 03:52:55 +12:00
|
|
|
|
2023-01-29 06:54:02 +13:00
|
|
|
fn build_ui(application: &Application, arguments: &[OsString]) {
|
2023-10-05 19:06:47 +13:00
|
|
|
let gui_data: GuiData = GuiData::new_with_application(application);
|
2020-09-23 22:17:19 +12:00
|
|
|
|
2022-04-17 04:31:01 +12:00
|
|
|
// Used for getting data from thread
|
2023-10-05 19:06:47 +13:00
|
|
|
let (glib_stop_sender, glib_stop_receiver) = glib::MainContext::channel(Priority::default());
|
2020-09-23 22:17:19 +12:00
|
|
|
|
2022-04-17 04:31:01 +12:00
|
|
|
// Futures progress report
|
2023-05-11 07:27:41 +12:00
|
|
|
let (progress_sender, progress_receiver): (UnboundedSender<ProgressData>, UnboundedReceiver<ProgressData>) = mpsc::unbounded();
|
2020-09-05 07:12:18 +12:00
|
|
|
|
2023-10-05 19:06:47 +13:00
|
|
|
initialize_gui(&gui_data);
|
2022-04-17 04:31:01 +12:00
|
|
|
validate_notebook_data(&gui_data); // Must be run after initialization of gui, to check if everything was properly setup
|
|
|
|
reset_configuration(false, &gui_data.upper_notebook, &gui_data.main_notebook, &gui_data.settings, &gui_data.text_view_errors); // Fallback for invalid loading setting project
|
|
|
|
load_system_language(&gui_data); // Check for default system language, must be loaded after initializing GUI and before loading settings from file
|
|
|
|
load_configuration(
|
|
|
|
false,
|
|
|
|
&gui_data.upper_notebook,
|
|
|
|
&gui_data.main_notebook,
|
|
|
|
&gui_data.settings,
|
|
|
|
&gui_data.text_view_errors,
|
|
|
|
&gui_data.scrolled_window_errors,
|
2023-01-29 06:54:02 +13:00
|
|
|
arguments,
|
2022-04-17 04:31:01 +12:00
|
|
|
);
|
2022-11-26 08:38:27 +13:00
|
|
|
set_number_of_threads(gui_data.settings.scale_settings_number_of_threads.value().round() as usize);
|
2023-10-11 07:54:41 +13:00
|
|
|
info!("Set thread number to {}", get_number_of_threads());
|
2020-10-10 22:15:20 +13:00
|
|
|
|
2022-04-17 04:31:01 +12:00
|
|
|
// Needs to run when entire GUI is initialized
|
|
|
|
connect_change_language(&gui_data);
|
2021-12-12 04:16:14 +13:00
|
|
|
|
2022-04-17 04:31:01 +12:00
|
|
|
connect_button_delete(&gui_data);
|
|
|
|
connect_button_save(&gui_data);
|
2023-05-11 07:27:41 +12:00
|
|
|
connect_button_search(&gui_data, glib_stop_sender, progress_sender);
|
2022-04-17 04:31:01 +12:00
|
|
|
connect_button_select(&gui_data);
|
2023-02-19 22:21:14 +13:00
|
|
|
connect_button_sort(&gui_data);
|
2022-04-17 04:31:01 +12:00
|
|
|
connect_button_stop(&gui_data);
|
|
|
|
connect_button_hardlink_symlink(&gui_data);
|
|
|
|
connect_button_move(&gui_data);
|
|
|
|
connect_button_compare(&gui_data);
|
2022-01-11 00:19:28 +13:00
|
|
|
|
2022-04-17 04:31:01 +12:00
|
|
|
connect_duplicate_combo_box(&gui_data);
|
|
|
|
connect_notebook_tabs(&gui_data);
|
|
|
|
connect_selection_of_directories(&gui_data);
|
2023-02-19 22:21:14 +13:00
|
|
|
connect_popover_select(&gui_data);
|
|
|
|
connect_popover_sort(&gui_data);
|
2022-04-17 04:31:01 +12:00
|
|
|
connect_compute_results(&gui_data, glib_stop_receiver);
|
2023-05-11 07:27:41 +12:00
|
|
|
connect_progress_window(&gui_data, progress_receiver);
|
2022-04-17 04:31:01 +12:00
|
|
|
connect_show_hide_ui(&gui_data);
|
|
|
|
connect_settings(&gui_data);
|
|
|
|
connect_button_about(&gui_data);
|
|
|
|
connect_about_buttons(&gui_data);
|
|
|
|
connect_similar_image_size_change(&gui_data);
|
2023-05-08 06:54:05 +12:00
|
|
|
connect_same_music_change_mode(&gui_data);
|
2020-12-02 22:25:27 +13:00
|
|
|
|
2022-04-17 04:31:01 +12:00
|
|
|
let window_main = gui_data.window_main.clone();
|
|
|
|
let taskbar_state = gui_data.taskbar_state.clone();
|
|
|
|
let used_additional_arguments = arguments.len() > 1;
|
2022-05-22 20:59:09 +12:00
|
|
|
window_main.connect_close_request(move |_| {
|
2022-04-17 04:31:01 +12:00
|
|
|
// Not save configuration when using non default arguments
|
|
|
|
if !used_additional_arguments {
|
|
|
|
save_configuration(false, &gui_data.upper_notebook, &gui_data.main_notebook, &gui_data.settings, &gui_data.text_view_errors);
|
|
|
|
// Save configuration at exit
|
|
|
|
}
|
|
|
|
taskbar_state.borrow_mut().release();
|
2023-10-05 19:06:47 +13:00
|
|
|
glib::Propagation::Proceed
|
2021-11-28 04:44:30 +13:00
|
|
|
});
|
2020-09-26 06:29:09 +12:00
|
|
|
}
|