diff --git a/Cargo.lock b/Cargo.lock index fe8a00a..9a12354 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -965,9 +965,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.58" +version = "1.2.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1" +checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283" dependencies = [ "find-msvc-tools", "jobserver", @@ -1128,6 +1128,36 @@ dependencies = [ "cc", ] +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation 0.9.4", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "libc", + "objc", +] + [[package]] name = "codespan-reporting" version = "0.12.0" @@ -1303,7 +1333,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1324,7 +1354,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "quote", "syn", @@ -1405,7 +1435,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "almost", "configparser", @@ -1867,6 +1897,45 @@ name = "dpi" version = "0.1.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +[[package]] +name = "drm" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" +dependencies = [ + "bitflags 2.11.0", + "bytemuck", + "drm-ffi", + "drm-fourcc", + "rustix 0.38.44", +] + +[[package]] +name = "drm-ffi" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6" +dependencies = [ + "drm-sys", + "rustix 0.38.44", +] + +[[package]] +name = "drm-fourcc" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" + +[[package]] +name = "drm-sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176" +dependencies = [ + "libc", + "linux-raw-sys 0.6.5", +] + [[package]] name = "dtoa" version = "1.0.11" @@ -2293,9 +2362,9 @@ dependencies = [ [[package]] name = "font-types" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73829a7b5c91198af28a99159b7ae4afbb252fb906159ff7f189f3a2ceaa3df2" +checksum = "2d9237c6d82152100c691fb77ea18037b402bcc7257d2c876a4ffac81bc22a1c" dependencies = [ "bytemuck", ] @@ -3011,7 +3080,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.13.0", + "indexmap 2.13.1", "slab", "tokio", "tokio-util", @@ -3349,7 +3418,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "dnd", "iced_accessibility", @@ -3371,7 +3440,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "accesskit", "accesskit_winit", @@ -3380,7 +3449,7 @@ dependencies = [ [[package]] name = "iced_beacon" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "bincode", "futures", @@ -3395,7 +3464,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "bitflags 2.11.0", "bytes", @@ -3420,7 +3489,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "iced_beacon", "iced_core", @@ -3431,7 +3500,7 @@ dependencies = [ [[package]] name = "iced_devtools" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "iced_debug", "iced_program", @@ -3442,7 +3511,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "futures", "iced_core", @@ -3456,7 +3525,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "bitflags 2.11.0", "bytemuck", @@ -3477,7 +3546,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "iced_graphics", "iced_runtime", @@ -3486,7 +3555,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3498,7 +3567,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3514,7 +3583,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "bytemuck", "cosmic-text", @@ -3548,11 +3617,12 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "as-raw-xcb-connection", "bitflags 2.11.0", "bytemuck", + "cosmic-client-toolkit", "cryoglyph", "futures", "glam", @@ -3578,7 +3648,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3597,7 +3667,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -3807,9 +3877,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.13.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +checksum = "45a8a2b9cb3e0b0c1803dbb0758ffac5de2f425b23c28f518faabd9d805342ff" dependencies = [ "equivalent", "hashbrown 0.16.1", @@ -4183,7 +4253,7 @@ checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#12be83a8ef58019a1bd31ead100040244bd05f16" +source = "git+https://github.com/pop-os/libcosmic#fdf3369cea2f772aabb5f7c4e5cdf6406780f6ab" dependencies = [ "apply", "ashpd 0.12.3", @@ -4303,6 +4373,12 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +[[package]] +name = "linux-raw-sys" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" + [[package]] name = "linux-raw-sys" version = "0.12.1" @@ -4709,7 +4785,7 @@ dependencies = [ "half", "hashbrown 0.16.1", "hexf-parse", - "indexmap 2.13.0", + "indexmap 2.13.1", "libm", "log", "num-traits", @@ -5011,7 +5087,7 @@ dependencies = [ "objc2-core-data", "objc2-core-image", "objc2-foundation 0.2.2", - "objc2-quartz-core 0.2.2", + "objc2-quartz-core", ] [[package]] @@ -5095,11 +5171,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ "bitflags 2.11.0", - "dispatch2", "libc", - "objc2 0.6.4", "objc2-core-foundation", - "objc2-io-surface", ] [[package]] @@ -5155,17 +5228,6 @@ dependencies = [ "objc2-core-foundation", ] -[[package]] -name = "objc2-io-surface" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" -dependencies = [ - "bitflags 2.11.0", - "objc2 0.6.4", - "objc2-core-foundation", -] - [[package]] name = "objc2-metal" version = "0.2.2" @@ -5191,18 +5253,6 @@ dependencies = [ "objc2-metal", ] -[[package]] -name = "objc2-quartz-core" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" -dependencies = [ - "bitflags 2.11.0", - "objc2 0.6.4", - "objc2-core-foundation", - "objc2-foundation 0.3.2", -] - [[package]] name = "objc2-ui-kit" version = "0.3.2" @@ -6806,7 +6856,7 @@ version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ - "indexmap 2.13.0", + "indexmap 2.13.1", "itoa", "memchr", "serde", @@ -6856,7 +6906,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.13.0", + "indexmap 2.13.1", "schemars 0.9.0", "schemars 1.2.1", "serde_core", @@ -7086,32 +7136,31 @@ dependencies = [ [[package]] name = "softbuffer" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" +version = "0.4.1" +source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#a3f77e251e7422803f693df6e3fc313c010c4dcb" dependencies = [ "as-raw-xcb-connection", "bytemuck", + "cfg_aliases 0.2.1", + "cocoa", + "core-graphics", + "drm", "fastrand", + "foreign-types", "js-sys", + "log", "memmap2 0.9.10", - "ndk", - "objc2 0.6.4", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-foundation 0.3.2", - "objc2-quartz-core 0.3.2", + "objc", "raw-window-handle", "redox_syscall 0.5.18", - "rustix 1.1.4", + "rustix 0.38.44", "tiny-xlib", - "tracing", "wasm-bindgen", "wayland-backend", "wayland-client", "wayland-sys", "web-sys", - "windows-sys 0.61.2", + "windows-sys 0.52.0", "x11rb", ] @@ -7174,7 +7223,7 @@ dependencies = [ "futures-util", "hashbrown 0.15.5", "hashlink", - "indexmap 2.13.0", + "indexmap 2.13.1", "log", "memchr", "once_cell", @@ -8022,9 +8071,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.50.0" +version = "1.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" +checksum = "2bd1c4c0fc4a7ab90fc15ef6daaa3ec3b893f004f915f2392557ed23237820cd" dependencies = [ "bytes", "libc", @@ -8039,9 +8088,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.6.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", @@ -8109,7 +8158,7 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" dependencies = [ - "indexmap 2.13.0", + "indexmap 2.13.1", "serde_core", "serde_spanned", "toml_datetime", @@ -8133,7 +8182,7 @@ version = "0.25.10+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a82418ca169e235e6c399a84e395ab6debeb3bc90edc959bf0f48647c6a32d1b" dependencies = [ - "indexmap 2.13.0", + "indexmap 2.13.1", "toml_datetime", "toml_parser", "winnow 1.0.1", @@ -8713,7 +8762,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" dependencies = [ "anyhow", - "indexmap 2.13.0", + "indexmap 2.13.1", "wasm-encoder", "wasmparser", ] @@ -8726,7 +8775,7 @@ checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ "bitflags 2.11.0", "hashbrown 0.15.5", - "indexmap 2.13.0", + "indexmap 2.13.1", "semver", ] @@ -8984,7 +9033,7 @@ dependencies = [ "cfg_aliases 0.2.1", "document-features", "hashbrown 0.16.1", - "indexmap 2.13.0", + "indexmap 2.13.1", "log", "naga", "once_cell", @@ -9967,7 +10016,7 @@ checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" dependencies = [ "anyhow", "heck 0.5.0", - "indexmap 2.13.0", + "indexmap 2.13.1", "prettyplease", "syn", "wasm-metadata", @@ -9998,7 +10047,7 @@ checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", "bitflags 2.11.0", - "indexmap 2.13.0", + "indexmap 2.13.1", "log", "serde", "serde_derive", @@ -10017,7 +10066,7 @@ checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" dependencies = [ "anyhow", "id-arena", - "indexmap 2.13.0", + "indexmap 2.13.1", "log", "semver", "serde", @@ -10029,9 +10078,9 @@ dependencies = [ [[package]] name = "writeable" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "x11-dl" diff --git a/Cargo.toml b/Cargo.toml index 50fac7e..cb12285 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -54,7 +54,7 @@ serde_json = "1.0.149" [dependencies.libcosmic] git = "https://github.com/pop-os/libcosmic" default-features = false -features = ["debug", "winit", "desktop", "winit_wgpu", "winit_tokio", "tokio", "wayland", "rfd", "dbus-config", "a11y", "wgpu", "multi-window", "process"] +features = ["debug", "winit", "desktop", "wayland", "tokio", "rfd", "dbus-config", "a11y", "wgpu", "multi-window", "process"] [dependencies.iced_video_player] git = "https://github.com/wash2/iced_video_player.git" diff --git a/flake.nix b/flake.nix index 396ab59..3df8bdb 100644 --- a/flake.nix +++ b/flake.nix @@ -67,6 +67,7 @@ libGL cargo-flamegraph bacon + openssl fontconfig glib diff --git a/src/main.rs b/src/main.rs index 529a654..62a2c7f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1245,7 +1245,7 @@ impl cosmic::Application for App { if let Some(video) = &mut self.presenter.video { video.set_muted(false); } - window::change_mode(id, Mode::Fullscreen) + window::maximize(id, true) } else { Task::none() } @@ -1296,10 +1296,12 @@ impl cosmic::Application for App { ) } Message::HoveredServiceItem(index) => { + debug!(index); self.hovered_item = index; Task::none() } Message::HoveredServiceDrop(index) => { + debug!(index); self.hovered_dnd = index; Task::none() } @@ -2149,7 +2151,7 @@ where text::heading("Service List") .center() .width(Length::Fill), - iced::widget::horizontal_rule(1), + divider::horizontal::light(), scrollable ] .padding(10) diff --git a/src/ui/library.rs b/src/ui/library.rs index 553b19c..7c496e7 100644 --- a/src/ui/library.rs +++ b/src/ui/library.rs @@ -12,10 +12,10 @@ use cosmic::{ theme, widget::{ Container, DndSource, Space, button, container, context_menu, - dnd_destination, icon, + divider, dnd_destination, icon, menu::{self, Action as MenuAction}, mouse_area, responsive, row, scrollable, - space::horizontal, + space::{self, horizontal}, text, text_input, }, }; @@ -171,17 +171,21 @@ impl<'a> Library { self.library_open.unwrap_or(LibraryKind::Song); match kind { LibraryKind::Song => { - let _song = Song::default(); - let task = Task::future(self.db.acquire()).and_then(move |db| { - Task::perform(add_song_to_db(db), move |res| { - match res { - Ok(song) => { - Message::AddSong(song) - }, - Err(e) => {error!(?e, "couldn't add song to db"); Message::None} - } + let task = Task::future(self.db.acquire()) + .map_err(|e| { + miette::miette!("Database error: {e}") }) - }); + .and_then(move |db| { + Task::perform( + add_song_to_db(db), + move |res| { + res.map(|song| { + Message::AddSong(song) + }) + }, + ) + }) + .map(|r| r.unwrap_or(Message::None)); return Action::Task(task); } LibraryKind::Video => { @@ -218,6 +222,9 @@ impl<'a> Library { error!(?e); } let task = Task::future(self.db.acquire()) + .map_err(|e| { + miette::miette!("Database error: {e}") + }) .and_then(move |db| { Task::perform( add_video_to_db( @@ -225,25 +232,16 @@ impl<'a> Library { db, ), move |res| { - debug!( - len, - index, "added to db" - ); - if let Err(e) = res { - error!(?e); - } - if len == index { - debug!("open the pres"); + res.map(|_| { Message::OpenItem(Some(( LibraryKind::Video, index as i32, ))) - } else { - Message::None - } + }) }, ) - }); + }) + .map(|r| r.unwrap_or(Message::None)); tasks.push(task); index += 1; } @@ -267,23 +265,22 @@ impl<'a> Library { error!(?e); } return Action::Task( - Task::future(self.db.acquire()).and_then( - move |db| { + Task::future(self.db.acquire()) + .map_err(|e| { + miette::miette!("Database error: {e}") + }) + .and_then(move |db| { Task::perform( add_presentation_to_db( presentation.clone(), db, ), move |res| { - debug!("added to db"); - if let Err(e) = res { - error!(?e); - } - Message::None + res.map(|_| Message::None) }, ) - }, - ), + }) + .map(|r| r.unwrap_or(Message::None)), ); } } @@ -304,32 +301,16 @@ impl<'a> Library { let task = Task::future( self.db.acquire(), ) + .map_err(|e| miette::miette!("Database error: {e}")) .and_then(move |db| { Task::perform( add_presentation_to_db( presentation.clone(), db, ), - move |res| { - debug!( - len, - index, "added to db" - ); - if let Err(e) = res { - error!(?e); - } - if len == index { - debug!("open the pres"); - Message::OpenItem(Some(( - LibraryKind::Presentation, - index as i32, - ))) - } else { - Message::None - } - }, + move |res| res.map(|_| Message::OpenItem(Some((LibraryKind::Presentation, index as i32)))) ) - }); + }).map(|r| r.unwrap_or(Message::None)); tasks.push(task); index += 1; } @@ -358,6 +339,9 @@ impl<'a> Library { error!(?e); } let task = Task::future(self.db.acquire()) + .map_err(|e| { + miette::miette!("Database error: {e}") + }) .and_then(move |db| { Task::perform( add_image_to_db( @@ -365,25 +349,16 @@ impl<'a> Library { db, ), move |res| { - debug!( - len, - index, "added to db" - ); - if let Err(e) = res { - error!(?e); - } - if len == index { - debug!("open the pres"); + res.map(|_| { Message::OpenItem(Some(( LibraryKind::Image, index as i32, ))) - } else { - Message::None - } + }) }, ) - }); + }) + .map(|r| r.unwrap_or(Message::None)); tasks.push(task); index += 1; } @@ -518,20 +493,17 @@ impl<'a> Library { } return Action::Task( - Task::future(self.db.acquire()).and_then( - move |conn| { + Task::future(self.db.acquire()) + .map_err(|e| { + miette::miette!("Database error: {e}") + }) + .and_then(move |conn| { Task::perform( update_song_in_db(song.clone(), conn), - |r| match r { - Ok(()) => Message::SongChanged, - Err(e) => { - error!(?e); - Message::None - } - }, + |r| r.map(|_| Message::SongChanged), ) - }, - ), + }) + .map(|r| r.unwrap_or(Message::None)), ); } Message::SongChanged => { @@ -568,23 +540,20 @@ impl<'a> Library { } return Action::Task( - Task::future(self.db.acquire()).and_then( - move |conn| { + Task::future(self.db.acquire()) + .map_err(|e| { + miette::miette!("Database error: {e}") + }) + .and_then(move |conn| { Task::perform( update_image_in_db( image.clone(), conn, ), - |r| match r { - Ok(()) => Message::ImageChanged, - Err(e) => { - error!(?e); - Message::None - } - }, + |r| r.map(|_| Message::ImageChanged), ) - }, - ), + }) + .map(|r| r.unwrap_or(Message::None)), ); } Message::ImageChanged => (), @@ -609,23 +578,20 @@ impl<'a> Library { } return Action::Task( - Task::future(self.db.acquire()).and_then( - move |conn| { + Task::future(self.db.acquire()) + .map_err(|e| { + miette::miette!("Database error: {e}") + }) + .and_then(move |conn| { Task::perform( update_video_in_db( video.clone(), conn, ), - |r| match r { - Ok(()) => Message::VideoChanged, - Err(e) => { - error!(?e); - Message::None - } - }, + |r| r.map(|_| Message::VideoChanged), ) - }, - ), + }) + .map(|r| r.unwrap_or(Message::None)), ); } Message::VideoChanged => debug!("vid shoulda changed"), @@ -653,23 +619,19 @@ impl<'a> Library { .update_item(presentation.clone(), index) { Ok(()) => return Action::Task( - Task::future(self.db.acquire()).and_then( + Task::future(self.db.acquire()).map_err(|e| { + miette::miette!("Database error: {e}") + }).and_then( move |conn| { Task::perform( update_presentation_in_db( presentation.clone(), conn, ), - |r| match r { - Ok(()) => Message::PresentationChanged, - Err(e) => { - error!(?e); - Message::None - } - }, + |r| r.map(|_| Message::PresentationChanged) ) }, - ), + ).map(|r| r.unwrap_or(Message::None)), ), Err(_) => todo!(), } @@ -717,26 +679,27 @@ impl<'a> Library { .add_item(song.clone()) .err() else { - let task = - Task::future(self.db.acquire()) - .and_then(move |db| { - Task::perform( - add_song_to_db(db), - { - move |res| { - if let Err( - e, - ) = res - { - error!( - ?e - ); - } - Message::None - } - }, - ) - }); + let task = Task::future( + self.db.acquire(), + ) + .map_err(|e| { + miette::miette!( + "Database error: {e}" + ) + }) + .and_then(move |db| { + Task::perform( + add_song_to_db(db), + { + move |res| { + res.map(|song| { + Message::None + }) + } + }, + ) + }) + .map(|r| r.unwrap_or(Message::None)); tasks.push(task); continue; }; @@ -748,30 +711,29 @@ impl<'a> Library { .add_item(video.clone()) .err() else { - let task = Task::future( - self.db.acquire(), - ) - .and_then(move |db| { - Task::perform( - add_video_to_db( - video.clone(), - db, - ), - { - let video = video.clone(); - move |res| { - debug!( - ?video, - "added to db" - ); - if let Err(e) = res { - error!(?e); - } - Message::None - } - }, - ) - }); + let task = + Task::future(self.db.acquire()) + .map_err(|e| { + miette::miette!( + "Database error: {e}" + ) + }) + .and_then(move |db| { + Task::perform( + add_video_to_db( + video.clone(), + db, + ), + move |res| { + res.map(|_| { + Message::None + }) + }, + ) + }) + .map(|r| { + r.unwrap_or(Message::None) + }); tasks.push(task); continue; }; @@ -783,30 +745,29 @@ impl<'a> Library { .add_item(image.clone()) .err() else { - let task = Task::future( - self.db.acquire(), - ) - .and_then(move |db| { - Task::perform( - add_image_to_db( - image.clone(), - db, - ), - { - let image = image.clone(); - move |res| { - debug!( - ?image, - "added to db" - ); - if let Err(e) = res { - error!(?e); - } - Message::None - } - }, - ) - }); + let task = + Task::future(self.db.acquire()) + .map_err(|e| { + miette::miette!( + "Database error: {e}" + ) + }) + .and_then(move |db| { + Task::perform( + add_image_to_db( + image.clone(), + db, + ), + move |res| { + res.map(|_| { + Message::None + }) + }, + ) + }) + .map(|r| { + r.unwrap_or(Message::None) + }); tasks.push(task); continue; }; @@ -822,6 +783,11 @@ impl<'a> Library { else { let task = Task::future(self.db.acquire()) + .map_err(|e| { + miette::miette!( + "Database error: {e}" + ) + }) .and_then(move |db| { Task::perform( add_presentation_to_db( @@ -829,20 +795,16 @@ impl<'a> Library { db, ), { - let presentation = - presentation.clone(); move |res| { - debug!( - ?presentation, - "added to db" - ); - if let Err(e) = res { - error!(?e); - } - Message::None + res.map(|_| { + Message::None + }) } }, ) + }) + .map(|r| { + r.unwrap_or(Message::None) }); tasks.push(task); @@ -873,7 +835,7 @@ impl<'a> Library { let library_column = column![ text::heading("Library").center().width(Length::Fill), - cosmic::iced::widget::horizontal_rule(1), + divider::horizontal::light(), song_library, image_library, video_library, @@ -952,7 +914,7 @@ impl<'a> Library { where T: Content, { - let mut row = row::().spacing(5); + let mut row = row::with_capacity(5).spacing(5); match &model.kind { LibraryKind::Song => { row = row @@ -983,7 +945,7 @@ impl<'a> Library { } } let item_count = model.items.len(); - row = row.push(horizontal_space()); + row = row.push(space::horizontal()); row = row .push(textm!("{}", item_count).align_y(Vertical::Center)); row = row.push( @@ -1120,7 +1082,7 @@ impl<'a> Library { column![library_toolbar, context_menu].spacing(3); Container::new(library_column).padding(5) } else { - Container::new(Space::new(0, 0)) + Container::new(Space::new()) }; column![library_button, lib_container].into() } @@ -1135,6 +1097,9 @@ impl<'a> Library { where T: Content, { + let cosmic::cosmic_theme::Spacing { + space_xxs, space_s, .. + } = theme::spacing(); let text = Container::new(responsive(|size| { text::heading(elide_text(item.title(), size.width)) .center() @@ -1189,7 +1154,6 @@ impl<'a> Library { .spacing(10) .align_y(Vertical::Center), ) - // .padding(5) .width(Length::Fill) .style(move |t| { container::Style::default() @@ -1230,7 +1194,7 @@ impl<'a> Library { .rounded(t.cosmic().corner_radii.radius_m), ) }) - .padding([3, 0]) + .padding([space_xxs, space_s]) .into() } @@ -1361,8 +1325,8 @@ impl<'a> Library { error!(?e); Task::none() } else { - Task::future(self.db.acquire()) - .and_then(move |db| { + Task::future(self.db.acquire()).and_then( + move |db| { Task::perform( songs::remove_from_db( db, song.id, @@ -1371,11 +1335,12 @@ impl<'a> Library { if let Err(e) = r { error!(?e); } - r.map(|_| Message::None) + Message::None }, ) - }) - .map(|r| r.unwrap_or(Task::none())) + .map(|m| Ok(m)) + }, + ) } } else { Task::none() @@ -1392,8 +1357,8 @@ impl<'a> Library { error!(?e); Task::none() } else { - Task::future(self.db.acquire()) - .and_then(move |db| { + Task::future(self.db.acquire()).and_then( + move |db| { Task::perform( videos::remove_from_db( db, video.id, @@ -1405,8 +1370,9 @@ impl<'a> Library { Message::None }, ) - }) - .map(|r| r.unwrap_or(Task::none())) + .map(|m| Ok(m)) + }, + ) } } else { Task::none() @@ -1425,8 +1391,8 @@ impl<'a> Library { } else { debug!("let's remove {0}", image.id); debug!("let's remove {0}", image.title); - Task::future(self.db.acquire()) - .and_then(move |db| { + Task::future(self.db.acquire()).and_then( + move |db| { Task::perform( images::remove_from_db( db, image.id, @@ -1438,8 +1404,9 @@ impl<'a> Library { Message::None }, ) - }) - .map(|r| r.unwrap_or(Task::none())) + .map(|m| Ok(m)) + }, + ) } } else { Task::none() @@ -1457,8 +1424,8 @@ impl<'a> Library { error!(?e); Task::none() } else { - Task::future(self.db.acquire()) - .and_then(move |db| { + Task::future(self.db.acquire()).and_then( + move |db| { Task::perform( presentations::remove_from_db( db, @@ -1471,14 +1438,20 @@ impl<'a> Library { Message::None }, ) - }) - .map(|r| r.unwrap_or(Task::none())) + .map(|m| Ok(m)) + }, + ) } } else { Task::none() } } }) + .map(|t| { + t.map( + |r| if let Ok(r) = r { r } else { Message::None }, + ) + }) .collect(); if !tasks.is_empty() { self.selected_items = None; diff --git a/src/ui/slide_editor.rs b/src/ui/slide_editor.rs index d5127d5..450721c 100644 --- a/src/ui/slide_editor.rs +++ b/src/ui/slide_editor.rs @@ -124,7 +124,7 @@ impl<'a> Program event: &canvas::Event, bounds: cosmic::iced::Rectangle, _cursor: cosmic::iced_core::mouse::Cursor, - ) -> (&cosmic::event::Status, Option) { + ) -> Option> { match event { canvas::Event::Mouse(event) => match event { cosmic::iced::mouse::Event::CursorEntered => { @@ -165,7 +165,7 @@ impl<'a> Program todo!() } } - (iced_core::event::Status::Ignored, None) + None } fn mouse_interaction( diff --git a/src/ui/video_editor.rs b/src/ui/video_editor.rs index 1e47e86..f30ae83 100644 --- a/src/ui/video_editor.rs +++ b/src/ui/video_editor.rs @@ -178,6 +178,7 @@ impl VideoEditor { } fn update_entire_video(&mut self, video: &videos::Video) { + debug!(?video); let Ok(mut player_video) = Url::from_file_path(video.path.clone()) .map(|url| Video::new(&url).expect("Should be here")) diff --git a/src/ui/widgets/draggable/column.rs b/src/ui/widgets/draggable/column.rs index 96a6188..563d5b4 100644 --- a/src/ui/widgets/draggable/column.rs +++ b/src/ui/widgets/draggable/column.rs @@ -434,9 +434,7 @@ where clipboard: &mut dyn Clipboard, shell: &mut Shell<'_, Message>, viewport: &Rectangle, - ) -> event::Status { - let mut event_status = event::Status::Ignored; - + ) { let action = tree.state.downcast_mut::(); match event { @@ -457,7 +455,7 @@ where index, origin: cursor_position, }; - event_status = event::Status::Captured; + shell.capture_event(); break; } } @@ -482,7 +480,7 @@ where DragEvent::Picked { index }, )); } - event_status = event::Status::Captured; + shell.capture_event(); } } Action::Dragging { origin, index, .. } => { @@ -494,7 +492,7 @@ where origin, index, }; - event_status = event::Status::Captured; + shell.capture_event(); } } _ => {} @@ -527,8 +525,7 @@ where drop_position, }, )); - event_status = - event::Status::Captured; + shell.capture_event(); } } else if let Some(on_reorder) = &self.on_drag @@ -536,8 +533,7 @@ where shell.publish(on_reorder( DragEvent::Canceled { index }, )); - event_status = - event::Status::Captured; + shell.capture_event(); } } *action = Action::Idle; @@ -552,12 +548,11 @@ where _ => {} } - let child_status = self - .children + self.children .iter_mut() .zip(&mut tree.children) .zip(layout.children()) - .map(|((child, state), c_layout)| { + .for_each(|((child, state), c_layout)| { child.as_widget_mut().update( state, &event.clone(), @@ -569,18 +564,7 @@ where shell, viewport, ) - }) - .fold( - event::Status::Ignored, - |arg0: cosmic::iced::event::Status, arg1: ()| { - event::Status::merge( - event::Status::Ignored, - arg0, /* cosmic::iced::event::Status */ - ) - }, - ); - - event::Status::merge(event_status, child_status) + }); } fn mouse_interaction( diff --git a/src/ui/widgets/draggable/row.rs b/src/ui/widgets/draggable/row.rs index e98689a..959f069 100644 --- a/src/ui/widgets/draggable/row.rs +++ b/src/ui/widgets/draggable/row.rs @@ -421,9 +421,7 @@ where clipboard: &mut dyn Clipboard, shell: &mut Shell<'_, Message>, viewport: &Rectangle, - ) -> event::Status { - let mut event_status = event::Status::Ignored; - + ) { let action = tree.state.downcast_mut::(); match event { @@ -444,7 +442,7 @@ where index, origin: cursor_position, }; - event_status = event::Status::Captured; + shell.capture_event(); break; } } @@ -469,7 +467,7 @@ where DragEvent::Picked { index }, )); } - event_status = event::Status::Captured; + shell.capture_event(); } } Action::Dragging { origin, index, .. } => { @@ -481,7 +479,7 @@ where origin, index, }; - event_status = event::Status::Captured; + shell.capture_event(); } } _ => {} @@ -514,8 +512,7 @@ where drop_position, }, )); - event_status = - event::Status::Captured; + shell.capture_event(); } } else if let Some(on_reorder) = &self.on_drag @@ -523,8 +520,7 @@ where shell.publish(on_reorder( DragEvent::Canceled { index }, )); - event_status = - event::Status::Captured; + shell.capture_event(); } } *action = Action::Idle; @@ -544,7 +540,7 @@ where .iter_mut() .zip(&mut tree.children) .zip(layout.children()) - .map(|((child, state), layout)| { + .for_each(|((child, state), layout)| { child.as_widget_mut().update( state, &event.clone(), @@ -555,18 +551,7 @@ where shell, viewport, ) - }) - .fold( - event::Status::Ignored, - |arg0: cosmic::iced::event::Status, arg1: ()| { - event::Status::merge( - event::Status::Ignored, - arg0, /* cosmic::iced::event::Status */ - ) - }, - ); - - event::Status::merge(event_status, child_status) + }); } fn mouse_interaction( @@ -953,7 +938,7 @@ where clipboard: &mut dyn Clipboard, shell: &mut Shell<'_, Message>, viewport: &Rectangle, - ) -> event::Status { + ) { self.row.update( tree, event, layout, cursor, renderer, clipboard, shell, viewport, diff --git a/src/ui/widgets/mod.rs b/src/ui/widgets/mod.rs index 735deaf..3f1407e 100644 --- a/src/ui/widgets/mod.rs +++ b/src/ui/widgets/mod.rs @@ -2,5 +2,5 @@ #[allow(clippy::nursery)] #[allow(clippy::pedantic)] pub mod draggable; -pub mod slide_text; +// pub mod slide_text; pub mod verse_editor;