Console text
This commit is contained in:
parent
ea29b65c11
commit
812164bce9
|
@ -1,4 +1,5 @@
|
||||||
use crate::settings::{collect_settings, SettingsCustom};
|
use crate::settings::{collect_settings, SettingsCustom};
|
||||||
|
use crate::Settings;
|
||||||
use crate::{CurrentTab, MainListModel, MainWindow, ProgressToSend};
|
use crate::{CurrentTab, MainListModel, MainWindow, ProgressToSend};
|
||||||
use chrono::NaiveDateTime;
|
use chrono::NaiveDateTime;
|
||||||
use crossbeam_channel::{Receiver, Sender};
|
use crossbeam_channel::{Receiver, Sender};
|
||||||
|
@ -49,6 +50,7 @@ fn scan_empty_files(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>,
|
||||||
finder.find_empty_files(Some(&stop_receiver), Some(&progress_sender));
|
finder.find_empty_files(Some(&stop_receiver), Some(&progress_sender));
|
||||||
|
|
||||||
let mut vector = finder.get_empty_files().clone();
|
let mut vector = finder.get_empty_files().clone();
|
||||||
|
let messages = finder.get_text_messages().create_messages_text();
|
||||||
|
|
||||||
vector.sort_unstable_by_key(|e| {
|
vector.sort_unstable_by_key(|e| {
|
||||||
let t = split_path(e.get_path());
|
let t = split_path(e.get_path());
|
||||||
|
@ -56,6 +58,7 @@ fn scan_empty_files(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>,
|
||||||
});
|
});
|
||||||
|
|
||||||
a.upgrade_in_event_loop(move |app| {
|
a.upgrade_in_event_loop(move |app| {
|
||||||
|
let number_of_empty_files = vector.len();
|
||||||
let items = Rc::new(VecModel::default());
|
let items = Rc::new(VecModel::default());
|
||||||
for fe in vector {
|
for fe in vector {
|
||||||
let (directory, file) = split_path(fe.get_path());
|
let (directory, file) = split_path(fe.get_path());
|
||||||
|
@ -74,7 +77,8 @@ fn scan_empty_files(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>,
|
||||||
items.push(main);
|
items.push(main);
|
||||||
}
|
}
|
||||||
app.set_empty_files_model(items.into());
|
app.set_empty_files_model(items.into());
|
||||||
app.invoke_scan_ended();
|
app.invoke_scan_ended(format!("Found {} empty files", number_of_empty_files).into());
|
||||||
|
app.global::<Settings>().set_info_text(messages.into());
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -87,6 +91,7 @@ fn scan_empty_folders(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>
|
||||||
finder.find_empty_folders(Some(&stop_receiver), Some(&progress_sender));
|
finder.find_empty_folders(Some(&stop_receiver), Some(&progress_sender));
|
||||||
|
|
||||||
let mut vector = finder.get_empty_folder_list().keys().cloned().collect::<Vec<PathBuf>>();
|
let mut vector = finder.get_empty_folder_list().keys().cloned().collect::<Vec<PathBuf>>();
|
||||||
|
let messages = finder.get_text_messages().create_messages_text();
|
||||||
|
|
||||||
vector.sort_unstable_by_key(|e| {
|
vector.sort_unstable_by_key(|e| {
|
||||||
let t = split_path(e.as_path());
|
let t = split_path(e.as_path());
|
||||||
|
@ -113,7 +118,8 @@ fn scan_empty_folders(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>
|
||||||
items.push(main);
|
items.push(main);
|
||||||
}
|
}
|
||||||
app.set_empty_folder_model(items.into());
|
app.set_empty_folder_model(items.into());
|
||||||
app.invoke_scan_ended();
|
app.invoke_scan_ended(format!("Found {} empty folders", folder_map.len()).into());
|
||||||
|
app.global::<Settings>().set_info_text(messages.into());
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,16 +5,19 @@ use std::path::PathBuf;
|
||||||
use crate::common::create_string_standard_list_view_from_pathbuf;
|
use crate::common::create_string_standard_list_view_from_pathbuf;
|
||||||
use crate::Settings;
|
use crate::Settings;
|
||||||
use home::home_dir;
|
use home::home_dir;
|
||||||
use slint::{ComponentHandle, Model, SharedString};
|
use slint::{ComponentHandle, Model};
|
||||||
|
|
||||||
#[cfg(target_family = "unix")]
|
#[cfg(target_family = "unix")]
|
||||||
const DEFAULT_EXCLUDED_DIRECTORIES: &[&str] = &["/proc", "/dev", "/sys", "/run", "/snap"];
|
const DEFAULT_EXCLUDED_DIRECTORIES: &[&str] = &["/proc", "/dev", "/sys", "/run", "/snap"];
|
||||||
#[cfg(not(target_family = "unix"))]
|
#[cfg(not(target_family = "unix"))]
|
||||||
const DEFAULT_EXCLUDED_DIRECTORIES: &[&str] = &["C:\\Windows"];
|
const DEFAULT_EXCLUDED_DIRECTORIES: &[&str] = &["C:\\Windows"];
|
||||||
|
|
||||||
pub fn reset_settings(app: &MainWindow) {
|
pub struct SettingsCustom {
|
||||||
app.invoke_set_console_text(SharedString::from(""));
|
pub included_directories: Vec<PathBuf>,
|
||||||
|
pub excluded_directories: Vec<PathBuf>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn reset_settings(app: &MainWindow) {
|
||||||
set_settings_to_gui(app, &SettingsCustom::default());
|
set_settings_to_gui(app, &SettingsCustom::default());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,11 +31,9 @@ pub fn set_settings_to_gui(app: &MainWindow, custom_settings: &SettingsCustom) {
|
||||||
// Excluded directories
|
// Excluded directories
|
||||||
let excluded_items = create_string_standard_list_view_from_pathbuf(&custom_settings.excluded_directories);
|
let excluded_items = create_string_standard_list_view_from_pathbuf(&custom_settings.excluded_directories);
|
||||||
settings.set_excluded_directories(excluded_items);
|
settings.set_excluded_directories(excluded_items);
|
||||||
}
|
|
||||||
|
|
||||||
pub struct SettingsCustom {
|
// Clear text
|
||||||
pub included_directories: Vec<PathBuf>,
|
app.global::<Settings>().set_info_text("".into());
|
||||||
pub excluded_directories: Vec<PathBuf>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for SettingsCustom {
|
impl Default for SettingsCustom {
|
||||||
|
|
|
@ -87,7 +87,7 @@ export component ActionButtons inherits HorizontalLayout {
|
||||||
height: parent.height;
|
height: parent.height;
|
||||||
button-visibility: BottomPanelVisibility.NotVisible;
|
button-visibility: BottomPanelVisibility.NotVisible;
|
||||||
bottom_panel_visibility <=> bottom_panel_visibility;
|
bottom_panel_visibility <=> bottom_panel_visibility;
|
||||||
text: "NotVS";
|
text: "None";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -84,21 +84,19 @@ component DirectoriesPanel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO this should be a normal read only Text editor
|
|
||||||
component TextErrorsPanel inherits TextEdit {
|
component TextErrorsPanel inherits TextEdit {
|
||||||
height: 20px;
|
height: 20px;
|
||||||
read-only: true;
|
read-only: true;
|
||||||
text: "Something\nShould be\nASFASF\nasgasg\nASfgasga\nasfgAGAWGW\nAfgAWFGAWG\nfawfafgweg\nAFGWGTwgwg\nGawgAWFWAF\nawfawgaw\nasfa \nasfawgw\nawfawg\nRRRRRR";
|
text <=> Settings.info_text;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export component BottomPanel {
|
export component BottomPanel {
|
||||||
in-out property <BottomPanelVisibility> bottom_panel_visibility: BottomPanelVisibility.Directories;
|
in-out property <BottomPanelVisibility> bottom_panel_visibility: BottomPanelVisibility.Directories;
|
||||||
in-out property <string> console_text;
|
|
||||||
|
|
||||||
callback folder-choose-requested(bool);
|
callback folder-choose-requested(bool);
|
||||||
callback show_manual_add_dialog(bool);
|
callback show_manual_add_dialog(bool);
|
||||||
callback set_console_text(string);
|
|
||||||
|
|
||||||
min-height: bottom-panel-visibility == BottomPanelVisibility.NotVisible ? 0px : 150px;
|
min-height: bottom-panel-visibility == BottomPanelVisibility.NotVisible ? 0px : 150px;
|
||||||
min-width: bottom-panel-visibility == BottomPanelVisibility.NotVisible ? 0px : 400px;
|
min-width: bottom-panel-visibility == BottomPanelVisibility.NotVisible ? 0px : 400px;
|
||||||
|
@ -111,13 +109,7 @@ export component BottomPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
if bottom-panel-visibility == BottomPanelVisibility.TextErrors : TextErrorsPanel {
|
if bottom-panel-visibility == BottomPanelVisibility.TextErrors : TextErrorsPanel {
|
||||||
text: console_text;
|
|
||||||
|
|
||||||
width: parent.width;
|
width: parent.width;
|
||||||
height: parent.height;
|
height: parent.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
set_console_text(text) => {
|
|
||||||
console_text = text;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,9 @@ export global ColorPalette {
|
||||||
in-out property<color> tab_hovered_color: StyleMetrics.dark-color-scheme ? #49494926 : #80808014;
|
in-out property<color> tab_hovered_color: StyleMetrics.dark-color-scheme ? #49494926 : #80808014;
|
||||||
|
|
||||||
// ListView
|
// ListView
|
||||||
in-out property<color> list_view_normal_color: StyleMetrics.dark-color-scheme ? #474747 : #dddddd;
|
in-out property<color> list_view_normal_color: StyleMetrics.dark-color-scheme ? #222222 : #dddddd;
|
||||||
in-out property<color> list_view_normal_header_color: StyleMetrics.dark-color-scheme ? #292929 : #888888;
|
in-out property<color> list_view_normal_header_color: StyleMetrics.dark-color-scheme ? #111111 : #888888;
|
||||||
in-out property<color> list_view_normal_selected_header: StyleMetrics.dark-color-scheme ? #575757 : #cccccc;
|
in-out property<color> list_view_normal_selected_header: StyleMetrics.dark-color-scheme ? #444444 : #cccccc;
|
||||||
|
|
||||||
// Popup
|
// Popup
|
||||||
in-out property<color> popup_background: StyleMetrics.dark-color-scheme ? #353535 : #5e5e5e;
|
in-out property<color> popup_background: StyleMetrics.dark-color-scheme ? #353535 : #5e5e5e;
|
||||||
|
|
|
@ -28,9 +28,9 @@ export component MainList {
|
||||||
if root.active-tab == CurrentTab.EmptyFiles: SelectableTableView {
|
if root.active-tab == CurrentTab.EmptyFiles: SelectableTableView {
|
||||||
min-width: 200px;
|
min-width: 200px;
|
||||||
|
|
||||||
columns: ["Selection", "Folder Name", "Path"];
|
columns: ["Selection", "File Name", "Path"];
|
||||||
last-column: "Modification Date";
|
last-column: "Modification Date";
|
||||||
column-sizes: [30px, 100px, 100px, 100px];
|
column-sizes: [35px, 100px, 350px, 100px];
|
||||||
values <=> empty-files-model;
|
values <=> empty-files-model;
|
||||||
parentPathIdx: 2;
|
parentPathIdx: 2;
|
||||||
fileNameIdx: 1;
|
fileNameIdx: 1;
|
||||||
|
@ -40,9 +40,9 @@ export component MainList {
|
||||||
if root.active-tab == CurrentTab.SimilarImages: SelectableTableView {
|
if root.active-tab == CurrentTab.SimilarImages: SelectableTableView {
|
||||||
min-width: 200px;
|
min-width: 200px;
|
||||||
|
|
||||||
columns: ["Selection", "Folder Name", "Path"];
|
columns: ["Selection", "File Name", "Path"];
|
||||||
last-column: "Modification Date";
|
last-column: "Modification Date";
|
||||||
column-sizes: [30px, 100px, 100px, 100px];
|
column-sizes: [35px, 100px, 350px, 100px];
|
||||||
values <=> similar-images-model;
|
values <=> similar-images-model;
|
||||||
parentPathIdx: 2;
|
parentPathIdx: 2;
|
||||||
fileNameIdx: 1;
|
fileNameIdx: 1;
|
||||||
|
|
|
@ -19,9 +19,8 @@ export component MainWindow inherits Window {
|
||||||
callback scan_starting(CurrentTab);
|
callback scan_starting(CurrentTab);
|
||||||
callback item_opened(string);
|
callback item_opened(string);
|
||||||
callback folder-choose-requested(bool);
|
callback folder-choose-requested(bool);
|
||||||
callback set_console_text(string);
|
|
||||||
|
|
||||||
callback scan_ended();
|
callback scan_ended(string);
|
||||||
|
|
||||||
min-width: 300px;
|
min-width: 300px;
|
||||||
preferred-width: 800px;
|
preferred-width: 800px;
|
||||||
|
@ -41,29 +40,6 @@ export component MainWindow inherits Window {
|
||||||
{checked: false, selected_row: false, header_row: true, val: ["kropkarz", "/Xd1", "24.10.2023"]} ,
|
{checked: false, selected_row: false, header_row: true, val: ["kropkarz", "/Xd1", "24.10.2023"]} ,
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
|
|
||||||
{checked: true, selected_row: false, header_row: false, val: ["lokkaler", "/Xd1/Vide2", "01.23.1911"]}
|
{checked: true, selected_row: false, header_row: false, val: ["lokkaler", "/Xd1/Vide2", "01.23.1911"]}
|
||||||
];
|
];
|
||||||
in-out property <[MainListModel]> empty_files_model: [];
|
in-out property <[MainListModel]> empty_files_model: [];
|
||||||
|
@ -146,10 +122,8 @@ export component MainWindow inherits Window {
|
||||||
width: popup_item.width - 20px;
|
width: popup_item.width - 20px;
|
||||||
height: popup_item.height - 20px;
|
height: popup_item.height - 20px;
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
background: ColorPalette.popup_background; // TODO Dark theme
|
background: ColorPalette.popup_background;
|
||||||
VerticalLayout {
|
VerticalLayout {
|
||||||
// width: parent.width - 20px;
|
|
||||||
// height: parent.height - 20px;
|
|
||||||
Text {
|
Text {
|
||||||
text: "Please add directories one per line";
|
text: "Please add directories one per line";
|
||||||
horizontal-alignment: TextHorizontalAlignment.center;
|
horizontal-alignment: TextHorizontalAlignment.center;
|
||||||
|
@ -182,12 +156,8 @@ export component MainWindow inherits Window {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
set_console_text(text) => {
|
scan_ended(scan_text) => {
|
||||||
bottom-panel.set_console_text(text);
|
text-summary.text = scan_text;
|
||||||
}
|
|
||||||
|
|
||||||
scan_ended() => {
|
|
||||||
text-summary.text = ""; // TODO this should be filled with results
|
|
||||||
root.scanning = false;
|
root.scanning = false;
|
||||||
root.stop_requested = false;
|
root.stop_requested = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
export global Settings {
|
export global Settings {
|
||||||
in-out property<bool> checkbox_checked: false;
|
|
||||||
|
|
||||||
in-out property <[StandardListViewItem]> included_directories: [{text: "ABCD"}, {text: "BCDA"}];
|
in-out property <[StandardListViewItem]> included_directories: [{text: "ABCD"}, {text: "BCDA"}];
|
||||||
in-out property <[StandardListViewItem]> excluded_directories: [{text: "ABCD"}, {text: "BCDA"}, {text: "CDFFF"}];
|
in-out property <[StandardListViewItem]> excluded_directories: [{text: "ABCD"}, {text: "BCDA"}, {text: "CDFFF"}];
|
||||||
|
|
||||||
|
in-out property <string> info_text: "Nothing to report";
|
||||||
}
|
}
|
Loading…
Reference in a new issue