Add dialog for move conflict, part of #180

This commit is contained in:
Jeremy Soller 2024-07-08 11:51:07 -06:00
parent f075d07bfd
commit 35fcb011c5
No known key found for this signature in database
GPG key ID: D02FD439211AF56F
6 changed files with 305 additions and 147 deletions

281
Cargo.lock generated
View file

@ -4,9 +4,9 @@ version = 3
[[package]]
name = "ab_glyph"
version = "0.2.27"
version = "0.2.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c3a1cbc201cc13ed06cf875efb781f2249b3677f5c74571b67d817877f9d697"
checksum = "79faae4620f45232f599d9bc7b290f88247a0834162c4495ab2f02d60004adfb"
dependencies = [
"ab_glyph_rasterizer",
"owned_ttf_parser",
@ -502,7 +502,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -531,13 +531,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
[[package]]
name = "async-trait"
version = "0.1.80"
version = "0.1.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca"
checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -772,7 +772,7 @@ checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -851,9 +851,9 @@ dependencies = [
[[package]]
name = "cc"
version = "1.0.104"
version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74b6a57f98764a267ff415d50a25e6e166f3831a5071af4995296ea97d210490"
checksum = "066fce287b1d4eafef758e89e09d724a24808a9196fe9756b8ca90e86d0719a2"
dependencies = [
"jobserver",
"libc",
@ -906,14 +906,14 @@ dependencies = [
"num-traits",
"pure-rust-locales",
"wasm-bindgen",
"windows-targets 0.52.5",
"windows-targets 0.52.6",
]
[[package]]
name = "clipboard-win"
version = "5.3.1"
version = "5.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad"
checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892"
dependencies = [
"error-code",
]
@ -1132,7 +1132,7 @@ dependencies = [
[[package]]
name = "cosmic-config"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"atomicwrites",
"cosmic-config-derive",
@ -1151,7 +1151,7 @@ dependencies = [
[[package]]
name = "cosmic-config-derive"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"quote",
"syn 1.0.109",
@ -1209,8 +1209,8 @@ dependencies = [
"bitflags 2.6.0",
"wayland-backend",
"wayland-client",
"wayland-protocols 0.32.1",
"wayland-protocols-wlr 0.3.1",
"wayland-protocols 0.32.2",
"wayland-protocols-wlr 0.3.2",
"wayland-scanner",
"wayland-server",
]
@ -1240,7 +1240,7 @@ dependencies = [
[[package]]
name = "cosmic-theme"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"almost",
"cosmic-config",
@ -1381,7 +1381,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim 0.11.1",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -1392,7 +1392,7 @@ checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178"
dependencies = [
"darling_core",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -1443,7 +1443,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -1532,7 +1532,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -1651,7 +1651,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -1977,7 +1977,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -2053,8 +2053,7 @@ dependencies = [
[[package]]
name = "fs_extra"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
source = "git+https://github.com/pop-os/fs_extra.git#209d2e349842a10366c8c9c3ece72482129d372e"
[[package]]
name = "fsevent-sys"
@ -2150,7 +2149,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -2340,7 +2339,7 @@ dependencies = [
"proc-macro-crate 3.1.0",
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -2613,7 +2612,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim 0.10.0",
"syn 2.0.68",
"syn 2.0.69",
"unic-langid",
]
@ -2627,7 +2626,7 @@ dependencies = [
"i18n-config",
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -2656,7 +2655,7 @@ dependencies = [
[[package]]
name = "iced"
version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"dnd",
"iced_accessibility",
@ -2675,7 +2674,7 @@ dependencies = [
[[package]]
name = "iced_accessibility"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"accesskit",
"accesskit_unix",
@ -2685,7 +2684,7 @@ dependencies = [
[[package]]
name = "iced_core"
version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"bitflags 2.6.0",
"dnd",
@ -2707,7 +2706,7 @@ dependencies = [
[[package]]
name = "iced_futures"
version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"futures",
"iced_core",
@ -2720,7 +2719,7 @@ dependencies = [
[[package]]
name = "iced_graphics"
version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"bitflags 2.6.0",
"bytemuck",
@ -2744,7 +2743,7 @@ dependencies = [
[[package]]
name = "iced_renderer"
version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"iced_graphics",
"iced_tiny_skia",
@ -2756,7 +2755,7 @@ dependencies = [
[[package]]
name = "iced_runtime"
version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"dnd",
"iced_accessibility",
@ -2770,7 +2769,7 @@ dependencies = [
[[package]]
name = "iced_sctk"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"enum-repr",
"float-cmp",
@ -2787,7 +2786,7 @@ dependencies = [
"thiserror",
"tracing",
"wayland-backend",
"wayland-protocols 0.32.1",
"wayland-protocols 0.32.2",
"window_clipboard",
"xkbcommon",
"xkbcommon-dl",
@ -2797,7 +2796,7 @@ dependencies = [
[[package]]
name = "iced_style"
version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"iced_core",
"once_cell",
@ -2807,7 +2806,7 @@ dependencies = [
[[package]]
name = "iced_tiny_skia"
version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"bytemuck",
"cosmic-text",
@ -2824,7 +2823,7 @@ dependencies = [
[[package]]
name = "iced_wgpu"
version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"bitflags 2.6.0",
"bytemuck",
@ -2842,7 +2841,7 @@ dependencies = [
"smithay-client-toolkit 0.19.1",
"wayland-backend",
"wayland-client",
"wayland-protocols 0.32.1",
"wayland-protocols 0.32.2",
"wayland-sys",
"wgpu",
]
@ -2850,7 +2849,7 @@ dependencies = [
[[package]]
name = "iced_widget"
version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"dnd",
"iced_accessibility",
@ -2868,7 +2867,7 @@ dependencies = [
[[package]]
name = "iced_winit"
version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"dnd",
"iced_accessibility",
@ -3252,7 +3251,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -3616,7 +3615,7 @@ checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
[[package]]
name = "libcosmic"
version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic.git#4da66f8cc0407b5c928b560fb36e75ba5bc5b2d9"
source = "git+https://github.com/pop-os/libcosmic.git#48f5966eaf54b6c2102018c151e38eab0e339e7b"
dependencies = [
"apply",
"ashpd",
@ -3676,7 +3675,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d"
dependencies = [
"cfg-if",
"windows-targets 0.52.5",
"windows-targets 0.52.6",
]
[[package]]
@ -4211,7 +4210,7 @@ dependencies = [
"proc-macro-crate 3.1.0",
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -4394,7 +4393,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -4405,11 +4404,11 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
[[package]]
name = "owned_ttf_parser"
version = "0.21.0"
version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b41438d2fc63c46c74a2203bf5ccd82c41ba04347b2fcf5754f230b167067d5"
checksum = "490d3a563d3122bf7c911a59b0add9389e5ec0f5f0c3ac6b91ff235a0e6a7f90"
dependencies = [
"ttf-parser 0.21.1",
"ttf-parser 0.24.0",
]
[[package]]
@ -4434,7 +4433,7 @@ dependencies = [
"by_address",
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -4488,7 +4487,7 @@ dependencies = [
"libc",
"redox_syscall 0.5.2",
"smallvec",
"windows-targets 0.52.5",
"windows-targets 0.52.6",
]
[[package]]
@ -4539,7 +4538,7 @@ dependencies = [
"phf_shared",
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -4729,9 +4728,9 @@ dependencies = [
[[package]]
name = "quick-xml"
version = "0.31.0"
version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33"
checksum = "6f24d770aeca0eacb81ac29dfbc55ebcc09312fdd1f8bbecdc7e4a84e000e3b4"
dependencies = [
"memchr",
]
@ -4977,9 +4976,9 @@ dependencies = [
[[package]]
name = "rgb"
version = "0.8.40"
version = "0.8.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7439be6844e40133eda024efd85bf07f59d0dd2f59b10c00dd6cfb92cc5c741"
checksum = "1aee83dc281d5a3200d37b299acd13b81066ea126a7f16f0eae70fc9aed241d9"
dependencies = [
"bytemuck",
]
@ -5022,7 +5021,7 @@ dependencies = [
"proc-macro2",
"quote",
"rust-embed-utils",
"syn 2.0.68",
"syn 2.0.69",
"walkdir",
]
@ -5181,22 +5180,22 @@ checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a"
[[package]]
name = "serde"
version = "1.0.203"
version = "1.0.204"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094"
checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.203"
version = "1.0.204"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba"
checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -5219,7 +5218,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -5378,8 +5377,8 @@ dependencies = [
"wayland-client",
"wayland-csd-frame",
"wayland-cursor",
"wayland-protocols 0.32.1",
"wayland-protocols-wlr 0.3.1",
"wayland-protocols 0.32.2",
"wayland-protocols-wlr 0.3.2",
"wayland-scanner",
"xkbcommon",
"xkeysym",
@ -5546,9 +5545,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.68"
version = "2.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9"
checksum = "201fcda3845c23e8212cd466bfebf0bd20694490fc0356ae8e428e0824a915a6"
dependencies = [
"proc-macro2",
"quote",
@ -5563,7 +5562,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -5601,9 +5600,9 @@ dependencies = [
[[package]]
name = "target-lexicon"
version = "0.12.14"
version = "0.12.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f"
checksum = "4873307b7c257eddcb50c9bedf158eb669578359fb28428bef438fec8e6ba7c2"
[[package]]
name = "temp-dir"
@ -5651,7 +5650,7 @@ checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -5677,7 +5676,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -5794,9 +5793,9 @@ dependencies = [
[[package]]
name = "tinyvec"
version = "1.6.1"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c55115c6fbe2d2bef26eb09ad74bde02d8255476fc0c7b515ef09fbb35742d82"
checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938"
dependencies = [
"tinyvec_macros",
]
@ -5834,7 +5833,7 @@ checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -5932,7 +5931,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -6002,6 +6001,12 @@ version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8"
[[package]]
name = "ttf-parser"
version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8686b91785aff82828ed725225925b33b4fde44c4bb15876e5f7c832724c420a"
[[package]]
name = "type-map"
version = "0.5.0"
@ -6313,7 +6318,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
"wasm-bindgen-shared",
]
@ -6347,7 +6352,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@ -6375,9 +6380,9 @@ dependencies = [
[[package]]
name = "wayland-backend"
version = "0.3.4"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34e9e6b6d4a2bb4e7e69433e0b35c7923b95d4dc8503a84d25ec917a4bbfdf07"
checksum = "269c04f203640d0da2092d1b8d89a2d081714ae3ac2f1b53e99f205740517198"
dependencies = [
"cc",
"downcast-rs",
@ -6389,9 +6394,9 @@ dependencies = [
[[package]]
name = "wayland-client"
version = "0.31.3"
version = "0.31.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e63801c85358a431f986cffa74ba9599ff571fc5774ac113ed3b490c19a1133"
checksum = "08bd0f46c069d3382a36c8666c1b9ccef32b8b04f41667ca1fef06a1adcc2982"
dependencies = [
"bitflags 2.6.0",
"rustix 0.38.34",
@ -6412,9 +6417,9 @@ dependencies = [
[[package]]
name = "wayland-cursor"
version = "0.31.3"
version = "0.31.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a206e8b2b53b1d3fcb9428fec72bc278ce539e2fa81fe2bfc1ab27703d5187b9"
checksum = "09414bcf0fd8d9577d73e9ac4659ebc45bcc9cff1980a350543ad8e50ee263b2"
dependencies = [
"rustix 0.38.34",
"wayland-client",
@ -6435,9 +6440,9 @@ dependencies = [
[[package]]
name = "wayland-protocols"
version = "0.32.1"
version = "0.32.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83d0f1056570486e26a3773ec633885124d79ae03827de05ba6c85f79904026c"
checksum = "1794d82d869f38439d15c24b26f06f6c8603d27d47b4f786d5197c99044de415"
dependencies = [
"bitflags 2.6.0",
"wayland-backend",
@ -6474,23 +6479,23 @@ dependencies = [
[[package]]
name = "wayland-protocols-wlr"
version = "0.3.1"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7dab47671043d9f5397035975fe1cac639e5bca5cc0b3c32d09f01612e34d24"
checksum = "fa43c961473aed713d44c1f616f775186249dfca657f256d8841ca0690366aba"
dependencies = [
"bitflags 2.6.0",
"wayland-backend",
"wayland-client",
"wayland-protocols 0.32.1",
"wayland-protocols 0.32.2",
"wayland-scanner",
"wayland-server",
]
[[package]]
name = "wayland-scanner"
version = "0.31.2"
version = "0.31.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67da50b9f80159dec0ea4c11c13e24ef9e7574bd6ce24b01860a175010cea565"
checksum = "edf466fc49a4feb65a511ca403fec3601494d0dee85dbf37fff6fa0dd4eec3b6"
dependencies = [
"proc-macro2",
"quick-xml",
@ -6499,9 +6504,9 @@ dependencies = [
[[package]]
name = "wayland-server"
version = "0.31.2"
version = "0.31.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "63e89118bd072ba6ce0f9c2c92fa41f72d1d78a138d2abc497a80a8264565559"
checksum = "a29060303e79e4c3d44936efdcf00941a78c86850bf67a88078dd1d6c99702b9"
dependencies = [
"bitflags 2.6.0",
"downcast-rs",
@ -6513,9 +6518,9 @@ dependencies = [
[[package]]
name = "wayland-sys"
version = "0.31.2"
version = "0.31.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "105b1842da6554f91526c14a2a2172897b7f745a805d62af4ce698706be79c12"
checksum = "4a6754825230fa5b27bafaa28c30b3c9e72c55530581220cef401fa422c0fae7"
dependencies = [
"dlib",
"log",
@ -6721,7 +6726,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
dependencies = [
"windows-core 0.52.0",
"windows-targets 0.52.5",
"windows-targets 0.52.6",
]
[[package]]
@ -6731,7 +6736,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1de69df01bdf1ead2f4ac895dc77c9351aefff65b2f3db429a343f9cbf05e132"
dependencies = [
"windows-core 0.56.0",
"windows-targets 0.52.5",
"windows-targets 0.52.6",
]
[[package]]
@ -6740,7 +6745,7 @@ version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
dependencies = [
"windows-targets 0.52.5",
"windows-targets 0.52.6",
]
[[package]]
@ -6752,7 +6757,7 @@ dependencies = [
"windows-implement 0.56.0",
"windows-interface 0.56.0",
"windows-result",
"windows-targets 0.52.5",
"windows-targets 0.52.6",
]
[[package]]
@ -6774,7 +6779,7 @@ checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -6796,7 +6801,7 @@ checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -6805,7 +6810,7 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8"
dependencies = [
"windows-targets 0.52.5",
"windows-targets 0.52.6",
]
[[package]]
@ -6832,7 +6837,7 @@ version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
"windows-targets 0.52.5",
"windows-targets 0.52.6",
]
[[package]]
@ -6867,18 +6872,18 @@ dependencies = [
[[package]]
name = "windows-targets"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
dependencies = [
"windows_aarch64_gnullvm 0.52.5",
"windows_aarch64_msvc 0.52.5",
"windows_i686_gnu 0.52.5",
"windows_aarch64_gnullvm 0.52.6",
"windows_aarch64_msvc 0.52.6",
"windows_i686_gnu 0.52.6",
"windows_i686_gnullvm",
"windows_i686_msvc 0.52.5",
"windows_x86_64_gnu 0.52.5",
"windows_x86_64_gnullvm 0.52.5",
"windows_x86_64_msvc 0.52.5",
"windows_i686_msvc 0.52.6",
"windows_x86_64_gnu 0.52.6",
"windows_x86_64_gnullvm 0.52.6",
"windows_x86_64_msvc 0.52.6",
]
[[package]]
@ -6895,9 +6900,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
[[package]]
name = "windows_aarch64_msvc"
@ -6913,9 +6918,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
[[package]]
name = "windows_i686_gnu"
@ -6931,15 +6936,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_gnu"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
[[package]]
name = "windows_i686_msvc"
@ -6955,9 +6960,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_i686_msvc"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
[[package]]
name = "windows_x86_64_gnu"
@ -6973,9 +6978,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnullvm"
@ -6991,9 +6996,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
[[package]]
name = "windows_x86_64_msvc"
@ -7009,9 +7014,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "winit"
@ -7237,7 +7242,7 @@ checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
"synstructure",
]
@ -7345,7 +7350,7 @@ dependencies = [
"proc-macro-crate 3.1.0",
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
"zvariant_utils 2.0.0",
]
@ -7394,7 +7399,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -7414,7 +7419,7 @@ checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
"synstructure",
]
@ -7448,7 +7453,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]
[[package]]
@ -7510,7 +7515,7 @@ dependencies = [
"proc-macro-crate 3.1.0",
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
"zvariant_utils 2.0.0",
]
@ -7533,5 +7538,5 @@ checksum = "fc242db087efc22bd9ade7aa7809e4ba828132edc312871584a6b4391bdf8786"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn 2.0.69",
]

View file

@ -14,7 +14,7 @@ chrono = { version = "0.4", features = ["unstable-locales"] }
dirs = "5.0.1"
env_logger = "0.11"
freedesktop_entry_parser = { version = "1.3", optional = true }
fs_extra = "1.3"
fs_extra = { git = "https://github.com/pop-os/fs_extra.git" }
gio = { version = "0.19", optional = true }
glob = "0.3"
ignore = "0.4"

View file

@ -47,6 +47,9 @@ rename-folder = Rename folder
replace = Replace
replace-title = {$filename} already exists in this location.
replace-warning = Do you want to replace it with the one you are saving? Replacing it will overwrite its content.
replace-warning-operation = Do you want to replace it? Replacing it will overwrite its content.
original-file = Original file
replace-with = Replace with
# Context Pages

View file

@ -40,6 +40,7 @@ use std::{
sync::Arc,
time::{self, Instant},
};
use tokio::sync::mpsc;
use crate::localize::LANGUAGE_SORTER;
use crate::tab::HOVER_DURATION;
@ -208,6 +209,7 @@ pub enum Message {
Cut(Option<Entity>),
DialogCancel,
DialogComplete,
DialogPush(DialogPage),
DialogUpdate(DialogPage),
EditLocation(Option<Entity>),
Key(Modifiers, Key),
@ -280,7 +282,7 @@ impl ContextPage {
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
#[derive(Clone, Debug)]
pub enum DialogPage {
EmptyTrash,
FailedOperation(u64),
@ -295,6 +297,11 @@ pub enum DialogPage {
name: String,
dir: bool,
},
Replace {
from: tab::Item,
to: tab::Item,
tx: mpsc::Sender<fs_extra::dir::TransitProcessResult>,
},
}
pub struct FavoriteIndex(usize);
@ -1197,12 +1204,27 @@ impl Application for App {
let to = parent.join(name);
self.operation(Operation::Rename { from, to });
}
DialogPage::Replace { tx, .. } => {
return Command::perform(
async move {
let _ = tx
.send(fs_extra::dir::TransitProcessResult::Overwrite)
.await;
message::none()
},
|x| x,
);
}
}
}
}
Message::DialogPush(dialog_page) => {
self.dialog_pages.push_back(dialog_page);
}
Message::DialogUpdate(dialog_page) => {
//TODO: panicless way to do this?
self.dialog_pages[0] = dialog_page;
if !self.dialog_pages.is_empty() {
self.dialog_pages[0] = dialog_page;
}
}
Message::EditLocation(entity_opt) => {
let entity = entity_opt.unwrap_or_else(|| self.tab_model.active());
@ -2226,6 +2248,18 @@ impl Application for App {
.spacing(space_xxs),
)
}
DialogPage::Replace { from, to, .. } => {
widget::dialog(fl!("replace-title", filename = to.name.as_str()))
.body(fl!("replace-warning-operation"))
.control(to.replace_view(fl!("original-file"), IconSizes::default()))
.control(from.replace_view(fl!("replace-with"), IconSizes::default()))
.primary_action(
widget::button::suggested(fl!("replace")).on_press(Message::DialogComplete),
)
.secondary_action(
widget::button::standard(fl!("cancel")).on_press(Message::DialogCancel),
)
}
};
Some(dialog.into())

View file

@ -1,4 +1,4 @@
use cosmic::iced::futures::{channel::mpsc, executor, SinkExt};
use cosmic::iced::futures::{channel::mpsc::Sender, executor, SinkExt};
use std::{
fs,
path::PathBuf,
@ -7,8 +7,13 @@ use std::{
Arc,
},
};
use tokio::sync::{mpsc, Mutex};
use crate::{app::Message, fl};
use crate::{
app::{DialogPage, Message},
config::IconSizes,
fl, tab,
};
fn err_str<T: ToString>(err: T) -> String {
err.to_string()
@ -53,7 +58,7 @@ impl Operation {
pub async fn perform(
self,
id: u64,
msg_tx: &Arc<tokio::sync::Mutex<mpsc::Sender<Message>>>,
msg_tx: &Arc<Mutex<Sender<Message>>>,
) -> Result<(), String> {
let _ = msg_tx
.lock()
@ -247,8 +252,59 @@ impl Operation {
))
.await;
});
//TODO: handle exceptions
fs_extra::dir::TransitProcessResult::ContinueOrAbort
match progress.state {
fs_extra::dir::TransitState::Normal => {
fs_extra::dir::TransitProcessResult::ContinueOrAbort
}
fs_extra::dir::TransitState::Exists => {
let Some(file_from) = progress.file_from.clone() else {
log::warn!("missing file_from in progress");
return fs_extra::dir::TransitProcessResult::Abort;
};
let item_from =
match tab::item_from_path(file_from, IconSizes::default()) {
Ok(ok) => ok,
Err(err) => {
log::warn!("{}", err);
return fs_extra::dir::TransitProcessResult::Abort;
}
};
let Some(file_to) = progress.file_to.clone() else {
log::warn!("missing file_to in progress");
return fs_extra::dir::TransitProcessResult::Abort;
};
let item_to =
match tab::item_from_path(file_to, IconSizes::default()) {
Ok(ok) => ok,
Err(err) => {
log::warn!("{}", err);
return fs_extra::dir::TransitProcessResult::Abort;
}
};
executor::block_on(async {
let (tx, mut rx) = mpsc::channel(1);
let _ = msg_tx
.lock()
.await
.send(Message::DialogPush(DialogPage::Replace {
from: item_from,
to: item_to,
tx,
}))
.await;
rx.recv()
.await
.unwrap_or(fs_extra::dir::TransitProcessResult::Abort)
})
}
fs_extra::dir::TransitState::NoAccess => {
//TODO: permission error dialog
fs_extra::dir::TransitProcessResult::ContinueOrAbort
}
}
})
})
.await

View file

@ -269,6 +269,25 @@ pub fn item_from_entry(
}
}
pub fn item_from_path<P: Into<PathBuf>>(path: P, sizes: IconSizes) -> Result<Item, String> {
let path = path.into();
let name_os = path
.file_name()
.ok_or_else(|| format!("failed to get file name from path {:?}", path))?;
let name = name_os
.to_str()
.ok_or_else(|| {
format!(
"failed to parse file name for {:?}: {:?} is not valid UTF-8",
path, name_os
)
})?
.to_string();
let metadata = fs::metadata(&path)
.map_err(|err| format!("failed to read metadata for {:?}: {}", path, err))?;
Ok(item_from_entry(path, name, metadata, sizes))
}
pub fn scan_path(tab_path: &PathBuf, sizes: IconSizes) -> Vec<Item> {
let mut items = Vec::new();
match fs::read_dir(tab_path) {
@ -788,6 +807,47 @@ impl Item {
column.into()
}
pub fn replace_view(
&self,
heading: String,
sizes: IconSizes,
) -> Element<'static, app::Message> {
let cosmic_theme::Spacing { space_xxxs, .. } = theme::active().cosmic().spacing;
let mut row = widget::row().spacing(space_xxxs);
row = row.push(self.preview(sizes));
let mut column = widget::column().spacing(space_xxxs);
column = column.push(widget::text::heading(heading));
//TODO: translate!
//TODO: correct display of folder size?
match &self.metadata {
ItemMetadata::Path { metadata, children } => {
if metadata.is_dir() {
column = column.push(widget::text(format!("Items: {}", children)));
} else {
column = column.push(widget::text(format!(
"Size: {}",
format_size(metadata.len())
)));
}
if let Ok(time) = metadata.modified() {
column = column.push(widget::text(format!(
"Last modified: {}",
chrono::DateTime::<chrono::Local>::from(time).format(TIME_FORMAT)
)));
}
}
ItemMetadata::Trash { .. } => {
//TODO: trash metadata
}
}
row = row.push(column);
row.into()
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Deserialize, Serialize)]