From 34c30c85359bafc24893f3bf78c59e4a1a758daf Mon Sep 17 00:00:00 2001 From: Mahit Mehta Date: Mon, 17 Feb 2025 07:11:24 +0000 Subject: [PATCH 1/6] player in deb --- .../{mrial_server.service => mrial-server.service} | 0 linux/debian/mrial.desktop | 7 +++++++ linux/debian/startup.sh | 2 +- mrial_player/assets/imgs/logo.svg | 7 +++++++ mrial_server/Cargo.toml | 10 ++++++++-- 5 files changed, 23 insertions(+), 3 deletions(-) rename linux/debian/{mrial_server.service => mrial-server.service} (100%) create mode 100644 linux/debian/mrial.desktop create mode 100644 mrial_player/assets/imgs/logo.svg diff --git a/linux/debian/mrial_server.service b/linux/debian/mrial-server.service similarity index 100% rename from linux/debian/mrial_server.service rename to linux/debian/mrial-server.service diff --git a/linux/debian/mrial.desktop b/linux/debian/mrial.desktop new file mode 100644 index 0000000..6844a30 --- /dev/null +++ b/linux/debian/mrial.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Name=Mrial +Comment=Mrial Player +GenericName=Remote Desktop Application +Exec=/usr/bin/mrial_player +Icon=mrial +Type=Application \ No newline at end of file diff --git a/linux/debian/startup.sh b/linux/debian/startup.sh index 263b680..094c786 100755 --- a/linux/debian/startup.sh +++ b/linux/debian/startup.sh @@ -1,5 +1,5 @@ #!/bin/bash -export RUST_LOG=debug +export RUST_LOG=mrial_server=debug /usr/bin/mrial_server \ No newline at end of file diff --git a/mrial_player/assets/imgs/logo.svg b/mrial_player/assets/imgs/logo.svg new file mode 100644 index 0000000..6fb4416 --- /dev/null +++ b/mrial_player/assets/imgs/logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/mrial_server/Cargo.toml b/mrial_server/Cargo.toml index 9cc747c..930e72e 100644 --- a/mrial_server/Cargo.toml +++ b/mrial_server/Cargo.toml @@ -1,5 +1,6 @@ [package] name = "mrial_server" +description = "Mrial Server" edition.workspace = true authors.workspace = true license.workspace = true @@ -37,10 +38,15 @@ xrandr = "0.2.0" libyuv-sys = { path = "../libs/libyuv-sys" } [package.metadata.deb] -depends = ["libxdo-dev"] +depends = [] assets = [ + # Mrial Server ["../target/release/mrial_server", "usr/bin/mrial_server", "755"], - ["../linux/debian/*", "var/lib/mrial_server/scripts/", "755"] + ["../linux/debian/startup.sh", "var/lib/mrial_server/scripts/startup.sh", "755"], + # Mrial Player + ["../target/release/mrial_player", "usr/bin/mrial_player", "755"], + ["../linux/debian/mrial.desktop", "usr/share/applications/mrial.desktop", "755"], + ["../mrial_player/assets/imgs/logo.svg", "/usr/share/icons/hicolor/scalable/apps/mrial.svg", "755"] ] maintainer-scripts = "../linux/debian" systemd-units = { enable = true } From b211d3fcd5970600b149c5657d99fe1aa30c5015 Mon Sep 17 00:00:00 2001 From: Mahit Mehta Date: Mon, 17 Feb 2025 18:06:03 +0000 Subject: [PATCH 2/6] Auto --- CHANGELOG.md | 7 +- Cargo.lock | 1134 ++++++++++++------------- mrial_player/Cargo.toml | 6 +- mrial_player/ui/screens/home.slint | 3 +- mrial_player/ui/screens/hosting.slint | 6 +- mrial_server/README.md | 32 +- mrial_server/src/cli/mod.rs | 0 mrial_server/src/main.rs | 1 + 8 files changed, 581 insertions(+), 608 deletions(-) create mode 100644 mrial_server/src/cli/mod.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index 21fcbdf..4d2a604 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,15 @@ # Changelog All notable changes to this project are documented in this file. -## 0.1.18 - 2024-02-16 +## 0.1.19 - TBD + +- Cursor on client should match the host's cursor type + +## 0.1.18 - 2024-02-17 - Logout detection with 1 second frequency - No longer dependent on libxdo +- Mrial Player is included in .deb package (since the player application is needed for creating users) ## 0.1.17 - 2024-02-10 diff --git a/Cargo.lock b/Cargo.lock index a8578d5..f4db0ba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,15 +20,15 @@ checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" [[package]] name = "accesskit" -version = "0.16.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4700bdc115b306d6c43381c344dc307f03b7f0460c304e4892c309930322bd7" +checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a" [[package]] name = "accesskit_atspi_common" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1de72dc7093910a1284cef784b6b143bab0a34d67f6178e4fc3aaaf29a09f8b" +checksum = "7c5dd55e6e94949498698daf4d48fb5659e824d7abec0d394089656ceaf99d4f" dependencies = [ "accesskit", "accesskit_consumer", @@ -40,33 +40,34 @@ dependencies = [ [[package]] name = "accesskit_consumer" -version = "0.24.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe3a07a32ab5837ad83db3230ac490c8504c2cd5b90ac8c00db6535f6ed65d0b" +checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" dependencies = [ "accesskit", + "hashbrown 0.15.2", "immutable-chunkmap", ] [[package]] name = "accesskit_macos" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a189d159c153ae0fce5f9eefdcfec4a27885f453ce5ef0ccf078f72a73c39d34" +checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" dependencies = [ "accesskit", "accesskit_consumer", + "hashbrown 0.15.2", "objc2 0.5.2", "objc2-app-kit", "objc2-foundation", - "once_cell", ] [[package]] name = "accesskit_unix" -version = "0.12.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b76c448cfd96d16131a9ad3ab786d06951eb341cdac1db908978ab010245a19d" +checksum = "fcee751cc20d88678c33edaf9c07e8b693cd02819fe89053776f5313492273f5" dependencies = [ "accesskit", "accesskit_atspi_common", @@ -74,7 +75,7 @@ dependencies = [ "async-executor", "async-task", "atspi", - "futures-lite 1.13.0", + "futures-lite", "futures-util", "serde", "zbus", @@ -82,22 +83,24 @@ dependencies = [ [[package]] name = "accesskit_windows" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "682d8c4fb425606f97408e7577793f32e96310b646fa77662eb4216293eddc7f" +checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" dependencies = [ "accesskit", "accesskit_consumer", + "hashbrown 0.15.2", "paste", "static_assertions", - "windows 0.54.0", + "windows 0.58.0", + "windows-core 0.58.0", ] [[package]] name = "accesskit_winit" -version = "0.22.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afbd6d598b7c035639ad2b664aa0edc94c93dc1fc3ebb4b40d8a95fcd43ffac" +checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879" dependencies = [ "accesskit", "accesskit_macos", @@ -278,14 +281,34 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" +[[package]] +name = "ashpd" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d43c03d9e36dd40cab48435be0b09646da362c278223ca535493877b2c1dee9" +dependencies = [ + "async-fs", + "async-net", + "enumflags2", + "futures-channel", + "futures-util", + "rand", + "serde", + "serde_repr", + "url", + "zbus", +] + [[package]] name = "async-broadcast" -version = "0.5.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener 2.5.3", + "event-listener", + "event-listener-strategy", "futures-core", + "pin-project-lite", ] [[package]] @@ -308,41 +331,20 @@ checksum = "c8828ec6e544c02b0d6691d21ed9f9218d0384a82542855073c2a3f58304aaf0" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.0", - "futures-lite 2.3.0", + "fastrand", + "futures-lite", "slab", ] [[package]] name = "async-fs" -version = "1.6.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" dependencies = [ - "async-lock 2.8.0", - "autocfg", + "async-lock", "blocking", - "futures-lite 1.13.0", -] - -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "cfg-if 1.0.0", - "concurrent-queue", - "futures-lite 1.13.0", - "log", - "parking", - "polling 2.8.0", - "rustix 0.37.27", - "slab", - "socket2 0.4.10", - "waker-fn", + "futures-lite", ] [[package]] @@ -351,14 +353,14 @@ version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" dependencies = [ - "async-lock 3.4.0", + "async-lock", "cfg-if 1.0.0", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite", "parking", - "polling 3.7.2", - "rustix 0.38.34", + "polling", + "rustix", "slab", "tracing", "windows-sys 0.52.0", @@ -366,39 +368,43 @@ dependencies = [ [[package]] name = "async-lock" -version = "2.8.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 2.5.3", + "event-listener", + "event-listener-strategy", + "pin-project-lite", ] [[package]] -name = "async-lock" -version = "3.4.0" +name = "async-net" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" dependencies = [ - "event-listener 5.3.1", - "event-listener-strategy", - "pin-project-lite", + "async-io", + "blocking", + "futures-lite", ] [[package]] name = "async-process" -version = "1.8.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ - "async-io 1.13.0", - "async-lock 2.8.0", + "async-channel", + "async-io", + "async-lock", "async-signal", + "async-task", "blocking", "cfg-if 1.0.0", - "event-listener 3.1.0", - "futures-lite 1.13.0", - "rustix 0.38.34", - "windows-sys 0.48.0", + "event-listener", + "futures-lite", + "rustix", + "tracing", ] [[package]] @@ -418,13 +424,13 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "794f185324c2f00e771cd9f1ae8b5ac68be2ca7abb129a87afd6e86d228bc54d" dependencies = [ - "async-io 2.3.3", - "async-lock 3.4.0", + "async-io", + "async-lock", "atomic-waker", "cfg-if 1.0.0", "futures-core", "futures-io", - "rustix 0.38.34", + "rustix", "signal-hook-registry", "slab", "windows-sys 0.52.0", @@ -464,9 +470,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "atspi" -version = "0.19.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6059f350ab6f593ea00727b334265c4dfc7fd442ee32d264794bd9bdc68e87ca" +checksum = "be534b16650e35237bb1ed189ba2aab86ce65e88cc84c66f4935ba38575cecbf" dependencies = [ "atspi-common", "atspi-connection", @@ -475,39 +481,42 @@ dependencies = [ [[package]] name = "atspi-common" -version = "0.3.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92af95f966d2431f962bc632c2e68eda7777330158bf640c4af4249349b2cdf5" +checksum = "1909ed2dc01d0a17505d89311d192518507e8a056a48148e3598fef5e7bb6ba7" dependencies = [ "enumflags2", "serde", "static_assertions", "zbus", + "zbus-lockstep", + "zbus-lockstep-macros", "zbus_names", "zvariant", ] [[package]] name = "atspi-connection" -version = "0.3.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c65e7d70f86d4c0e3b2d585d9bf3f979f0b19d635a336725a88d279f76b939" +checksum = "430c5960624a4baaa511c9c0fcc2218e3b58f5dbcc47e6190cafee344b873333" dependencies = [ "atspi-common", "atspi-proxies", - "futures-lite 1.13.0", + "futures-lite", "zbus", ] [[package]] name = "atspi-proxies" -version = "0.3.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6495661273703e7a229356dcbe8c8f38223d697aacfaf0e13590a9ac9977bb52" +checksum = "a5e6c5de3e524cf967569722446bcd458d5032348554d9a17d7d72b041ab7496" dependencies = [ "atspi-common", "serde", "zbus", + "zvariant", ] [[package]] @@ -692,10 +701,19 @@ dependencies = [ "async-channel", "async-task", "futures-io", - "futures-lite 2.3.0", + "futures-lite", "piper", ] +[[package]] +name = "borsh" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5430e3be710b68d984d1391c854eb431a9d548640711faa54eecb1df93db91cc" +dependencies = [ + "cfg_aliases 0.2.1", +] + [[package]] name = "built" version = "0.7.3" @@ -760,8 +778,8 @@ checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" dependencies = [ "bitflags 2.6.0", "log", - "polling 3.7.2", - "rustix 0.38.34", + "polling", + "rustix", "slab", "thiserror", ] @@ -774,12 +792,25 @@ checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ "bitflags 2.6.0", "log", - "polling 3.7.2", - "rustix 0.38.34", + "polling", + "rustix", "slab", "thiserror", ] +[[package]] +name = "calloop" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10929724661d1c43856fd87c7a127ae944ec55579134fb485e4136fb6a46fdcb" +dependencies = [ + "bitflags 2.6.0", + "polling", + "rustix", + "slab", + "tracing", +] + [[package]] name = "calloop-wayland-source" version = "0.2.0" @@ -787,7 +818,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" dependencies = [ "calloop 0.12.4", - "rustix 0.38.34", + "rustix", "wayland-backend", "wayland-client 0.31.5", ] @@ -799,7 +830,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ "calloop 0.13.0", - "rustix 0.38.34", + "rustix", "wayland-backend", "wayland-client 0.31.5", ] @@ -989,36 +1020,6 @@ 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 0.23.2", - "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 = "codemap" version = "0.1.3" @@ -1087,12 +1088,6 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - [[package]] name = "convert_case" version = "0.6.0" @@ -1211,6 +1206,15 @@ dependencies = [ "libc", ] +[[package]] +name = "core_maths" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30" +dependencies = [ + "libm", +] + [[package]] name = "coreaudio-rs" version = "0.11.3" @@ -1445,10 +1449,10 @@ dependencies = [ ] [[package]] -name = "derivative" -version = "2.2.0" +name = "derive-new" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535" dependencies = [ "proc-macro2", "quote", @@ -1456,27 +1460,24 @@ dependencies = [ ] [[package]] -name = "derive-new" -version = "0.5.9" +name = "derive_more" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "derive_more-impl", ] [[package]] -name = "derive_more" -version = "0.99.18" +name = "derive_more-impl" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ - "convert_case 0.4.0", "proc-macro2", "quote", - "rustc_version", "syn 2.0.66", + "unicode-xid", ] [[package]] @@ -1562,25 +1563,26 @@ checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" [[package]] name = "drm" -version = "0.9.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edf9159ef4bcecd0c5e4cbeb573b8d0037493403d542780dba5d840bbf9df56f" +checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "bytemuck", "drm-ffi", "drm-fourcc", - "nix 0.26.4", + "libc", + "rustix", ] [[package]] name = "drm-ffi" -version = "0.5.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1352481b7b90e27a8a1bf8ef6b33cf18b98dba7c410e75c24bb3eef2f0d8d525" +checksum = "d8e41459d99a9b529845f6d2c909eb9adf3b6d2f82635ae40be8de0601726e8b" dependencies = [ "drm-sys", - "nix 0.26.4", + "rustix", ] [[package]] @@ -1591,11 +1593,12 @@ checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" [[package]] name = "drm-sys" -version = "0.4.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1369f1679d6b706d234c4c1e0613c415c2c74b598a09ad28080ba2474b72e42d" +checksum = "bafb66c8dbc944d69e15cfcc661df7e703beffbaec8bd63151368b06c5f9858c" dependencies = [ "libc", + "linux-raw-sys 0.6.5", ] [[package]] @@ -1627,6 +1630,12 @@ dependencies = [ "cfg-if 1.0.0", ] +[[package]] +name = "endi" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + [[package]] name = "enigo" version = "0.3.0" @@ -1643,7 +1652,7 @@ dependencies = [ "objc2-foundation", "windows 0.58.0", "x11rb 0.13.1", - "xkbcommon 0.8.0", + "xkbcommon", "xkeysym", ] @@ -1716,23 +1725,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "event-listener" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - [[package]] name = "event-listener" version = "5.3.1" @@ -1750,7 +1742,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ - "event-listener 5.3.1", + "event-listener", "pin-project-lite", ] @@ -1770,15 +1762,6 @@ dependencies = [ "zune-inflate", ] -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - [[package]] name = "fastrand" version = "2.1.0" @@ -1796,19 +1779,20 @@ dependencies = [ [[package]] name = "femtovg" -version = "0.9.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47921d14afc4daad9bedc926099bc6edcaa23e37a957448f86cdefcbafe2f632" +checksum = "36d63bc3ab69493186eefc2568dddc21d2fe5f3c552edc64def6c42297ec9bbd" dependencies = [ "bitflags 2.6.0", + "bytemuck", "fnv", - "glow", + "glow 0.15.0", "image 0.25.2", "imgref", "log", "lru", "rgb", - "rustybuzz", + "rustybuzz 0.20.1", "slotmap", "unicode-bidi", "unicode-segmentation", @@ -1918,6 +1902,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + [[package]] name = "fontconfig-parser" version = "0.5.6" @@ -1929,16 +1919,16 @@ dependencies = [ [[package]] name = "fontdb" -version = "0.18.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e32eac81c1135c1df01d4e6d4233c47ba11f6a6d07f33e0bba09d18797077770" +checksum = "a3a6f9af55fb97ad673fb7a69533eb2f967648a06fa21f8c9bb2cd6d33975716" dependencies = [ "fontconfig-parser", "log", - "memmap2 0.9.4", + "memmap2", "slotmap", "tinyvec", - "ttf-parser", + "ttf-parser 0.24.1", ] [[package]] @@ -1949,7 +1939,7 @@ checksum = "efe23d02309319171d00d794c9ff48d4f903c0e481375b1b04b017470838af04" dependencies = [ "hashbrown 0.14.5", "rayon", - "ttf-parser", + "ttf-parser 0.21.1", ] [[package]] @@ -1990,9 +1980,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -2005,9 +1995,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -2015,15 +2005,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -2033,24 +2023,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -2058,7 +2033,7 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "fastrand 2.1.0", + "fastrand", "futures-core", "futures-io", "parking", @@ -2067,9 +2042,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", @@ -2078,21 +2053,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -2108,11 +2083,11 @@ dependencies = [ [[package]] name = "gbm" -version = "0.12.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ec389cda876966cf824111bf6e533fb934c711d473498279964a990853b3c6" +checksum = "fa9a106f044fbd21edf2d8cc57300df1e60630e46ed4bebd59cdcbb23cfad1ce" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "drm", "drm-fourcc", "gbm-sys", @@ -2121,9 +2096,9 @@ dependencies = [ [[package]] name = "gbm-sys" -version = "0.2.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b63eba9b9b7a231514482deb08759301c9f9f049ac6869403f381834ebfeaf67" +checksum = "a9cc2f64de9fa707b5c6b2d2f10d7a7e49e845018a9f5685891eb40d3bab2538" dependencies = [ "libc", ] @@ -2214,6 +2189,18 @@ dependencies = [ "web-sys", ] +[[package]] +name = "glow" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33cd8ff5e02c1a5463ec10a846c8f3166a3ae0382ec33de6a327ea6dd61c41d" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "glutin" version = "0.32.0" @@ -2316,6 +2303,15 @@ dependencies = [ "rayon", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "foldhash", +] + [[package]] name = "heapless" version = "0.7.17" @@ -2376,31 +2372,30 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "i-slint-backend-linuxkms" -version = "1.7.2" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59745188ee04a8afd65887a0386a1e5272cea18c435493c20be1eaf42cb1da70" +checksum = "07313f9ccdb4aeae3ad1151252010f73fc69227bb49b942a8b54d17045511f69" dependencies = [ "bytemuck", - "calloop 0.12.4", + "calloop 0.14.2", "drm", "gbm", - "gbm-sys", "glutin", "i-slint-common", "i-slint-core", "i-slint-renderer-femtovg", "input", - "memmap2 0.9.4", - "nix 0.27.1", + "memmap2", + "nix 0.29.0", "raw-window-handle", - "xkbcommon 0.7.0", + "xkbcommon", ] [[package]] name = "i-slint-backend-qt" -version = "1.7.2" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f9b499754d17f42b31fd3315c76c3824c3a2d6156b799a78aec3968cd89027f" +checksum = "7782e1fcbb38101a8946bacaa01ea5fa33418cc6f526ee4a0995ad63d0138310" dependencies = [ "const-field-offset", "cpp", @@ -2418,9 +2413,9 @@ dependencies = [ [[package]] name = "i-slint-backend-selector" -version = "1.7.2" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf8c0da7b5a493e224acd3a15fced7ce5dcfbf838717fae4a142be10c6a0318" +checksum = "c0fddbdc93945bf53133d81672b0941d6faa08871f2cce0aea8c10c0bdb9f270" dependencies = [ "cfg-if 1.0.0", "i-slint-backend-linuxkms", @@ -2428,23 +2423,24 @@ dependencies = [ "i-slint-backend-winit", "i-slint-common", "i-slint-core", + "i-slint-core-macros", ] [[package]] name = "i-slint-backend-winit" -version = "1.7.2" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e6a2ce764e057fc22693b193448f195b3c7e801c19342ddbfd6c9c6e298f5c3" +checksum = "4820ff87c95cea7a857f51e13b3491f0022a2a84c124b55e391212f1126bbe95" dependencies = [ "accesskit", "accesskit_winit", + "ashpd", "bytemuck", "cfg-if 1.0.0", "cfg_aliases 0.2.1", - "cocoa", - "const-field-offset", "copypasta", "derive_more", + "futures", "glutin", "glutin-winit", "i-slint-common", @@ -2454,6 +2450,7 @@ dependencies = [ "i-slint-renderer-skia", "imgref", "lyon_path", + "objc2-app-kit", "once_cell", "pin-weak", "raw-window-handle", @@ -2461,6 +2458,7 @@ dependencies = [ "scoped-tls-hkt", "scopeguard", "softbuffer", + "vtable", "wasm-bindgen", "web-sys", "winit 0.30.4", @@ -2468,21 +2466,22 @@ dependencies = [ [[package]] name = "i-slint-common" -version = "1.7.2" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeb81f124038f7ea8a4b95c725a5dffbd17dd87e0e652a79cee1f14b856e69b7" +checksum = "ed17428b2512e02b47fb374afa390e183ece31dcab195a1d6336a064a5e241f7" dependencies = [ "cfg-if 1.0.0", "derive_more", "fontdb", "libloading", + "ttf-parser 0.25.1", ] [[package]] name = "i-slint-compiler" -version = "1.7.2" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e9203a41a378ccf9b97df080bdcda7c613186b0889a4f6a6f1a5ea8adcb34d" +checksum = "e9eb838e86650652ff6d2aa6f05469fc4d6382539700ca340b4e206b13a04666" dependencies = [ "by_address", "codemap", @@ -2497,21 +2496,22 @@ dependencies = [ "lyon_path", "num_enum", "once_cell", + "polib", "proc-macro2", "quote", + "rayon", "resvg", "rowan", - "smol_str", + "smol_str 0.3.2", "strum", - "thiserror", "url", ] [[package]] name = "i-slint-core" -version = "1.7.2" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d20ae1c8d0de028db0ec1decf0a869436e19ff4bf489a87c35aeb1000fd4a365" +checksum = "78e779ce58e0fe3977c028e2460e4aaecd65d32bc579d728e89ed3d2d5114e55" dependencies = [ "auto_enums", "bitflags 2.6.0", @@ -2539,12 +2539,13 @@ dependencies = [ "raw-window-handle", "resvg", "rgb", - "rustybuzz", + "rustybuzz 0.20.1", "scoped-tls-hkt", "scopeguard", "slab", "static_assertions", "strum", + "sys-locale", "unicode-linebreak", "unicode-script", "unicode-segmentation", @@ -2556,19 +2557,20 @@ dependencies = [ [[package]] name = "i-slint-core-macros" -version = "1.7.2" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "096799ce16264fcb7f99b0e9e49b8d0d1a6181807f05e499c821edc60af60649" +checksum = "0ec8e1d457e06e12a5fd23a5e841c994b2ce48cecdaee872c008239380189b15" dependencies = [ "quote", + "serde_json", "syn 2.0.66", ] [[package]] name = "i-slint-renderer-femtovg" -version = "1.7.2" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c7ecc7713bc6d074b1ea10a3bba71ca006f0de6159ca7662c9a91a5e63d1be5" +checksum = "c44ea56368277c89359348fb0765b1ad071bfe98543165d501ad7a619e6e43ba" dependencies = [ "cfg-if 1.0.0", "const-field-offset", @@ -2577,7 +2579,7 @@ dependencies = [ "derive_more", "dwrote", "femtovg", - "glow", + "glow 0.15.0", "i-slint-common", "i-slint-core", "i-slint-core-macros", @@ -2587,7 +2589,7 @@ dependencies = [ "pin-weak", "rgb", "scoped-tls-hkt", - "ttf-parser", + "ttf-parser 0.25.1", "unicode-script", "unicode-segmentation", "wasm-bindgen", @@ -2597,36 +2599,36 @@ dependencies = [ [[package]] name = "i-slint-renderer-skia" -version = "1.7.2" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e58cc4e96d47273b916711da9e962b2f220204b1b481733a1f418711228b11" +checksum = "d8a3c8e632e7ea37b37872533f4504663e1e814de2d7d918f4f833dec69e6279" dependencies = [ "bytemuck", "cfg-if 1.0.0", "cfg_aliases 0.2.1", - "cocoa", "const-field-offset", - "core-foundation 0.9.4", - "core-graphics-types 0.1.3", "derive_more", - "foreign-types", - "glow", + "glow 0.13.1", "glutin", "i-slint-common", "i-slint-core", "i-slint-core-macros", "lyon_path", - "metal", - "objc", + "objc2 0.5.2", + "objc2-app-kit", + "objc2-foundation", + "objc2-metal", + "objc2-quartz-core", "once_cell", "pin-weak", "raw-window-handle", + "raw-window-metal", "scoped-tls-hkt", "skia-safe", "softbuffer", "unicode-segmentation", "vtable", - "windows 0.56.0", + "windows 0.58.0", ] [[package]] @@ -2824,21 +2826,21 @@ dependencies = [ [[package]] name = "imagesize" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" +checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" [[package]] name = "imgref" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" +checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" [[package]] name = "immutable-chunkmap" -version = "2.0.5" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4419f022e55cc63d5bbd6b44b71e1d226b9c9480a47824c706e9d54e5c40c5eb" +checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578" dependencies = [ "arrayvec", ] @@ -2874,13 +2876,12 @@ dependencies = [ [[package]] name = "input" -version = "0.8.3" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e74cd82cedcd66db78742a8337bdc48f188c4d2c12742cbc5cd85113f0b059" +checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "input-sys", - "io-lifetimes", "libc", "log", "udev", @@ -2892,15 +2893,6 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd4f5b4d1c00331c5245163aacfe5f20be75b564c7112d45893d4ae038119eb0" -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if 1.0.0", -] - [[package]] name = "integer-sqrt" version = "0.1.5" @@ -3013,10 +3005,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -3133,7 +3126,7 @@ version = "0.7.2" dependencies = [ "bitflags 2.6.0", "cc", - "convert_case 0.6.0", + "convert_case", "cookie-factory", "libc", "libspa-sys", @@ -3170,6 +3163,15 @@ dependencies = [ "cmake", ] +[[package]] +name = "linereader" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d921fea6860357575519aca014c6e22470585accdd543b370c404a8a72d0dd1d" +dependencies = [ + "memchr", +] + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -3187,15 +3189,15 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.3.8" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" [[package]] name = "litemap" @@ -3215,15 +3217,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "lru" -version = "0.12.3" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" [[package]] name = "lyon_algorithms" @@ -3300,15 +3302,6 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "memmap2" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed" -dependencies = [ - "libc", -] - [[package]] name = "memmap2" version = "0.9.4" @@ -3339,25 +3332,10 @@ dependencies = [ [[package]] name = "memoffset" version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "metal" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" -dependencies = [ - "bitflags 2.6.0", - "block", - "core-graphics-types 0.1.3", - "foreign-types", - "log", - "objc", - "paste", +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", ] [[package]] @@ -3558,13 +3536,15 @@ dependencies = [ [[package]] name = "nix" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ "bitflags 2.6.0", "cfg-if 1.0.0", + "cfg_aliases 0.2.1", "libc", + "memoffset 0.9.1", ] [[package]] @@ -3666,7 +3646,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.66", @@ -3679,7 +3659,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ "malloc_buf", - "objc_exception", ] [[package]] @@ -3912,15 +3891,6 @@ dependencies = [ "objc2-foundation", ] -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - [[package]] name = "objc_id" version = "0.1.1" @@ -4028,7 +3998,7 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b41438d2fc63c46c74a2203bf5ccd82c41ba04347b2fcf5754f230b167067d5" dependencies = [ - "ttf-parser", + "ttf-parser 0.21.1", ] [[package]] @@ -4148,7 +4118,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" dependencies = [ "atomic-waker", - "fastrand 2.1.0", + "fastrand", "futures-io", ] @@ -4217,19 +4187,12 @@ dependencies = [ ] [[package]] -name = "polling" -version = "2.8.0" +name = "polib" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +checksum = "6b393b155cf9be86249cba1b56cc81be0e6212c66d94ac0d76d37a1761f3bb1b" dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if 1.0.0", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", + "linereader", ] [[package]] @@ -4242,7 +4205,7 @@ dependencies = [ "concurrent-queue", "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.34", + "rustix", "tracing", "windows-sys 0.52.0", ] @@ -4299,16 +4262,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - [[package]] name = "proc-macro-crate" version = "3.1.0" @@ -4347,6 +4300,16 @@ dependencies = [ "semver", ] +[[package]] +name = "quick-xml" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "quick-xml" version = "0.34.0" @@ -4401,6 +4364,17 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" +[[package]] +name = "raw-window-metal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2000e45d7daa9b6d946e88dfa1d7ae330424a81918a6545741821c989eb80a9" +dependencies = [ + "objc2 0.5.2", + "objc2-foundation", + "objc2-quartz-core", +] + [[package]] name = "rayon" version = "1.10.0" @@ -4490,9 +4464,9 @@ checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "resvg" -version = "0.42.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "944d052815156ac8fa77eaac055220e95ba0b01fa8887108ca710c03805d9051" +checksum = "4a325d5e8d1cebddd070b13f44cec8071594ab67d1012797c121f27a669b7958" dependencies = [ "log", "pico-args", @@ -4504,9 +4478,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.37" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" dependencies = [ "bytemuck", ] @@ -4526,13 +4500,12 @@ dependencies = [ [[package]] name = "rowan" -version = "0.15.15" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a58fa8a7ccff2aec4f39cc45bf5f985cec7125ab271cf681c279fd00192b49" +checksum = "417a3a9f582e349834051b8a10c8d71ca88da4211e4093528e36b9845f6b5f21" dependencies = [ "countme", "hashbrown 0.14.5", - "memoffset 0.9.1", "rustc-hash", "text-size", ] @@ -4590,20 +4563,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rustix" -version = "0.37.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - [[package]] name = "rustix" version = "0.38.34" @@ -4625,16 +4584,36 @@ checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "rustybuzz" -version = "0.14.1" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c85d1ccd519e61834798eb52c4e886e8c2d7d698dd3d6ce0b1b47eb8557f1181" +dependencies = [ + "bitflags 2.6.0", + "bytemuck", + "core_maths", + "log", + "smallvec", + "ttf-parser 0.24.1", + "unicode-bidi-mirroring 0.3.0", + "unicode-ccc 0.3.0", + "unicode-properties", + "unicode-script", +] + +[[package]] +name = "rustybuzz" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" +checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ "bitflags 2.6.0", "bytemuck", + "core_maths", + "log", "smallvec", - "ttf-parser", - "unicode-bidi-mirroring", - "unicode-ccc", + "ttf-parser 0.25.1", + "unicode-bidi-mirroring 0.4.0", + "unicode-ccc 0.4.0", "unicode-properties", "unicode-script", ] @@ -4679,6 +4658,8 @@ dependencies = [ "block", "cfg-if 0.1.10", "libc", + "log", + "pretty_env_logger", "winapi 0.2.8", ] @@ -4690,7 +4671,7 @@ checksum = "82b2eaf3a5b264a521b988b2e73042e742df700c4f962cde845d1541adb46550" dependencies = [ "ab_glyph", "log", - "memmap2 0.9.4", + "memmap2", "smithay-client-toolkit 0.18.1", "tiny-skia", ] @@ -4703,7 +4684,7 @@ checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" dependencies = [ "ab_glyph", "log", - "memmap2 0.9.4", + "memmap2", "smithay-client-toolkit 0.19.2", "tiny-skia", ] @@ -4841,9 +4822,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "skia-bindings" -version = "0.75.0" +version = "0.78.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06e19e97660b09a381c6eb566849b63556b1a90b8e2c6ba2d146b3f5066847b" +checksum = "29880a81b088de322e9c5306236c70761a61b5fa4df3c15c93bad3ce890ce34c" dependencies = [ "bindgen 0.69.4", "cc", @@ -4858,14 +4839,14 @@ dependencies = [ [[package]] name = "skia-safe" -version = "0.75.0" +version = "0.78.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad6e6f369522471b585c99427720b53aad04016fa4314e0a8cf23f17083a4e4c" +checksum = "4f15700ac678c06649077495acbba07e7ae01e5ca46b7dc18213f2c3477ada71" dependencies = [ "bitflags 2.6.0", "lazy_static", "skia-bindings", - "windows 0.56.0", + "windows 0.58.0", ] [[package]] @@ -4879,14 +4860,15 @@ dependencies = [ [[package]] name = "slint" -version = "1.7.2" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07c20ca1e15b15a998b7e6aa9b160f1857238cdd0ce5536ce40dcc175dcae62" +checksum = "efa626dc7a30a6685e00a5aae5b3c3927a36fae133313127b4e6eeb4cbb01f89" dependencies = [ "const-field-offset", "i-slint-backend-qt", "i-slint-backend-selector", "i-slint-core", + "i-slint-core-macros", "i-slint-renderer-femtovg", "num-traits", "once_cell", @@ -4897,21 +4879,22 @@ dependencies = [ [[package]] name = "slint-build" -version = "1.7.2" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08b4f1d7f9a1b8a992d56ffa7b7bd04db759b5217811825f3ab6fc0bf6a7c4d1" +checksum = "5622b9842b52881c1f60b2c97dae0865867f403ca0037b086bdaeec7e90e5ae2" dependencies = [ + "derive_more", "i-slint-compiler", + "i-slint-core-macros", "spin_on", - "thiserror", "toml_edit 0.22.14", ] [[package]] name = "slint-macros" -version = "1.7.2" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f342d53e220a0431b277c4d82b7f3b98e8dc555d7a70cc7da80476a1b2e19079" +checksum = "cec1ff842824b5b236d6728bc3d5ca75737470dba646bb7600e3996f6ef95f9c" dependencies = [ "i-slint-compiler", "proc-macro2", @@ -4946,8 +4929,8 @@ dependencies = [ "cursor-icon", "libc", "log", - "memmap2 0.9.4", - "rustix 0.38.34", + "memmap2", + "rustix", "thiserror", "wayland-backend", "wayland-client 0.31.5", @@ -4971,8 +4954,8 @@ dependencies = [ "cursor-icon", "libc", "log", - "memmap2 0.9.4", - "rustix 0.38.34", + "memmap2", + "rustix", "thiserror", "wayland-backend", "wayland-client 0.31.5", @@ -5005,13 +4988,13 @@ dependencies = [ ] [[package]] -name = "socket2" -version = "0.4.10" +name = "smol_str" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +checksum = "9676b89cd56310a87b93dec47b11af744f34d5fc9f367b829474eec0a891350d" dependencies = [ - "libc", - "winapi 0.3.9", + "borsh", + "serde", ] [[package]] @@ -5034,18 +5017,18 @@ dependencies = [ "bytemuck", "cfg_aliases 0.2.1", "core-graphics 0.23.2", - "fastrand 2.1.0", + "fastrand", "foreign-types", "js-sys", "log", - "memmap2 0.9.4", + "memmap2", "objc2 0.5.2", "objc2-app-kit", "objc2-foundation", "objc2-quartz-core", "raw-window-handle", "redox_syscall 0.5.2", - "rustix 0.38.34", + "rustix", "tiny-xlib", "wasm-bindgen", "wayland-backend", @@ -5156,9 +5139,9 @@ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "svgtypes" -version = "0.15.1" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fae3064df9b89391c9a76a0425a69d124aee9c5c28455204709e72c39868a43c" +checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc" dependencies = [ "kurbo", "siphasher", @@ -5246,6 +5229,15 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "sys-locale" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" +dependencies = [ + "libc", +] + [[package]] name = "system-deps" version = "6.2.2" @@ -5283,8 +5275,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if 1.0.0", - "fastrand 2.1.0", - "rustix 0.38.34", + "fastrand", + "rustix", "windows-sys 0.52.0", ] @@ -5431,7 +5423,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.7", + "socket2", "tokio-macros", "windows-sys 0.48.0", ] @@ -5468,17 +5460,6 @@ dependencies = [ "serde", ] -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.2.6", - "toml_datetime", - "winnow 0.5.40", -] - [[package]] name = "toml_edit" version = "0.21.1" @@ -5509,6 +5490,7 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5554,6 +5536,24 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" +[[package]] +name = "ttf-parser" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be21190ff5d38e8b4a2d3b6a3ae57f612cc39c96e83cedeaf7abc338a8bac4a" +dependencies = [ + "core_maths", +] + +[[package]] +name = "ttf-parser" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" +dependencies = [ + "core_maths", +] + [[package]] name = "typenum" version = "1.17.0" @@ -5562,10 +5562,11 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "udev" -version = "0.7.0" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebdbbd670373442a12fe9ef7aeb53aec4147a5a27a00bbc3ab639f08f48191a" +checksum = "af4e37e9ea4401fc841ff54b9ddfc9be1079b1e89434c1a6a865dd68980f7e9f" dependencies = [ + "io-lifetimes", "libc", "libudev-sys", "pkg-config", @@ -5584,21 +5585,33 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-bidi-mirroring" -version = "0.2.0" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64af057ad7466495ca113126be61838d8af947f41d93a949980b2389a118082f" + +[[package]] +name = "unicode-bidi-mirroring" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86" +checksum = "5dfa6e8c60bb66d49db113e0125ee8711b7647b5579dc7f5f19c42357ed039fe" [[package]] name = "unicode-ccc" -version = "0.2.0" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "260bc6647b3893a9a90668360803a15f96b85a5257b1c3a0c3daf6ae2496de42" + +[[package]] +name = "unicode-ccc" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" +checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" [[package]] name = "unicode-ident" @@ -5614,21 +5627,21 @@ checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" [[package]] name = "unicode-properties" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" [[package]] name = "unicode-script" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8d71f5726e5f285a935e9fe8edfd53f0491eb6e9a5774097fdabee7cd8c9cd" +checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-vo" @@ -5667,13 +5680,14 @@ dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] [[package]] name = "usvg" -version = "0.42.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84ea542ae85c715f07b082438a4231c3760539d902e11d093847a0b22963032" +checksum = "7447e703d7223b067607655e625e0dbca80822880248937da65966194c4864e6" dependencies = [ "base64", "data-url", @@ -5684,7 +5698,7 @@ dependencies = [ "log", "pico-args", "roxmltree 0.20.0", - "rustybuzz", + "rustybuzz 0.18.0", "simplecss", "siphasher", "strict-num", @@ -5749,12 +5763,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "waker-fn" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - [[package]] name = "walkdir" version = "2.5.0" @@ -5773,23 +5781,24 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if 1.0.0", + "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", "syn 2.0.66", @@ -5810,9 +5819,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5820,9 +5829,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", @@ -5833,9 +5842,12 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wayland-backend" @@ -5845,7 +5857,7 @@ checksum = "f90e11ce2ca99c97b940ee83edbae9da2d56a08f9ea8158550fd77fa31722993" dependencies = [ "cc", "downcast-rs", - "rustix 0.38.34", + "rustix", "scoped-tls", "smallvec", "wayland-sys 0.31.4", @@ -5873,7 +5885,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e321577a0a165911bdcfb39cf029302479d7527b517ee58ab0f6ad09edf0943" dependencies = [ "bitflags 2.6.0", - "rustix 0.38.34", + "rustix", "wayland-backend", "wayland-scanner 0.31.4", ] @@ -5907,7 +5919,7 @@ version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a206e8b2b53b1d3fcb9428fec72bc278ce539e2fa81fe2bfc1ab27703d5187b9" dependencies = [ - "rustix 0.38.34", + "rustix", "wayland-client 0.31.5", "xcursor", ] @@ -6018,7 +6030,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7b56f89937f1cf2ee1f1259cf2936a17a1f45d8f0aa1019fae6d470d304cfa6" dependencies = [ "proc-macro2", - "quick-xml", + "quick-xml 0.34.0", "quote", ] @@ -6045,9 +6057,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -6088,7 +6100,7 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.34", + "rustix", ] [[package]] @@ -6144,18 +6156,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" dependencies = [ "windows-core 0.54.0", - "windows-implement 0.53.0", - "windows-interface 0.53.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows" -version = "0.56.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1de69df01bdf1ead2f4ac895dc77c9351aefff65b2f3db429a343f9cbf05e132" -dependencies = [ - "windows-core 0.56.0", "windows-targets 0.52.6", ] @@ -6188,53 +6188,19 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-core" -version = "0.56.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4698e52ed2d08f8658ab0c39512a7c00ee5fe2688c65f8c0a4f06750d729f2a6" -dependencies = [ - "windows-implement 0.56.0", - "windows-interface 0.56.0", - "windows-result 0.1.2", - "windows-targets 0.52.6", -] - [[package]] name = "windows-core" version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ - "windows-implement 0.58.0", - "windows-interface 0.58.0", + "windows-implement", + "windows-interface", "windows-result 0.2.0", "windows-strings", "windows-targets 0.52.6", ] -[[package]] -name = "windows-implement" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942ac266be9249c84ca862f0a164a39533dc2f6f33dc98ec89c8da99b82ea0bd" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "windows-implement" -version = "0.56.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "windows-implement" version = "0.58.0" @@ -6246,28 +6212,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "windows-interface" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da33557140a288fae4e1d5f8873aaf9eb6613a9cf82c3e070223ff177f598b60" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "windows-interface" -version = "0.56.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "windows-interface" version = "0.58.0" @@ -6532,7 +6476,7 @@ dependencies = [ "js-sys", "libc", "log", - "memmap2 0.9.4", + "memmap2", "ndk 0.8.0", "ndk-sys 0.5.0+25.2.9519653", "objc2 0.4.1", @@ -6541,10 +6485,10 @@ dependencies = [ "percent-encoding", "raw-window-handle", "redox_syscall 0.3.5", - "rustix 0.38.34", + "rustix", "sctk-adwaita 0.8.1", "smithay-client-toolkit 0.18.1", - "smol_str", + "smol_str 0.2.2", "unicode-segmentation", "wasm-bindgen", "wasm-bindgen-futures", @@ -6581,7 +6525,7 @@ dependencies = [ "dpi", "js-sys", "libc", - "memmap2 0.9.4", + "memmap2", "ndk 0.9.0", "objc2 0.5.2", "objc2-app-kit", @@ -6592,10 +6536,10 @@ dependencies = [ "pin-project", "raw-window-handle", "redox_syscall 0.4.1", - "rustix 0.38.34", + "rustix", "sctk-adwaita 0.10.1", "smithay-client-toolkit 0.19.2", - "smol_str", + "smol_str 0.2.2", "tracing", "unicode-segmentation", "wasm-bindgen", @@ -6733,7 +6677,7 @@ dependencies = [ "libc", "libloading", "once_cell", - "rustix 0.38.34", + "rustix", "x11rb-protocol 0.13.1", ] @@ -6775,7 +6719,7 @@ checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" dependencies = [ "libc", "linux-raw-sys 0.4.14", - "rustix 0.38.34", + "rustix", ] [[package]] @@ -6794,17 +6738,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "xkbcommon" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13867d259930edc7091a6c41b4ce6eee464328c6ff9659b7e4c668ca20d4c91e" -dependencies = [ - "libc", - "memmap2 0.8.0", - "xkeysym", -] - [[package]] name = "xkbcommon" version = "0.8.0" @@ -6812,7 +6745,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d66ca9352cbd4eecbbc40871d8a11b4ac8107cfc528a6e14d7c19c69d0e1ac9" dependencies = [ "libc", - "memmap2 0.9.4", + "memmap2", "xkeysym", ] @@ -6896,30 +6829,27 @@ dependencies = [ [[package]] name = "zbus" -version = "3.15.2" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" +checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" dependencies = [ "async-broadcast", "async-executor", "async-fs", - "async-io 1.13.0", - "async-lock 2.8.0", + "async-io", + "async-lock", "async-process", "async-recursion", "async-task", "async-trait", "blocking", - "byteorder", - "derivative", "enumflags2", - "event-listener 2.5.3", + "event-listener", "futures-core", "futures-sink", "futures-util", "hex", - "nix 0.26.4", - "once_cell", + "nix 0.29.0", "ordered-stream", "rand", "serde", @@ -6928,35 +6858,71 @@ dependencies = [ "static_assertions", "tracing", "uds_windows", - "winapi 0.3.9", + "windows-sys 0.52.0", "xdg-home", "zbus_macros", "zbus_names", "zvariant", ] +[[package]] +name = "zbus-lockstep" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca2c5dceb099bddaade154055c926bb8ae507a18756ba1d8963fd7b51d8ed1d" +dependencies = [ + "zbus_xml", + "zvariant", +] + +[[package]] +name = "zbus-lockstep-macros" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", + "zbus-lockstep", + "zbus_xml", + "zvariant", +] + [[package]] name = "zbus_macros" -version = "3.15.2" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7131497b0f887e8061b430c530240063d33bf9455fa34438f388a245da69e0a5" +checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate", "proc-macro2", "quote", - "regex", - "syn 1.0.109", + "syn 2.0.66", "zvariant_utils", ] [[package]] name = "zbus_names" -version = "2.6.1" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + +[[package]] +name = "zbus_xml" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "437d738d3750bed6ca9b8d423ccc7a8eb284f6b1d6d4e225a0e4e6258d864c8d" +checksum = "ab3f374552b954f6abb4bd6ce979e6c9b38fb9d0cd7cc68a7d796e70c9f3a233" dependencies = [ + "quick-xml 0.30.0", "serde", "static_assertions", + "zbus_names", "zvariant", ] @@ -7040,38 +7006,38 @@ dependencies = [ [[package]] name = "zvariant" -version = "3.15.2" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eef2be88ba09b358d3b58aca6e41cd853631d44787f319a1383ca83424fb2db" +checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" dependencies = [ - "byteorder", + "endi", "enumflags2", - "libc", "serde", "static_assertions", + "url", "zvariant_derive", ] [[package]] name = "zvariant_derive" -version = "3.15.2" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c24dc0bed72f5f90d1f8bb5b07228cbf63b3c6e9f82d82559d4bae666e7ed9" +checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.66", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "1.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" +checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.66", ] diff --git a/mrial_player/Cargo.toml b/mrial_player/Cargo.toml index 2e562a9..e676c66 100644 --- a/mrial_player/Cargo.toml +++ b/mrial_player/Cargo.toml @@ -9,8 +9,8 @@ version.workspace = true [dependencies] rodio = "0.17.3" -slint = "1.7.2" -i-slint-backend-winit = { version = "1.7.2", features = [ "renderer-femtovg", "renderer-software" ]} +slint = "1.9.2" +i-slint-backend-winit = { version = "1.9.2", features = [ "renderer-femtovg", "renderer-software" ]} mrial_proto = { path = "../libs/mrial_proto" } mrial_fs = { path = "../libs/mrial_fs" } kanal = "0.1.0-pre8" @@ -34,7 +34,7 @@ libyuv-sys = { path = "../libs/libyuv-sys" } libyuv-sys = { path = "../libs/libyuv-sys" } [build-dependencies] -slint-build = "1.7.2" +slint-build = "1.9.2" [features] build_ffmpeg = ["ffmpeg-next/build"] diff --git a/mrial_player/ui/screens/home.slint b/mrial_player/ui/screens/home.slint index e1eb0e5..03b0d9c 100644 --- a/mrial_player/ui/screens/home.slint +++ b/mrial_player/ui/screens/home.slint @@ -158,8 +158,9 @@ export component HomeScreen inherits Screen { } ScrollView { - height: 100%; + height: root.height - 125px; width: parent.width - parent.padding * 2; + HorizontalLayout { padding-top: 15px; spacing: 10px; diff --git a/mrial_player/ui/screens/hosting.slint b/mrial_player/ui/screens/hosting.slint index 74700f7..221dce7 100644 --- a/mrial_player/ui/screens/hosting.slint +++ b/mrial_player/ui/screens/hosting.slint @@ -122,12 +122,12 @@ export component HostingScreen inherits VerticalLayout { alignment: LayoutAlignment.center; spacing: 10px; - property desired_height: HostingAdapter.users.length * (65px + 10px); - property max_dropdown_height: window_height - 200px; + // property desired_height: HostingAdapter.users.length * (65px + 10px); + // property max_dropdown_height: window_height - 200px; ScrollView { width: 100%; - height: desired_height > max_dropdown_height ? max_dropdown_height : desired_height; + height: max_dropdown_height;// desired_height > max_dropdown_height ? max_dropdown_height : desired_height; VerticalLayout { spacing: 10px; padding-right: 20px; diff --git a/mrial_server/README.md b/mrial_server/README.md index 4ede5d9..df0872c 100644 --- a/mrial_server/README.md +++ b/mrial_server/README.md @@ -1,25 +1,25 @@ -# Install +# Overview -## Windows +Mrial Server -1. choco install pkgconfiglite (to install pkg-config) -2. Follow the instructions found on this website to compile x264 (https://www.roxlu.com/2016/057/compiling-x264-on-windows-with-msvc) +# Setup clean Ubuntu VM with Mrial (Production) + +1. `sudo apt install ubuntu-desktop` +2. Install LightDM display manager via `sudo apt-get install lightdm` +3. Ensure LightDM (or your display-manager) is running before proceeding (`sudo systemctl start display-manager`) -## Linux +# Build (Development) -1. Install libxrandr-dev, libxcb-randr0-dev -2. Make sure user is added to display manager's group (such as lightdm's) +## Windows Requirements -# Build +1. choco install pkgconfiglite (to install pkg-config) +2. Follow the instructions found on this website to compile x264 (https://www.roxlu.com/2016/057/compiling-x264-on-windows-with-msvc) -## Linux +## Linux Requirements 1. Requires GCC v14 or higher or Clang v18 or higher +2. Install libxrandr-dev, libxcb-randr0-dev + +# Run (Development) -# Run Server -1. Install libxdo-dev -2. export XAUTHORITY=/var/lib/lightdm/.Xauthority -3. export DISPLAY=:0 -4. sudo xdotool type "password" -5. sudo xdotool key Return -6. ./mrial_server \ No newline at end of file +1. cargo run \ No newline at end of file diff --git a/mrial_server/src/cli/mod.rs b/mrial_server/src/cli/mod.rs new file mode 100644 index 0000000..e69de29 diff --git a/mrial_server/src/main.rs b/mrial_server/src/main.rs index bc0404f..f265d64 100644 --- a/mrial_server/src/main.rs +++ b/mrial_server/src/main.rs @@ -2,6 +2,7 @@ mod audio; mod conn; mod events; mod video; +mod cli; use audio::{AudioServerThread, IAudioController}; use conn::Connection; From e7bb5ddb613040b7ffff5bc0372e5923b57fd33b Mon Sep 17 00:00:00 2001 From: Mahit Mehta Date: Mon, 17 Feb 2025 13:10:13 -0500 Subject: [PATCH 3/6] Small bug --- mrial_player/ui/screens/hosting.slint | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mrial_player/ui/screens/hosting.slint b/mrial_player/ui/screens/hosting.slint index 221dce7..6683e7f 100644 --- a/mrial_player/ui/screens/hosting.slint +++ b/mrial_player/ui/screens/hosting.slint @@ -123,7 +123,7 @@ export component HostingScreen inherits VerticalLayout { spacing: 10px; // property desired_height: HostingAdapter.users.length * (65px + 10px); - // property max_dropdown_height: window_height - 200px; + property max_dropdown_height: window_height - 200px; ScrollView { width: 100%; From 244a574009bdf88dd99a437d59b1e2ecbab1ec48 Mon Sep 17 00:00:00 2001 From: Mahit Mehta Date: Mon, 17 Feb 2025 14:37:28 -0500 Subject: [PATCH 4/6] Created Basic CLI --- Cargo.lock | 36 ++++++-- libs/mrial_fs/src/lib.rs | 4 +- libs/mrial_fs/src/storage.rs | 2 +- mrial_player/Cargo.toml | 2 +- mrial_player/src/storage/mod.rs | 149 ------------------------------ mrial_server/src/cli/mod.rs | 146 +++++++++++++++++++++++++++++ mrial_server/src/events/mod.rs | 35 ++++--- mrial_server/src/main.rs | 9 ++ mrial_server/src/video/display.rs | 3 +- mrial_server/src/video/mod.rs | 9 +- mrial_server/src/video/session.rs | 7 +- 11 files changed, 215 insertions(+), 187 deletions(-) delete mode 100644 mrial_player/src/storage/mod.rs diff --git a/Cargo.lock b/Cargo.lock index f4db0ba..555e32c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -631,6 +631,24 @@ dependencies = [ "which", ] +[[package]] +name = "bindgen" +version = "0.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.66", +] + [[package]] name = "bit_field" version = "0.10.2" @@ -837,13 +855,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.99" +version = "1.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" +checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" dependencies = [ "jobserver", "libc", - "once_cell", + "shlex", ] [[package]] @@ -1802,9 +1820,9 @@ dependencies = [ [[package]] name = "ffmpeg-next" -version = "7.0.2" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfce5242643c8a57b5a44b7e933ccbde85f9508d1379e578e97eee4a9d4334b" +checksum = "da02698288e0275e442a47fc12ca26d50daf0d48b15398ba5906f20ac2e2a9f9" dependencies = [ "bitflags 2.6.0", "ffmpeg-sys-next", @@ -1813,11 +1831,11 @@ dependencies = [ [[package]] name = "ffmpeg-sys-next" -version = "7.0.0" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "972a460dd8e901b737ce0482bf71a837e1751e3dd7c8f8b0a4ead808e7f174a5" +checksum = "2bc3234d0a4b2f7d083699d0860c6c9dd83713908771b60f94a96f8704adfe45" dependencies = [ - "bindgen 0.69.4", + "bindgen 0.70.1", "cc", "libc", "num_cpus", @@ -4658,8 +4676,6 @@ dependencies = [ "block", "cfg-if 0.1.10", "libc", - "log", - "pretty_env_logger", "winapi 0.2.8", ] diff --git a/libs/mrial_fs/src/lib.rs b/libs/mrial_fs/src/lib.rs index 264a30a..afd0567 100644 --- a/libs/mrial_fs/src/lib.rs +++ b/libs/mrial_fs/src/lib.rs @@ -102,8 +102,8 @@ impl StorageMultiType for Users { self.users.save() } - fn find(&self, _username: String) -> Option { - todo!() + fn find(&self, username: String) -> Option { + self.users.find(&|u| u.username == username) } fn remove(&mut self, username: String) -> Result<(), Box> { diff --git a/libs/mrial_fs/src/storage.rs b/libs/mrial_fs/src/storage.rs index 3d4b05e..334eb7e 100644 --- a/libs/mrial_fs/src/storage.rs +++ b/libs/mrial_fs/src/storage.rs @@ -70,7 +70,7 @@ impl StorageMulti { Err("Failed to Remove Item".into()) } - pub fn find(&self, func: &mut dyn FnMut(&T) -> bool) -> Option { + pub fn find(&self, func: &dyn Fn(&T) -> bool) -> Option { if let Ok(state) = self.state.lock() { if let Some(state) = state.as_ref() { for item in state.iter() { diff --git a/mrial_player/Cargo.toml b/mrial_player/Cargo.toml index e676c66..58be09a 100644 --- a/mrial_player/Cargo.toml +++ b/mrial_player/Cargo.toml @@ -18,7 +18,7 @@ serde_json = "1.0.96" serde = { version = "1.0.164", features = ["derive"] } winit = "0.29.4" dirs = "5.0.1" -ffmpeg-next = { version = "7.0.0" } +ffmpeg-next = { version = "7.1.0" } cli-clipboard = "0.4.0" pretty_env_logger = "0.5.0" log = "0.4.21" diff --git a/mrial_player/src/storage/mod.rs b/mrial_player/src/storage/mod.rs deleted file mode 100644 index 47195a4..0000000 --- a/mrial_player/src/storage/mod.rs +++ /dev/null @@ -1,149 +0,0 @@ -use serde::{Deserialize, Serialize}; -use serde_json; -use std::{ - error::Error, - fs::{self, File, OpenOptions}, - io::{BufReader, Write}, - sync::{Arc, Mutex}, -}; - -#[derive(Deserialize, Serialize, Debug, Clone)] -pub struct Server { - pub name: String, - pub address: String, - pub port: u16, - pub os: String, -} - -#[derive(Deserialize, Serialize, Debug, Clone)] -pub struct ServerState { - servers: Vec, -} - -#[derive(Deserialize, Serialize, Debug)] -pub struct StorageWrapper { - data: T, -} - -pub trait Storage { - fn load(&mut self) -> Result<(), Box>; - fn save(&self) -> Result<(), Box>; -} - -pub struct Servers { - state: Arc>>, - db_path: String, - file_name: String, -} - -impl Servers { - pub fn new() -> Self { - Servers { - state: Arc::new(Mutex::new(None)), - db_path: "Mrial/db".to_string(), - file_name: "servers.json".to_string(), - } - } - - pub fn get_servers(&self) -> Option> { - if let Some(state) = self.state.lock().unwrap().as_ref() { - return Some(state.servers.clone()); - } - - None - } - - pub fn delete(&mut self, server_id: String) { - if let Some(state) = self.state.lock().unwrap().as_mut() { - for (index, server) in state.servers.iter().enumerate() { - if server.name == server_id { - state.servers.remove(index); - break; - } - } - } - } - - pub fn find_server(&self, server_id: String) -> Option { - if let Some(state) = self.state.lock().unwrap().as_ref() { - for server in &state.servers { - if server.name == server_id { - return Some(server.clone()); - } - } - } - - None - } - - pub fn try_clone(&self) -> Servers { - Servers { - state: self.state.clone(), - db_path: self.db_path.clone(), - file_name: self.file_name.clone(), - } - } - - pub fn add(&mut self, name: String, address: String, port: u16, os: String) { - if let Some(state) = self.state.lock().unwrap().as_mut() { - // TODO: display duplicate server error in slint - for server in &state.servers { - if server.name == name { - return; - } - } - - state.servers.push(Server { - name, - address, - port, - os, - }); - } - } -} - -impl Storage for Servers { - fn load(&mut self) -> Result<(), Box> { - let os_data_dir = dirs::data_dir().unwrap(); - let path = os_data_dir.join(&self.db_path).join(&self.file_name); - let file = match File::open(path) { - Ok(file) => file, - Err(_) => { - *self.state.lock().unwrap() = Some(ServerState { - servers: Vec::new(), - }); - return Ok(()); - } - }; - - let reader = BufReader::new(file); - - let state: StorageWrapper = serde_json::from_reader(reader)?; - *self.state.lock().unwrap() = Some(state.data); - - Ok(()) - } - - fn save(&self) -> Result<(), Box> { - let os_data_dir = dirs::data_dir().unwrap(); - let data_dir = os_data_dir.join(&self.db_path); - - fs::create_dir_all(&data_dir)?; - - let mut file = OpenOptions::new() - .write(true) - .create(true) - .truncate(true) - .open(data_dir.join(&self.file_name))?; - - let value = StorageWrapper { - data: self.state.lock().unwrap().clone().unwrap(), - }; - - let json = serde_json::to_string(&value)?; - file.write_all(json.as_bytes())?; - - Ok(()) - } -} diff --git a/mrial_server/src/cli/mod.rs b/mrial_server/src/cli/mod.rs index e69de29..c52be5d 100644 --- a/mrial_server/src/cli/mod.rs +++ b/mrial_server/src/cli/mod.rs @@ -0,0 +1,146 @@ +use mrial_fs::{storage::StorageMultiType, Users, User}; + +fn handle_user_add_cli(args: &[String], users: &mut Users) { + if args.len() == 0 || args.len() != 2 { + println!(" +\"mrial_server user add\" requires 2 arguments. + +Usage \"mrial_server user add [username] [password]\" + +For more help on how to use Mrial CLI, head to https://github.com/mahitmehta/mrial\"\n"); + return; + } + + let username = &args[0]; + let pass = &args[1]; + + if let Some(_) = users.find(username.to_string()) { + println!("User already exists."); + return; + } + + let new_user = User { + username: username.clone(), + pass: pass.clone(), + }; + + if let Err(e) = users.add(new_user) { + println!("Error adding user: {}", e); + return; + } + + if let Err(e) = users.save() { + println!("Error saving users: {}", e); + return; + } + + println!("User added successfully."); +} + +fn handle_user_rm_cli(args: &[String], users: &mut Users) { + if args.len() == 0 { + println!(" +\"mrial_server user rm\" requires 1 argument. + +Usage \"mrial_server user rm [username]\" + +For more help on how to use Mrial CLI, head to https://github.com/mahitmehta/mrial\n"); + return; + } + + let username = &args[0]; + + if let None = users.find(username.to_string()) { + println!("User not found."); + return; + } + + if let Err(e) = users.remove(username.to_string()) { + println!("Error removing user: {}", e); + return; + } + + if let Err(e) = users.save() { + println!("Error saving users: {}", e); + return; + } + + println!("User removed successfully."); +} + +fn handle_user_cli(args: &[String]) { + if args.len() == 0 { + print_user_help(); + return; + } + + let cmd = &args[0]; + + let mut users = Users::new(); + if let Err(e) = users.load() { + println!("Error loading users: {}", e); + return; + } + + if cmd == "ls" { + println!("Authenticated Users:"); + + if let Some(users) = &users.users.get() { + for i in 0..users.len() { + println!("{}. {}", (i + 1), users[i].username); + } + if users.len() == 0 { + println!("No users found."); + } + } else { + println!("Failed to get users."); + } + } else if cmd == "add" { + handle_user_add_cli(&args[1..], &mut users); + } else if cmd == "rm" { + handle_user_rm_cli(&args[1..], &mut users); + } else if cmd == "--help" { + print_user_help(); + } else { + println!("Invalid Option.\n\nUse `--help` for more information."); + } +} + +fn print_user_help() { + println!(" +Usage: mrial_server user [options] + +Commands:\n + ls\t\tList authenticated users + add\t\tAdd a new user + rm\t\tRemove a user + +Flags:\n + --help\t\tShow this help message +\nFor more help on how to use Mrial CLI, head to https://github.com/mahitmehta/mrial\n"); +} + +fn print_help() { + println!(" +Usage: mrial_server [command] [options] + +Commands:\n + user\t\tManage authenticated users + +Flags:\n + --help\t\tShow this help message +\nFor more help on how to use Mrial CLI, head to https://github.com/mahitmehta/mrial"); +} + +pub fn handle_cli(args: &Vec) { + let cmd = &args[1]; + + if cmd == "user" { + let user_args = &args[2..]; + handle_user_cli(user_args); + } else if cmd == "--help" { + print_help(); + } else { + println!("Invalid Option.\nUse `--help` for more information."); + } +} \ No newline at end of file diff --git a/mrial_server/src/events/mod.rs b/mrial_server/src/events/mod.rs index 8842c89..6558faa 100644 --- a/mrial_server/src/events/mod.rs +++ b/mrial_server/src/events/mod.rs @@ -13,6 +13,8 @@ use mrial_proto::{ #[cfg(target_os = "linux")] use mouse_keyboard_input; +#[cfg(target_os = "linux")] +use std::time::Duration; use super::{conn::Connection, VideoServerAction}; @@ -30,8 +32,6 @@ pub struct EventsEmitter { impl EventsEmitter { #[cfg(target_os = "linux")] fn new(video_server_ch_sender: Sender) -> Self { - use std::time::Duration; - let uinput = mouse_keyboard_input::VirtualDevice::new(Duration::new(0.040 as u64, 0), 2000).unwrap(); let enigo = Enigo::new(&Settings::default()).unwrap(); @@ -45,14 +45,22 @@ impl EventsEmitter { } } + #[cfg(not(target_os = "linux"))] + fn new(video_server_ch_sender: Sender) -> Self { + let enigo = Enigo::new(&Settings::default()).unwrap(); - fn reconnect_input_modules(&mut self) -> Result<(), Box> { - if cfg!(target_os = "linux") { - use std::time::Duration; - self.uinput = mouse_keyboard_input::VirtualDevice::new( - Duration::new(0.040 as u64, 0), 2000)?; + Self { + enigo, + video_server_ch_sender, + session_restart_in_progress: false, + left_mouse_held: false } + } + #[cfg(target_os = "linux")] + fn reconnect_input_modules(&mut self) -> Result<(), Box> { + self.uinput = mouse_keyboard_input::VirtualDevice::new( + Duration::new(0.040 as u64, 0), 2000)?; self.enigo = Enigo::new(&Settings::default())?; self.session_restart_in_progress = false; @@ -60,14 +68,11 @@ impl EventsEmitter { } #[cfg(not(target_os = "linux"))] - fn new() -> Self { - let enigo = Enigo::new(&Settings::default()).unwrap(); - - Self { - enigo, - session_restart_in_progress: false, - left_mouse_held: false - } + fn reconnect_input_modules(&mut self) -> Result<(), Box> { + self.enigo = Enigo::new(&Settings::default())?; + + self.session_restart_in_progress = false; + Ok(()) } // sudo apt install libudev-dev libevdev-dev libhidapi-dev diff --git a/mrial_server/src/main.rs b/mrial_server/src/main.rs index f265d64..2264eb3 100644 --- a/mrial_server/src/main.rs +++ b/mrial_server/src/main.rs @@ -4,12 +4,21 @@ mod events; mod video; mod cli; +use std::env; + use audio::{AudioServerThread, IAudioController}; use conn::Connection; use video::{VideoServerAction, VideoServerThread}; +use cli::handle_cli; #[tokio::main] async fn main() { + let args: Vec = env::args().collect(); + if args.len() > 1 { + handle_cli(&args); + return; + } + const VERSION: &str = env!("CARGO_PKG_VERSION"); println!("Starting Mrial Server Version {}\n", VERSION); diff --git a/mrial_server/src/video/display.rs b/mrial_server/src/video/display.rs index b320c27..51d8f81 100644 --- a/mrial_server/src/video/display.rs +++ b/mrial_server/src/video/display.rs @@ -1,6 +1,5 @@ #[cfg(target_os = "linux")] -use xrandr::{ScreenResources, XHandle}; -use xrandr::XrandrError; +use xrandr::{ScreenResources, XHandle, XrandrError}; pub struct DisplayMeta {} diff --git a/mrial_server/src/video/mod.rs b/mrial_server/src/video/mod.rs index baa6189..7cd97e6 100644 --- a/mrial_server/src/video/mod.rs +++ b/mrial_server/src/video/mod.rs @@ -56,10 +56,11 @@ impl VideoServerThread { pub fn new(conn: Connection) -> Result> { let mut setting = Setting::Unknown; - if cfg!(target_os = "linux") { - setting = session::config_xenv()?; + #[cfg(target_os = "linux")] + { + setting = session::config_xenv()?;; } - + let display: Display = Display::primary()?; let capturer = Capturer::new(display)?; @@ -166,6 +167,7 @@ impl VideoServerThread { ) { match server_action { Some(VideoServerAction::RestartSession) => { + #[cfg(target_os = "linux")] match session::config_xenv() { Ok(Setting::PostLogin) => { self.setting = Setting::PostLogin; @@ -180,6 +182,7 @@ impl VideoServerThread { self.events_sender.send(EventsThreadAction::ReconnectInputModules).unwrap(); } Some(VideoServerAction::NewUserSession) => { + #[cfg(target_os = "linux")] match session::config_xenv() { Ok(Setting::PostLogin) => { self.setting = Setting::PostLogin; diff --git a/mrial_server/src/video/session.rs b/mrial_server/src/video/session.rs index 80403dd..b4e55f2 100644 --- a/mrial_server/src/video/session.rs +++ b/mrial_server/src/video/session.rs @@ -158,10 +158,9 @@ impl SessionSettingThread { setting, }; - if cfg!(target_os = "linux") { - if let Err(e) = session_setting_thread.x11_session_status_loop() { - error!("X11 session status loop crashed: {:?}", e); - } + #[cfg(target_os = "linux")] + if let Err(e) = session_setting_thread.x11_session_status_loop() { + error!("X11 session status loop crashed: {:?}", e); } }); } From 560d3361d2a13b054856fa545543156aca311342 Mon Sep 17 00:00:00 2001 From: Mahit Mehta Date: Mon, 17 Feb 2025 23:40:49 +0000 Subject: [PATCH 5/6] Get Elevated Permissions --- Cargo.lock | 2 + libs/mrial_fs/src/lib.rs | 18 +++++++- libs/mrial_fs/src/storage.rs | 73 ++++++++++++++++++++++++------- linux/debian/mrial-server.service | 2 +- mrial_player/src/main.rs | 54 ++++++++++++++++------- mrial_server/src/cli/mod.rs | 2 +- mrial_server/src/conn/mod.rs | 1 + 7 files changed, 116 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 555e32c..75e24c6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4676,6 +4676,8 @@ dependencies = [ "block", "cfg-if 0.1.10", "libc", + "log", + "pretty_env_logger", "winapi 0.2.8", ] diff --git a/libs/mrial_fs/src/lib.rs b/libs/mrial_fs/src/lib.rs index afd0567..e23671b 100644 --- a/libs/mrial_fs/src/lib.rs +++ b/libs/mrial_fs/src/lib.rs @@ -81,10 +81,26 @@ impl Users { } } +const ROOT_DATA_DIR: &'static str = "/var/lib/mrial_server"; + impl StorageMultiType for Users { + #[cfg(not(target_os = "linux"))] fn new() -> Self { Users { - users: StorageMulti::new("users.json".to_string()), + users: StorageMulti::new( "users.json".to_string()), + } + } + + #[cfg(target_os = "linux")] + fn new() -> Self { + use std::path::PathBuf; + let file_dir = PathBuf::from(ROOT_DATA_DIR); + + Users { + users: StorageMulti::new_with_custom_dir( + "users.json".to_string(), + file_dir + ), } } diff --git a/libs/mrial_fs/src/storage.rs b/libs/mrial_fs/src/storage.rs index 334eb7e..99d020a 100644 --- a/libs/mrial_fs/src/storage.rs +++ b/libs/mrial_fs/src/storage.rs @@ -1,8 +1,5 @@ use std::{ - error::Error, - fs::{self, File, OpenOptions}, - io::{BufReader, Write}, - sync::{Arc, Mutex}, + error::Error, fs::{self, File, OpenOptions}, io::{BufReader, ErrorKind, Write}, path::PathBuf, process::Command, sync::{Arc, Mutex} }; use log::debug; @@ -10,8 +7,8 @@ use serde::{de::DeserializeOwned, Deserialize, Serialize}; pub struct StorageMulti { state: Arc>>>, - db_path: String, file_name: String, + file_dir: PathBuf } #[derive(Serialize, Deserialize)] @@ -33,22 +30,28 @@ const DB_PATH: &'static str = "Mrial/db"; impl StorageMulti { pub fn new(file_name: String) -> Self { + let os_data_dir = dirs::data_dir().unwrap(); + let file_dir = os_data_dir.join(DB_PATH); + StorageMulti::new_with_custom_dir(file_name, file_dir) + } + + pub fn new_with_custom_dir(file_name: String, file_dir: PathBuf) -> Self { if !file_name.ends_with(".json") { panic!("File Name Must End with .json"); } StorageMulti { state: Arc::new(Mutex::new(None)), - db_path: DB_PATH.to_string(), file_name, + file_dir } } pub fn clone(&self) -> StorageMulti { StorageMulti { state: self.state.clone(), - db_path: self.db_path.clone(), file_name: self.file_name.clone(), + file_dir: self.file_dir.clone(), } } @@ -96,8 +99,9 @@ impl StorageMulti { } pub fn load(&mut self) -> Result<(), Box> { - let os_data_dir = dirs::data_dir().unwrap(); - let path = os_data_dir.join(&self.db_path).join(&self.file_name); + let path = self.file_dir.join(&self.file_name); + + debug!("Loading Data from Disk @ {:?}", path); let file = match File::open(path) { Ok(file) => file, Err(_) => { @@ -119,19 +123,54 @@ impl StorageMulti { Err("Failed to Load Data".into()) } + fn save_with_elevated_permissions(&self) -> Result<(), Box> { + let file_path = self.file_dir.join(&self.file_name); + + let status = Command::new("pkexec") + .arg("tee") // Use tee to write to a root-protected file + .arg(&file_path) + .stdin(std::process::Stdio::piped()) + .spawn() + .and_then(|mut child| { + use std::io::Write; + let value: StorageMultiWrapper = StorageMultiWrapper { + data: self.state.lock().unwrap().clone().unwrap(), + }; + let json = serde_json::to_string(&value)?; + + if let Some(mut stdin) = child.stdin.take() { + stdin.write_all(json.as_bytes())?; + } + child.wait() + })?; + + if status.success() { + debug!("Saved Data to Disk with Elevated Permissions @ {:?}", file_path); + Ok(()) + } else { + Err("Failed to Save Data to Disk".into()) + } + } + pub fn save(&self) -> Result<(), Box> { - let os_data_dir = dirs::data_dir().unwrap(); - let data_dir = os_data_dir.join(&self.db_path); - let file_path = data_dir.join(&self.file_name); + let file_path = self.file_dir.join(&self.file_name); - fs::create_dir_all(&data_dir)?; + fs::create_dir_all(&self.file_dir)?; - let mut file = OpenOptions::new() + let mut file = match OpenOptions::new() .write(true) .create(true) .truncate(true) - .open(&file_path)?; - + .open(&file_path) { + Ok(file) => file, + Err(ref e) if e.kind() == ErrorKind::PermissionDenied => { + return self.save_with_elevated_permissions(); + } + Err(e) => { + return Err(e.into()); + } + }; + let value: StorageMultiWrapper = StorageMultiWrapper { data: self.state.lock().unwrap().clone().unwrap(), }; @@ -139,7 +178,7 @@ impl StorageMulti { let json = serde_json::to_string(&value)?; file.write_all(json.as_bytes())?; debug!("Saved Data to Disk @ {:?}", file_path); - + Ok(()) } } diff --git a/linux/debian/mrial-server.service b/linux/debian/mrial-server.service index 32381fc..3cfefeb 100644 --- a/linux/debian/mrial-server.service +++ b/linux/debian/mrial-server.service @@ -2,12 +2,12 @@ Description=Mrial Server After=syslog.target network.target network-online.target sshd.service Wants=network-online.target +StartLimitIntervalSec=15s [Service] Type=simple Restart=always RestartSec=1s -StartLimitIntervalSec=15s StartLimitBurst=3 ExecStart=/var/lib/mrial_server/scripts/startup.sh diff --git a/mrial_player/src/main.rs b/mrial_player/src/main.rs index 4c0ede2..eda9a35 100644 --- a/mrial_player/src/main.rs +++ b/mrial_player/src/main.rs @@ -157,10 +157,16 @@ fn main() { pass: pass.to_string(), }) { Ok(_) => { - debug!("User Added: {}", username); - let users = users_storage_copy.users.get().unwrap(); - populate_users(users, &app_weak_add_clone); - users_storage_copy.save().unwrap(); + if let Err(e) = users_storage_copy.save() { + // reload users from disk because of error + users_storage_copy.users.load().unwrap(); + debug!("Failed to Add User: {}", e); + } else { + let users = users_storage_copy.users.get().unwrap(); + populate_users(users, &app_weak_add_clone); + + debug!("User Added: {}", username); + } } Err(e) => { debug!("Failed to Add User: {}", e); @@ -173,10 +179,16 @@ fn main() { .on_remove_user( move |username| match users_storage.remove(username.to_string()) { Ok(_) => { - debug!("User Removed: {}", username); - let users = users_storage.users.get().unwrap(); - populate_users(users, &app_weak_clone); - users_storage.save().unwrap(); + if let Err(e) = users_storage.save() { + // reload users from disk because of error + users_storage.users.load().unwrap(); + debug!("Failed to Remove User: {}", e); + } else { + let users = users_storage.users.get().unwrap(); + populate_users(users, &app_weak_clone); + + debug!("User Removed: {}", username); + } } Err(e) => { debug!("Failed to Remove User: {}", e); @@ -252,10 +264,15 @@ fn main() { pass: pass.to_string(), }) { Ok(_) => { - debug!("Server Added: {}", username); - let servers = servers_storage_clone.servers.get().unwrap(); - populate_servers(servers, &app_weak_clone); - servers_storage_clone.save().unwrap(); + if let Err(e) = servers_storage_clone.save() { + servers_storage_clone.servers.load().unwrap(); + debug!("Failed to Add Server: {}", e); + } else { + let servers = servers_storage_clone.servers.get().unwrap(); + populate_servers(servers, &app_weak_clone); + + debug!("Server Added: {}", username); + } } Err(e) => { debug!("Failed to Add User: {}", e); @@ -270,10 +287,15 @@ fn main() { .on_delete( move |name| match servers_storage_remove_clone.remove(name.to_string()) { Ok(_) => { - debug!("Server Removed: {}", name); - let servers = servers_storage_remove_clone.servers.get().unwrap(); - populate_servers(servers, &app_weak_clone); - servers_storage_remove_clone.save().unwrap(); + if let Err(e) = servers_storage_remove_clone.save() { + servers_storage_remove_clone.servers.load().unwrap(); + debug!("Failed to Remove Server: {}", e); + } else { + let servers = servers_storage_remove_clone.servers.get().unwrap(); + populate_servers(servers, &app_weak_clone); + + debug!("Server Removed: {}", name); + } } Err(e) => { debug!("Failed to Remove Server: {}", e); diff --git a/mrial_server/src/cli/mod.rs b/mrial_server/src/cli/mod.rs index c52be5d..cdef4f2 100644 --- a/mrial_server/src/cli/mod.rs +++ b/mrial_server/src/cli/mod.rs @@ -83,7 +83,7 @@ fn handle_user_cli(args: &[String]) { } if cmd == "ls" { - println!("Authenticated Users:"); + println!("Authenticated Users:\n"); if let Some(users) = &users.users.get() { for i in 0..users.len() { diff --git a/mrial_server/src/conn/mod.rs b/mrial_server/src/conn/mod.rs index 924ab0e..c6056ad 100644 --- a/mrial_server/src/conn/mod.rs +++ b/mrial_server/src/conn/mod.rs @@ -15,6 +15,7 @@ use mrial_proto::{ ServerShookSE, ServerShookUE, ServerStatePayload, SERVER_PING_TOLERANCE, }; +#[cfg(target_os = "linux")] use crate::video::display::DisplayMeta; const SERVER_DEFAULT_PORT: u16 = 8554; From 6d0b64505d879e4818016315d838a0f944a73a52 Mon Sep 17 00:00:00 2001 From: Mahit Mehta Date: Mon, 17 Feb 2025 18:45:50 -0500 Subject: [PATCH 6/6] RC1 --- CHANGELOG.md | 2 ++ Cargo.lock | 2 -- macos/info.plist | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d2a604..00f60ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ All notable changes to this project are documented in this file. - Logout detection with 1 second frequency - No longer dependent on libxdo - Mrial Player is included in .deb package (since the player application is needed for creating users) +- Simple CLI part of the mrial_server binary (use mrial_server --help to learn more) +- The UI and the CLI both store authenticated users at /var/lib/mrial_server directory on linux ## 0.1.17 - 2024-02-10 diff --git a/Cargo.lock b/Cargo.lock index 75e24c6..555e32c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4676,8 +4676,6 @@ dependencies = [ "block", "cfg-if 0.1.10", "libc", - "log", - "pretty_env_logger", "winapi 0.2.8", ] diff --git a/macos/info.plist b/macos/info.plist index e2c884b..113e417 100644 --- a/macos/info.plist +++ b/macos/info.plist @@ -19,8 +19,8 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.1.16 + 0.1.18 CFBundleVersion - 0.1.16 + 0.1.18 \ No newline at end of file