diff --git a/.gitignore b/.gitignore index aeea677..257863a 100644 --- a/.gitignore +++ b/.gitignore @@ -20,4 +20,5 @@ krokiet/target *.json *.mm_profdata perf.data -perf.data.old \ No newline at end of file +perf.data.old +krokiet/ui/test.slint diff --git a/Cargo.lock b/Cargo.lock index 5f03301..55e3de7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -944,7 +944,7 @@ dependencies = [ [[package]] name = "const-field-offset" version = "0.1.3" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "const-field-offset-macro", "field-offset", @@ -953,7 +953,7 @@ dependencies = [ [[package]] name = "const-field-offset-macro" version = "0.1.3" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "proc-macro2", "quote", @@ -1747,9 +1747,9 @@ dependencies = [ [[package]] name = "femtovg" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19df4b4c86231086212f22513ccfdbce94a1e1270d1cb09c030bd39fd73f3ee4" +checksum = "18ab822e58e8bc2b89840dc5dde49afe39302e129c60d39c8520200c085404a7" dependencies = [ "bitflags 2.4.2", "fnv", @@ -1757,6 +1757,7 @@ dependencies = [ "glow", "image", "imgref", + "log", "lru", "rgb", "rustybuzz 0.11.0", @@ -2660,7 +2661,7 @@ dependencies = [ [[package]] name = "i-slint-backend-linuxkms" version = "1.4.0" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "calloop", "drm 0.9.0", @@ -2680,7 +2681,7 @@ dependencies = [ [[package]] name = "i-slint-backend-selector" version = "1.4.0" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "cfg-if", "i-slint-backend-linuxkms", @@ -2693,7 +2694,7 @@ dependencies = [ [[package]] name = "i-slint-backend-winit" version = "1.4.0" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "bytemuck", "cfg-if", @@ -2727,7 +2728,7 @@ dependencies = [ [[package]] name = "i-slint-common" version = "1.4.0" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "cfg-if", "derive_more", @@ -2738,7 +2739,7 @@ dependencies = [ [[package]] name = "i-slint-compiler" version = "1.4.0" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "by_address", "codemap", @@ -2767,7 +2768,7 @@ dependencies = [ [[package]] name = "i-slint-core" version = "1.4.0" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "auto_enums", "bytemuck", @@ -2810,7 +2811,7 @@ dependencies = [ [[package]] name = "i-slint-core-macros" version = "1.4.0" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "quote", "syn 2.0.48", @@ -2819,7 +2820,7 @@ dependencies = [ [[package]] name = "i-slint-renderer-femtovg" version = "1.4.0" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "cfg-if", "const-field-offset", @@ -2851,7 +2852,7 @@ dependencies = [ [[package]] name = "i-slint-renderer-skia" version = "1.4.0" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "ash", "bytemuck", @@ -2880,7 +2881,8 @@ dependencies = [ "unicode-segmentation", "vtable", "vulkano", - "windows 0.52.0", + "winapi", + "wio", ] [[package]] @@ -3062,9 +3064,9 @@ checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" [[package]] name = "imgref" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90d944e334f00f4449c9640b440a171f816be0152305c12ef90424fc35fd035c" +checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" [[package]] name = "indexmap" @@ -4407,9 +4409,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.76" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] @@ -4558,13 +4560,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.2" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.3", + "regex-automata 0.4.4", "regex-syntax 0.8.2", ] @@ -4579,9 +4581,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "3b7fa1134405e2ec9353fd416b17f8dacd46c473d7d3fd1cf202706a14eb792a" dependencies = [ "aho-corasick", "memchr", @@ -4646,6 +4648,20 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "ring" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +dependencies = [ + "cc", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.48.0", +] + [[package]] name = "rle-decode-fast" version = "1.0.3" @@ -4815,6 +4831,28 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustls" +version = "0.21.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.14" @@ -4896,6 +4934,16 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "sctk-adwaita" version = "0.8.1" @@ -5062,9 +5110,9 @@ checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "skia-bindings" -version = "0.70.0" +version = "0.69.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bc61a106126a429bb4775ce5fbe23b2bcaa74d1a9c484997f4700de31480b44" +checksum = "8b4b5af96ee7d895763fa606f4531fddfb11de034217edd0c7beb9ea181efe5b" dependencies = [ "bindgen", "cc", @@ -5075,18 +5123,20 @@ dependencies = [ "serde_json", "tar", "toml 0.8.8", + "ureq", ] [[package]] name = "skia-safe" -version = "0.70.0" +version = "0.69.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3201eba92bca1f83864f5c3a48309bcfee7e0590bebd7826e7ab0a49aa24a750" +checksum = "4a3d25acaedea0a8ed1dac52f383fc90276f5679a68e3f84c5fb7f7bde8934ff" dependencies = [ "bitflags 2.4.2", "lazy_static", "skia-bindings", - "windows 0.52.0", + "winapi", + "wio", ] [[package]] @@ -5101,7 +5151,7 @@ dependencies = [ [[package]] name = "slint" version = "1.4.0" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "const-field-offset", "i-slint-backend-selector", @@ -5117,7 +5167,7 @@ dependencies = [ [[package]] name = "slint-build" version = "1.4.0" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "i-slint-compiler", "spin_on", @@ -5128,7 +5178,7 @@ dependencies = [ [[package]] name = "slint-macros" version = "1.4.0" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "i-slint-compiler", "proc-macro2", @@ -6115,6 +6165,28 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97" +dependencies = [ + "base64", + "flate2", + "log", + "once_cell", + "rustls", + "rustls-webpki", + "url", + "webpki-roots", +] + [[package]] name = "url" version = "2.5.0" @@ -6253,7 +6325,7 @@ dependencies = [ [[package]] name = "vtable" version = "0.1.11" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "const-field-offset", "portable-atomic", @@ -6264,7 +6336,7 @@ dependencies = [ [[package]] name = "vtable-macro" version = "0.1.10" -source = "git+https://github.com/slint-ui/slint.git#f809b3ff41b643b6896e2af493160d8f7f2880f3" +source = "git+https://github.com/slint-ui/slint.git#43d1f62fb113e432ebfa7e9fb8a033ae1788e566" dependencies = [ "proc-macro2", "quote", @@ -6527,6 +6599,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-roots" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" + [[package]] name = "weezl" version = "0.1.7" @@ -6603,16 +6681,6 @@ dependencies = [ "windows-targets 0.48.5", ] -[[package]] -name = "windows" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" -dependencies = [ - "windows-core", - "windows-targets 0.52.0", -] - [[package]] name = "windows-core" version = "0.52.0" diff --git a/krokiet/src/connect_scan.rs b/krokiet/src/connect_scan.rs index 95016bc..53b8da2 100644 --- a/krokiet/src/connect_scan.rs +++ b/krokiet/src/connect_scan.rs @@ -207,6 +207,7 @@ where component.set_minimal_file_size(custom_settings.minimum_file_size as u64 * 1024); component.set_maximal_file_size(custom_settings.maximum_file_size as u64 * 1024); component.set_allowed_extensions(custom_settings.allowed_extensions.clone()); + component.set_excluded_extensions(custom_settings.excluded_extensions.clone()); component.set_excluded_items(custom_settings.excluded_items.split(',').map(str::to_string).collect()); component.set_exclude_other_filesystems(custom_settings.ignore_other_file_systems); component.set_use_cache(custom_settings.use_cache); diff --git a/krokiet/src/settings.rs b/krokiet/src/settings.rs index 81afbd8..87be6ad 100644 --- a/krokiet/src/settings.rs +++ b/krokiet/src/settings.rs @@ -50,6 +50,8 @@ pub struct SettingsCustom { pub excluded_items: String, #[serde(default)] pub allowed_extensions: String, + #[serde(default)] + pub excluded_extensions: String, #[serde(default = "minimum_file_size")] pub minimum_file_size: i32, #[serde(default = "maximum_file_size")] @@ -357,6 +359,7 @@ pub fn set_settings_to_gui(app: &MainWindow, custom_settings: &SettingsCustom) { settings.set_excluded_items(custom_settings.excluded_items.clone().into()); settings.set_allowed_extensions(custom_settings.allowed_extensions.clone().into()); + settings.set_excluded_extensions(custom_settings.excluded_extensions.clone().into()); settings.set_minimum_file_size(custom_settings.minimum_file_size.to_string().into()); settings.set_maximum_file_size(custom_settings.maximum_file_size.to_string().into()); settings.set_use_cache(custom_settings.use_cache); @@ -438,6 +441,7 @@ pub fn collect_settings(app: &MainWindow) -> SettingsCustom { let excluded_items = settings.get_excluded_items().to_string(); let allowed_extensions = settings.get_allowed_extensions().to_string(); + let excluded_extensions = settings.get_excluded_extensions().to_string(); let minimum_file_size = settings.get_minimum_file_size().parse::().unwrap_or(DEFAULT_MINIMUM_SIZE_KB); let maximum_file_size = settings.get_maximum_file_size().parse::().unwrap_or(DEFAULT_MAXIMUM_SIZE_KB); @@ -481,6 +485,7 @@ pub fn collect_settings(app: &MainWindow) -> SettingsCustom { excluded_directories, excluded_items, allowed_extensions, + excluded_extensions, minimum_file_size, maximum_file_size, recursive_search, diff --git a/krokiet/ui/common.slint b/krokiet/ui/common.slint index f9fa58d..acea767 100644 --- a/krokiet/ui/common.slint +++ b/krokiet/ui/common.slint @@ -27,4 +27,15 @@ export enum BottomPanelVisibility { NotVisible, TextErrors, Directories +} + +export struct IncludedDirectoriesModel { + path: string, + referenced_folder: bool, + selected_row: bool, +} + +export struct ExcludedDirectoriesModel { + path: string, + selected_row: bool, } \ No newline at end of file diff --git a/krokiet/ui/included_directories.slint b/krokiet/ui/included_directories.slint index d021879..669bcb2 100644 --- a/krokiet/ui/included_directories.slint +++ b/krokiet/ui/included_directories.slint @@ -1,14 +1,11 @@ import {Button, StandardListView, VerticalBox, ListView, ScrollView, TextEdit, CheckBox} from "std-widgets.slint"; import {Callabler} from "callabler.slint"; - -export struct IncludedDirectoriesModel { - path: string, - referended_folder: bool, -} +import {IncludedDirectoriesModel, ExcludedDirectoriesModel} from "common.slint"; +import {ColorPalette} from "color_palette.slint"; export component InlcudedDirectories { - in-out property <[IncludedDirectoriesModel]> model: [{path: "/home/path", referended_folder: false}]; + in-out property <[IncludedDirectoriesModel]> model: [{path: "/home/path", referenced_folder: false, selected_row: false}]; in-out property current_index: -1; in-out property size_referenced_folder: 40px; @@ -36,7 +33,7 @@ export component InlcudedDirectories { width: parent.width; CheckBox { - checked: data.referended_folder; + checked: data.referenced_folder; width: size_referenced_folder; } Text { @@ -50,8 +47,8 @@ export component InlcudedDirectories { } } -export component ExcludeDirectories { - in-out property <[string]> model: ["/home/path"]; +export component ExcludedDirectories { + in-out property <[ExcludedDirectoriesModel]> model: [{path:"/home/path", selected_row: false}, {path:"/home/path", selected_row: false}, ]; in-out property current_index: -1; private property event; @@ -64,21 +61,27 @@ export component ExcludeDirectories { } } ListView { - for data[idx] in model : Rectangle { + for r[idx] in model : Rectangle { height: 30px; border_radius: 5px; width: parent.width; + background: touch-area.has-hover ? (r.selected_row ? ColorPalette.list-view-normal-selected-header : ColorPalette.list_view_normal_color) : (r.selected_row ? ColorPalette.list-view-normal-selected-header : ColorPalette.list_view_normal_color); + touch_area := TouchArea { clicked => { if (current_index == -1) { - + r.selected_row = true; + } else { + if (current_index != idx) { + model[current_index].selected_row = false; + } + r.selected_row = true; } + current_index = idx; } double-clicked => { - if (event.button == PointerEventButton.middle && event.kind == PointerEventKind.up) { - Callabler.item_opened(data) - } + Callabler.item_opened(r.path); } pointer-event(event) => { root.event = event; @@ -91,7 +94,7 @@ export component ExcludeDirectories { Text { horizontal-stretch: 1.0; - text: data; + text: r.path; vertical-alignment: center; } } diff --git a/krokiet/ui/settings.slint b/krokiet/ui/settings.slint index 9a646f5..dcdbb7e 100644 --- a/krokiet/ui/settings.slint +++ b/krokiet/ui/settings.slint @@ -8,6 +8,7 @@ export global Settings { // Settings in-out property excluded_items: "Excluded items"; in-out property allowed_extensions: "Allowed extensions"; + in-out property excluded_extensions: "Excluded extensions"; in-out property minimum_file_size: 0; in-out property maximum_file_size: 0; in-out property recursive_search: true; diff --git a/krokiet/ui/settings_list.slint b/krokiet/ui/settings_list.slint index c85c17b..d0352cc 100644 --- a/krokiet/ui/settings_list.slint +++ b/krokiet/ui/settings_list.slint @@ -69,7 +69,7 @@ component MinMaxSizeComponent inherits HorizontalLayout { spacing: 20px; Text { horizontal-stretch: 0.0; - text:"Items Size(Bytes)"; + text:"File Size(Kilobytes)"; vertical-alignment: TextVerticalAlignment.center; } HorizontalLayout { @@ -205,6 +205,10 @@ export component SettingsList inherits VerticalLayout { name: "Allowed extensions:"; model <=> Settings.allowed_extensions; } + TextComponent { + name: "Excluded extensions:"; + model <=> Settings.excluded_extensions; + } MinMaxSizeComponent { } @@ -263,7 +267,7 @@ export component SettingsList inherits VerticalLayout { model <=> Settings.duplicate_minimal_prehash_cache_size; } CheckBoxComponent { - name: "Delete outdated entries"; + name: "Delete automatically outdated entries"; model <=> Settings.duplicate_delete_outdated_entries; } HeaderText { @@ -274,21 +278,21 @@ export component SettingsList inherits VerticalLayout { model <=> Settings.similar_images_show_image_preview; } CheckBoxComponent { - name: "Delete outdated entries"; + name: "Delete automatically outdated entries"; model <=> Settings.similar_images_delete_outdated_entries; } HeaderText { text: "Similar Videos tool"; } CheckBoxComponent { - name: "Delete outdated entries"; + name: "Delete automatically outdated entries"; model <=> Settings.similar_videos_delete_outdated_entries; } HeaderText { text: "Similar Music tool"; } CheckBoxComponent { - name: "Delete outdated entries"; + name: "Delete automatically outdated entries"; model <=> Settings.similar_music_delete_outdated_entries; } ConfigCacheButtons {