diff --git a/Cargo.lock b/Cargo.lock
index 43c0bcc..24dcc2c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -20,15 +20,15 @@ checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046"
[[package]]
name = "accesskit"
-version = "0.17.1"
+version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a"
+checksum = "e25ae84c0260bdf5df07796d7cc4882460de26a2b406ec0e6c42461a723b271b"
[[package]]
name = "accesskit_atspi_common"
-version = "0.10.1"
+version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c5dd55e6e94949498698daf4d48fb5659e824d7abec0d394089656ceaf99d4f"
+checksum = "29bd41de2e54451a8ca0dd95ebf45b54d349d29ebceb7f20be264eee14e3d477"
dependencies = [
"accesskit",
"accesskit_consumer",
@@ -40,20 +40,19 @@ dependencies = [
[[package]]
name = "accesskit_consumer"
-version = "0.26.0"
+version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459"
+checksum = "8bfae7c152994a31dc7d99b8eeac7784a919f71d1b306f4b83217e110fd3824c"
dependencies = [
"accesskit",
"hashbrown 0.15.2",
- "immutable-chunkmap",
]
[[package]]
name = "accesskit_macos"
-version = "0.18.1"
+version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1"
+checksum = "692dd318ff8a7a0ffda67271c4bd10cf32249656f4e49390db0b26ca92b095f2"
dependencies = [
"accesskit",
"accesskit_consumer",
@@ -65,9 +64,9 @@ dependencies = [
[[package]]
name = "accesskit_unix"
-version = "0.13.1"
+version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcee751cc20d88678c33edaf9c07e8b693cd02819fe89053776f5313492273f5"
+checksum = "c5f7474c36606d0fe4f438291d667bae7042ea2760f506650ad2366926358fc8"
dependencies = [
"accesskit",
"accesskit_atspi_common",
@@ -83,24 +82,23 @@ dependencies = [
[[package]]
name = "accesskit_windows"
-version = "0.24.1"
+version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81"
+checksum = "70a042b62c9c05bf7b616f015515c17d2813f3ba89978d6f4fc369735d60700a"
dependencies = [
"accesskit",
"accesskit_consumer",
"hashbrown 0.15.2",
- "paste",
"static_assertions",
- "windows 0.58.0",
- "windows-core 0.58.0",
+ "windows 0.61.1",
+ "windows-core 0.61.0",
]
[[package]]
name = "accesskit_winit"
-version = "0.23.1"
+version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879"
+checksum = "5c1f0d3d13113d8857542a4f8d1a1c24d1dc1527b77aee8426127f4901588708"
dependencies = [
"accesskit",
"accesskit_macos",
@@ -201,6 +199,15 @@ dependencies = [
"thiserror 1.0.69",
]
+[[package]]
+name = "android-build"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9994787facbc3375d2b510024117d11fa98087be537ac878033892193bbb33d2"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
[[package]]
name = "android-properties"
version = "0.2.2"
@@ -363,6 +370,24 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
+[[package]]
+name = "ashpd"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df"
+dependencies = [
+ "async-fs",
+ "async-net",
+ "enumflags2",
+ "futures-channel",
+ "futures-util",
+ "rand 0.9.1",
+ "serde",
+ "serde_repr",
+ "url",
+ "zbus",
+]
+
[[package]]
name = "async-broadcast"
version = "0.7.2"
@@ -441,6 +466,17 @@ dependencies = [
"pin-project-lite",
]
+[[package]]
+name = "async-net"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7"
+dependencies = [
+ "async-io",
+ "blocking",
+ "futures-lite",
+]
+
[[package]]
name = "async-process"
version = "2.3.0"
@@ -543,9 +579,9 @@ checksum = "41e67cd8309bbd06cd603a9e693a784ac2e5d1e955f11286e355089fcab3047c"
[[package]]
name = "atspi"
-version = "0.22.0"
+version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be534b16650e35237bb1ed189ba2aab86ce65e88cc84c66f4935ba38575cecbf"
+checksum = "c83247582e7508838caf5f316c00791eee0e15c0bf743e6880585b867e16815c"
dependencies = [
"atspi-common",
"atspi-connection",
@@ -554,9 +590,9 @@ dependencies = [
[[package]]
name = "atspi-common"
-version = "0.6.0"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1909ed2dc01d0a17505d89311d192518507e8a056a48148e3598fef5e7bb6ba7"
+checksum = "33dfc05e7cdf90988a197803bf24f5788f94f7c94a69efa95683e8ffe76cfdfb"
dependencies = [
"enumflags2",
"serde",
@@ -570,9 +606,9 @@ dependencies = [
[[package]]
name = "atspi-connection"
-version = "0.6.0"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "430c5960624a4baaa511c9c0fcc2218e3b58f5dbcc47e6190cafee344b873333"
+checksum = "4193d51303d8332304056ae0004714256b46b6635a5c556109b319c0d3784938"
dependencies = [
"atspi-common",
"atspi-proxies",
@@ -582,14 +618,13 @@ dependencies = [
[[package]]
name = "atspi-proxies"
-version = "0.6.0"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5e6c5de3e524cf967569722446bcd458d5032348554d9a17d7d72b041ab7496"
+checksum = "d2eebcb9e7e76f26d0bcfd6f0295e1cd1e6f33bedbc5698a971db8dc43d7751c"
dependencies = [
"atspi-common",
"serde",
"zbus",
- "zvariant",
]
[[package]]
@@ -722,21 +757,6 @@ version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2"
-[[package]]
-name = "block"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
-
-[[package]]
-name = "block-buffer"
-version = "0.10.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
-dependencies = [
- "generic-array",
-]
-
[[package]]
name = "block2"
version = "0.5.1"
@@ -1044,36 +1064,6 @@ version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cbd0f76e066e64fdc5631e3bb46381254deab9ef1158292f27c8c57e3bf3fe59"
-[[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"
@@ -1132,14 +1122,10 @@ dependencies = [
"gstreamer-rtsp",
"gstreamer-rtsp-server",
"gstreamer-video",
- "http 0.1.0",
"ipnetwork",
"log",
- "m3u8-rs",
"mdns-sd",
"pnet_datalink",
- "quickcheck",
- "quickcheck_macros",
"slint",
"tokio",
"tokio-stream",
@@ -1220,9 +1206,9 @@ dependencies = [
[[package]]
name = "core-foundation"
-version = "0.10.0"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63"
+checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
dependencies = [
"core-foundation-sys",
"libc",
@@ -1254,25 +1240,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
dependencies = [
"bitflags 2.9.0",
- "core-foundation 0.10.0",
+ "core-foundation 0.10.1",
"core-graphics-types 0.2.0",
"foreign-types",
"libc",
]
-[[package]]
-name = "core-graphics-helmer-fork"
-version = "0.24.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32eb7c354ae9f6d437a6039099ce7ecd049337a8109b23d73e48e8ffba8e9cd5"
-dependencies = [
- "bitflags 2.9.0",
- "core-foundation 0.9.4",
- "core-graphics-types 0.1.3",
- "foreign-types",
- "libc",
-]
-
[[package]]
name = "core-graphics-types"
version = "0.1.3"
@@ -1291,18 +1264,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
dependencies = [
"bitflags 2.9.0",
- "core-foundation 0.10.0",
+ "core-foundation 0.10.1",
"libc",
]
[[package]]
name = "core-text"
-version = "20.1.0"
+version = "21.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9d2790b5c08465d49f8dc05c8bcae9fea467855947db39b0f8145c091aaced5"
+checksum = "a593227b66cbd4007b2a050dfdd9e1d1318311409c8d600dc82ba1b15ca9c130"
dependencies = [
- "core-foundation 0.9.4",
- "core-graphics 0.23.2",
+ "core-foundation 0.10.1",
+ "core-graphics 0.24.0",
"foreign-types",
"libc",
]
@@ -1372,15 +1345,6 @@ dependencies = [
"syn 2.0.101",
]
-[[package]]
-name = "cpufeatures"
-version = "0.2.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
-dependencies = [
- "libc",
-]
-
[[package]]
name = "crc32fast"
version = "1.4.2"
@@ -1436,32 +1400,12 @@ version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929"
-[[package]]
-name = "crypto-common"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
-dependencies = [
- "generic-array",
- "typenum",
-]
-
[[package]]
name = "ctor-lite"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f791803201ab277ace03903de1594460708d2d54df6053f2d9e82f592b19e3b"
-[[package]]
-name = "ctrlc"
-version = "3.4.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "697b5419f348fd5ae2478e8018cb016c00a5881c7f46c717de98ffd135a5651c"
-dependencies = [
- "nix 0.29.0",
- "windows-sys 0.59.0",
-]
-
[[package]]
name = "cursor-icon"
version = "1.1.0"
@@ -1474,17 +1418,6 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a"
-[[package]]
-name = "dbus"
-version = "0.9.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b"
-dependencies = [
- "libc",
- "libdbus-sys",
- "winapi",
-]
-
[[package]]
name = "derive_more"
version = "2.0.1"
@@ -1517,16 +1450,6 @@ dependencies = [
"syn 2.0.101",
]
-[[package]]
-name = "digest"
-version = "0.10.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
-dependencies = [
- "block-buffer",
- "crypto-common",
-]
-
[[package]]
name = "dispatch"
version = "0.2.0"
@@ -1672,16 +1595,6 @@ dependencies = [
"regex",
]
-[[package]]
-name = "env_logger"
-version = "0.8.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
-dependencies = [
- "log",
- "regex",
-]
-
[[package]]
name = "env_logger"
version = "0.11.8"
@@ -1790,9 +1703,9 @@ dependencies = [
[[package]]
name = "femtovg"
-version = "0.12.0"
+version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9bec3fb78abd18f7bbbde01f22f467c47c5a9c043e791802f82da0cf16066d1"
+checksum = "ffdf29af13b81d7562ccd57624242b2ed56edc2c83dad25f13bd74d87e7fa8d9"
dependencies = [
"bitflags 2.9.0",
"bytemuck",
@@ -2125,16 +2038,6 @@ dependencies = [
"system-deps 6.2.2",
]
-[[package]]
-name = "generic-array"
-version = "0.14.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
-dependencies = [
- "typenum",
- "version_check",
-]
-
[[package]]
name = "gethostname"
version = "0.4.3"
@@ -2466,16 +2369,6 @@ dependencies = [
"system-deps 7.0.3",
]
-[[package]]
-name = "gst-plugin-version-helper"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e5e874f1660252fd2ec81c602066df3633b3a6fcbe2b196f7f93c27cf069b2a"
-dependencies = [
- "chrono",
- "toml_edit 0.22.25",
-]
-
[[package]]
name = "gstreamer"
version = "0.23.5"
@@ -2958,38 +2851,15 @@ version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-[[package]]
-name = "http"
-version = "0.1.0"
-dependencies = [
- "ureq",
-]
-
-[[package]]
-name = "http"
-version = "1.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
-dependencies = [
- "bytes",
- "fnv",
- "itoa",
-]
-
-[[package]]
-name = "httparse"
-version = "1.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
-
[[package]]
name = "i-slint-backend-android-activity"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41362c0585c71180f42a2f3f9c072b9b6d0e96875d981e5d2260febf8af4a128"
+checksum = "d5deff9cd4f5cd38d8df7e78e8f54ba436fb4d6e398573b61c51b6fe52f7f67d"
dependencies = [
"android-activity 0.5.2",
"android-activity 0.6.0",
+ "android-build",
"i-slint-core",
"i-slint-renderer-skia",
"jni",
@@ -2999,9 +2869,9 @@ dependencies = [
[[package]]
name = "i-slint-backend-linuxkms"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18c3e06854468e614d43e747bbc8d3ce9a44eec6a9e8312ef16d4890da97fcc8"
+checksum = "836f600e0d24264f927d0b868c42a30fbd6c1a16bd807a51e7132aba5ef5bca6"
dependencies = [
"bytemuck",
"calloop 0.14.2",
@@ -3013,16 +2883,16 @@ dependencies = [
"i-slint-renderer-femtovg",
"input",
"memmap2",
- "nix 0.29.0",
+ "nix 0.30.1",
"raw-window-handle",
"xkbcommon",
]
[[package]]
name = "i-slint-backend-qt"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "354fcbbc568076e6ba1571fc60ef1d1a275a01126435531bba321b4ace1c2cd0"
+checksum = "0482606395bc733e485ecd24c84c1073df7f61a8cc626d0dbf604ed5c575e732"
dependencies = [
"const-field-offset",
"cpp",
@@ -3039,9 +2909,9 @@ dependencies = [
[[package]]
name = "i-slint-backend-selector"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "65058bf40640e94529bb27c4121e237d2565aa1883721806caeaa1509cc326a3"
+checksum = "891b24f1323ea2f8791667b960620532d95a76fd9008ac67d2826e1153889978"
dependencies = [
"cfg-if",
"i-slint-backend-linuxkms",
@@ -3054,9 +2924,9 @@ dependencies = [
[[package]]
name = "i-slint-backend-winit"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "249a3416f38884de18d0bb0e1589cd95ea10b1b2b8f7ea38e06e7aac320f9edf"
+checksum = "f2b87c1fb7bcdd6cf0c93dfd2de2c33b0c21eca625ec8aafee714edac5bd9f2b"
dependencies = [
"accesskit",
"accesskit_winit",
@@ -3092,9 +2962,9 @@ dependencies = [
[[package]]
name = "i-slint-common"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "15c5f2411fd0cd44b39f6aff036c6fbcbcc3eecd119a90d5908a90075d256664"
+checksum = "748b5c0e292b2263fbd5b2855df207f4f6e068382668c55526037ac0ff5ba038"
dependencies = [
"cfg-if",
"derive_more",
@@ -3105,9 +2975,9 @@ dependencies = [
[[package]]
name = "i-slint-compiler"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "becea2773938b8299809cb1f1f0350295bc98e105fe175c53686ba063d7b2b9d"
+checksum = "dae46edba3b6875f66765d4074ecf4d65b8cbf1e7a0f2b4581e23e72bd8f1157"
dependencies = [
"by_address",
"codemap",
@@ -3135,9 +3005,9 @@ dependencies = [
[[package]]
name = "i-slint-core"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "846dca8f8ef03821df932755381d1a29c5be3981eb269c5b235aba5012665a5a"
+checksum = "13599d9d81dba95796c9bf7c9f9f179bf955cdf240f886a442eb460f57b17ba1"
dependencies = [
"auto_enums",
"bitflags 2.9.0",
@@ -3183,9 +3053,9 @@ dependencies = [
[[package]]
name = "i-slint-core-macros"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31573d7b7000d377ef6b64621c22a72ac39213899bd0569c05d748e6cb994aee"
+checksum = "2633fb6f59e2184db69c0b3323ad8c324b169aa8d24999a67f2b5cc2c2324b8e"
dependencies = [
"quote",
"serde_json",
@@ -3194,13 +3064,13 @@ dependencies = [
[[package]]
name = "i-slint-renderer-femtovg"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "620dd18c88c30e2423831a65be881a4a557b5b84d1700fbdff719849b36430d4"
+checksum = "e63ad7c680b0d205a2bc19f3974fcb9bc567ab786dbc34553e30aa8b1dffb9f9"
dependencies = [
"cfg-if",
"const-field-offset",
- "core-foundation 0.9.4",
+ "core-foundation 0.10.1",
"core-text",
"derive_more",
"dwrote",
@@ -3224,9 +3094,9 @@ dependencies = [
[[package]]
name = "i-slint-renderer-skia"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0115066b82729a225d28d015318f33ad2ae09f32942cb5046544a7f0cefdee3"
+checksum = "e63a3aa935a803f1e59e1fb04bc49f93bc23a0612cd49afa7dc9533613e992aa"
dependencies = [
"bytemuck",
"cfg-if",
@@ -3474,15 +3344,6 @@ version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408"
-[[package]]
-name = "immutable-chunkmap"
-version = "2.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578"
-dependencies = [
- "arrayvec",
-]
-
[[package]]
name = "indexmap"
version = "2.9.0"
@@ -3725,15 +3586,6 @@ version = "0.2.172"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
-[[package]]
-name = "libdbus-sys"
-version = "0.2.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72"
-dependencies = [
- "pkg-config",
-]
-
[[package]]
name = "libfuzzer-sys"
version = "0.4.9"
@@ -3958,25 +3810,6 @@ dependencies = [
"num-traits",
]
-[[package]]
-name = "m3u8-rs"
-version = "6.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f03cd3335fb5f2447755d45cda9c70f76013626a9db44374973791b0926a86c3"
-dependencies = [
- "chrono",
- "nom",
-]
-
-[[package]]
-name = "malloc_buf"
-version = "0.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
-dependencies = [
- "libc",
-]
-
[[package]]
name = "maybe-rayon"
version = "0.1.1"
@@ -4161,9 +3994,9 @@ dependencies = [
[[package]]
name = "nix"
-version = "0.29.0"
+version = "0.30.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
+checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
dependencies = [
"bitflags 2.9.0",
"cfg-if",
@@ -4194,15 +4027,6 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8"
-[[package]]
-name = "ntapi"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
-dependencies = [
- "winapi",
-]
-
[[package]]
name = "num-bigint"
version = "0.4.6"
@@ -4275,27 +4099,6 @@ dependencies = [
"syn 2.0.101",
]
-[[package]]
-name = "objc"
-version = "0.2.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
-dependencies = [
- "malloc_buf",
- "objc_exception",
-]
-
-[[package]]
-name = "objc-foundation"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
-dependencies = [
- "block",
- "objc",
- "objc_id",
-]
-
[[package]]
name = "objc-sys"
version = "0.3.5"
@@ -4629,24 +4432,6 @@ dependencies = [
"objc2-foundation 0.2.2",
]
-[[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"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
-dependencies = [
- "objc",
-]
-
[[package]]
name = "object"
version = "0.36.7"
@@ -4734,29 +4519,6 @@ version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
-[[package]]
-name = "parking_lot"
-version = "0.12.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
-dependencies = [
- "lock_api",
- "parking_lot_core",
-]
-
-[[package]]
-name = "parking_lot_core"
-version = "0.9.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
-dependencies = [
- "cfg-if",
- "libc",
- "redox_syscall 0.5.11",
- "smallvec",
- "windows-targets 0.52.6",
-]
-
[[package]]
name = "paste"
version = "1.0.15"
@@ -5077,38 +4839,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956"
dependencies = [
"memchr",
- "serde",
]
[[package]]
name = "quick-xml"
-version = "0.37.5"
+version = "0.36.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb"
+checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe"
dependencies = [
"memchr",
+ "serde",
]
[[package]]
-name = "quickcheck"
-version = "1.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
-dependencies = [
- "env_logger 0.8.4",
- "log",
- "rand 0.8.5",
-]
-
-[[package]]
-name = "quickcheck_macros"
-version = "1.0.0"
+name = "quick-xml"
+version = "0.37.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b22a693222d716a9587786f37ac3f6b4faedb5b80c23914e7303ff5a1d8016e9"
+checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb"
dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
+ "memchr",
]
[[package]]
@@ -5280,7 +5029,7 @@ dependencies = [
"anyhow",
"clap",
"common",
- "env_logger 0.11.8",
+ "env_logger",
"fcast-lib",
"futures",
"gethostname 1.0.1",
@@ -5479,42 +5228,6 @@ dependencies = [
"winapi-util",
]
-[[package]]
-name = "scap"
-version = "0.0.8"
-dependencies = [
- "anyhow",
- "cocoa",
- "core-graphics-helmer-fork",
- "dbus",
- "libc",
- "log",
- "objc",
- "pipewire",
- "rand 0.9.1",
- "screencapturekit",
- "screencapturekit-sys",
- "sysinfo",
- "tao-core-video-sys",
- "windows 0.58.0",
- "windows-capture",
- "x11",
- "xcb",
-]
-
-[[package]]
-name = "scap-gstreamer"
-version = "0.1.0"
-dependencies = [
- "crossbeam-channel",
- "ctrlc",
- "gst-plugin-version-helper",
- "gstreamer",
- "gstreamer-base",
- "gstreamer-video",
- "scap",
-]
-
[[package]]
name = "scoped-tls"
version = "1.0.1"
@@ -5533,29 +5246,6 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
-[[package]]
-name = "screencapturekit"
-version = "0.2.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a5eeeb57ac94960cfe5ff4c402be6585ae4c8d29a2cf41b276048c2e849d64e"
-dependencies = [
- "screencapturekit-sys",
-]
-
-[[package]]
-name = "screencapturekit-sys"
-version = "0.2.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22411b57f7d49e7fe08025198813ee6fd65e1ee5eff4ebc7880c12c82bde4c60"
-dependencies = [
- "block",
- "dispatch",
- "objc",
- "objc-foundation",
- "objc_id",
- "once_cell",
-]
-
[[package]]
name = "sctk-adwaita"
version = "0.10.1"
@@ -5580,17 +5270,21 @@ name = "sender"
version = "0.1.0"
dependencies = [
"anyhow",
+ "ashpd",
"common",
"crossbeam-channel",
- "env_logger 0.11.8",
+ "env_logger",
"fcast-lib",
"flume",
"gstreamer",
"log",
"mdns-sd",
- "scap-gstreamer",
+ "pipewire",
"slint",
"slint-build",
+ "tokio",
+ "x11",
+ "xcb",
]
[[package]]
@@ -5645,17 +5339,6 @@ dependencies = [
"serde",
]
-[[package]]
-name = "sha1"
-version = "0.10.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
-dependencies = [
- "cfg-if",
- "cpufeatures",
- "digest",
-]
-
[[package]]
name = "shlex"
version = "1.3.0"
@@ -5703,9 +5386,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
[[package]]
name = "skia-bindings"
-version = "0.84.0"
+version = "0.86.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b612a544c0cc0da82271eac1c40b6b055fe3c5aa20bb7b3922f830c777d9aff0"
+checksum = "a2bf215f640b53293844d441e93448b437ca4937595f60e3317fbb03d7ac6783"
dependencies = [
"bindgen 0.71.1",
"cc",
@@ -5720,9 +5403,9 @@ dependencies = [
[[package]]
name = "skia-safe"
-version = "0.84.0"
+version = "0.86.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2629d473f8bdbe35fc227d80d8efe9a7db538a409be8beb19e5cd3153d10b0ef"
+checksum = "e372258f52414e04de007326fa497581617c9fa872a3225dca5e42212723c426"
dependencies = [
"bitflags 2.9.0",
"lazy_static",
@@ -5741,9 +5424,9 @@ dependencies = [
[[package]]
name = "slint"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be6197c948ea3b1ae0c1a42a746ad84539135fb11e5c66094d98a222154edd51"
+checksum = "fad0f31b974d0d69db787cc4f8b2965806f4991b0b47bfcb40538ae714fd9448"
dependencies = [
"const-field-offset",
"i-slint-backend-android-activity",
@@ -5762,9 +5445,9 @@ dependencies = [
[[package]]
name = "slint-build"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11ad3d6c8d620bfbb474ee301ebf99ba9dab3d2f86c0f8d75e52d403bb08acd6"
+checksum = "cb7076e05474941b35df7e2d03c393a3c3b4e4855dd93f0280451002df07e474"
dependencies = [
"derive_more",
"i-slint-compiler",
@@ -5774,9 +5457,9 @@ dependencies = [
[[package]]
name = "slint-macros"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f63ac3ed6d216651bb679d5905dafe8158965db591aa1996d1d5a5c95ebf5e51"
+checksum = "66b5db8df61e3766111c8e42a957af8502b2fc1814f87eacc3a19252ae964a5c"
dependencies = [
"i-slint-compiler",
"proc-macro2",
@@ -5979,7 +5662,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
"proc-macro2",
- "quote",
"unicode-ident",
]
@@ -6014,21 +5696,6 @@ dependencies = [
"libc",
]
-[[package]]
-name = "sysinfo"
-version = "0.30.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a5b4ddaee55fb2bea2bf0e5000747e5f5c0de765e5a5ff87f4cd106439f4bb3"
-dependencies = [
- "cfg-if",
- "core-foundation-sys",
- "libc",
- "ntapi",
- "once_cell",
- "rayon",
- "windows 0.52.0",
-]
-
[[package]]
name = "system-deps"
version = "6.2.2"
@@ -6055,18 +5722,6 @@ dependencies = [
"version-compare",
]
-[[package]]
-name = "tao-core-video-sys"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "271450eb289cb4d8d0720c6ce70c72c8c858c93dd61fc625881616752e6b98f6"
-dependencies = [
- "cfg-if",
- "core-foundation-sys",
- "libc",
- "objc",
-]
-
[[package]]
name = "tar"
version = "0.4.44"
@@ -6106,23 +5761,6 @@ dependencies = [
"winapi-util",
]
-[[package]]
-name = "testkit"
-version = "0.1.0"
-dependencies = [
- "anyhow",
- "chrono",
- "common",
- "crossbeam-channel",
- "env_logger 0.11.8",
- "fcast-lib",
- "flume",
- "log",
- "mdns-sd",
- "slint",
- "slint-build",
-]
-
[[package]]
name = "text-size"
version = "1.1.1"
@@ -6401,12 +6039,6 @@ dependencies = [
"serde",
]
-[[package]]
-name = "typenum"
-version = "1.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
-
[[package]]
name = "udev"
version = "0.9.3"
@@ -6496,31 +6128,6 @@ version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
-[[package]]
-name = "ureq"
-version = "3.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7a3e9af6113ecd57b8c63d3cd76a385b2e3881365f1f489e54f49801d0c83ea"
-dependencies = [
- "base64",
- "log",
- "percent-encoding",
- "ureq-proto",
- "utf-8",
-]
-
-[[package]]
-name = "ureq-proto"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fadf18427d33828c311234884b7ba2afb57143e6e7e69fda7ee883b624661e36"
-dependencies = [
- "base64",
- "http 1.3.1",
- "httparse",
- "log",
-]
-
[[package]]
name = "url"
version = "2.5.4"
@@ -6530,6 +6137,7 @@ dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
+ "serde",
]
[[package]]
@@ -6559,12 +6167,6 @@ dependencies = [
"xmlwriter",
]
-[[package]]
-name = "utf-8"
-version = "0.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
-
[[package]]
name = "utf16_iter"
version = "1.0.5"
@@ -6608,9 +6210,9 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
name = "vtable"
-version = "0.2.1"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20b14a049c8d5d1ff811a00f65ac1454335487ed769a943c7bad89ead3573335"
+checksum = "753be81c38dff787d177b5939af1fa16f72f0d0d21a6b7d74ae56e29cd26f2a6"
dependencies = [
"const-field-offset",
"portable-atomic",
@@ -6620,9 +6222,9 @@ dependencies = [
[[package]]
name = "vtable-macro"
-version = "0.2.1"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8502f961cf2f1359fed21a70f67c831ccb3ab9e4c0b4dd3ad40387fbe8875db"
+checksum = "8cfcf6171aa2b0f85718ca5888ca32f6edf61d1849f8e4b3786ad890e5b68f68"
dependencies = [
"proc-macro2",
"quote",
@@ -6891,26 +6493,6 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-[[package]]
-name = "windows"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
-dependencies = [
- "windows-core 0.52.0",
- "windows-targets 0.52.6",
-]
-
-[[package]]
-name = "windows"
-version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6"
-dependencies = [
- "windows-core 0.58.0",
- "windows-targets 0.52.6",
-]
-
[[package]]
name = "windows"
version = "0.60.0"
@@ -6937,21 +6519,6 @@ dependencies = [
"windows-numerics 0.2.0",
]
-[[package]]
-name = "windows-capture"
-version = "1.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59d10b4be8b907c7055bc7270dd68d2b920978ffacc1599dcb563a79f0e68d16"
-dependencies = [
- "clap",
- "ctrlc",
- "parking_lot",
- "rayon",
- "thiserror 2.0.12",
- "windows 0.61.1",
- "windows-future 0.2.0",
-]
-
[[package]]
name = "windows-collections"
version = "0.1.1"
@@ -6970,28 +6537,6 @@ dependencies = [
"windows-core 0.61.0",
]
-[[package]]
-name = "windows-core"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
-dependencies = [
- "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-result 0.2.0",
- "windows-strings 0.1.0",
- "windows-targets 0.52.6",
-]
-
[[package]]
name = "windows-core"
version = "0.60.1"
@@ -6999,9 +6544,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca21a92a9cae9bf4ccae5cf8368dce0837100ddf6e6d57936749e85f152f6247"
dependencies = [
"windows-implement 0.59.0",
- "windows-interface 0.59.1",
+ "windows-interface",
"windows-link",
- "windows-result 0.3.2",
+ "windows-result",
"windows-strings 0.3.1",
]
@@ -7012,9 +6557,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
dependencies = [
"windows-implement 0.60.0",
- "windows-interface 0.59.1",
+ "windows-interface",
"windows-link",
- "windows-result 0.3.2",
+ "windows-result",
"windows-strings 0.4.0",
]
@@ -7038,17 +6583,6 @@ dependencies = [
"windows-link",
]
-[[package]]
-name = "windows-implement"
-version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.101",
-]
-
[[package]]
name = "windows-implement"
version = "0.59.0"
@@ -7071,17 +6605,6 @@ dependencies = [
"syn 2.0.101",
]
-[[package]]
-name = "windows-interface"
-version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.101",
-]
-
[[package]]
name = "windows-interface"
version = "0.59.1"
@@ -7119,15 +6642,6 @@ dependencies = [
"windows-link",
]
-[[package]]
-name = "windows-result"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
-dependencies = [
- "windows-targets 0.52.6",
-]
-
[[package]]
name = "windows-result"
version = "0.3.2"
@@ -7137,16 +6651,6 @@ dependencies = [
"windows-link",
]
-[[package]]
-name = "windows-strings"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
-dependencies = [
- "windows-result 0.2.0",
- "windows-targets 0.52.6",
-]
-
[[package]]
name = "windows-strings"
version = "0.3.1"
@@ -7559,16 +7063,6 @@ version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61"
-[[package]]
-name = "xdg-home"
-version = "1.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6"
-dependencies = [
- "libc",
- "windows-sys 0.59.0",
-]
-
[[package]]
name = "xkbcommon"
version = "0.8.0"
@@ -7646,13 +7140,12 @@ dependencies = [
[[package]]
name = "zbus"
-version = "4.4.0"
+version = "5.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725"
+checksum = "d3a7c7cee313d044fca3f48fa782cb750c79e4ca76ba7bc7718cd4024cdf6f68"
dependencies = [
"async-broadcast",
"async-executor",
- "async-fs",
"async-io",
"async-lock",
"async-process",
@@ -7663,20 +7156,16 @@ dependencies = [
"enumflags2",
"event-listener",
"futures-core",
- "futures-sink",
- "futures-util",
+ "futures-lite",
"hex",
- "nix 0.29.0",
+ "nix 0.30.1",
"ordered-stream",
- "rand 0.8.5",
"serde",
"serde_repr",
- "sha1",
- "static_assertions",
"tracing",
"uds_windows",
- "windows-sys 0.52.0",
- "xdg-home",
+ "windows-sys 0.59.0",
+ "winnow 0.7.7",
"zbus_macros",
"zbus_names",
"zvariant",
@@ -7684,9 +7173,9 @@ dependencies = [
[[package]]
name = "zbus-lockstep"
-version = "0.4.4"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ca2c5dceb099bddaade154055c926bb8ae507a18756ba1d8963fd7b51d8ed1d"
+checksum = "a22426b1bc2aca91de97772506f0655fa373448e6010d79d5d5880915c388409"
dependencies = [
"zbus_xml",
"zvariant",
@@ -7694,9 +7183,9 @@ dependencies = [
[[package]]
name = "zbus-lockstep-macros"
-version = "0.4.4"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce"
+checksum = "100ffec29ed51859052f4563061abe35557acb56ba574510571f8398efc70a29"
dependencies = [
"proc-macro2",
"quote",
@@ -7708,35 +7197,38 @@ dependencies = [
[[package]]
name = "zbus_macros"
-version = "4.4.0"
+version = "5.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e"
+checksum = "a17e7e5eec1550f747e71a058df81a9a83813ba0f6a95f39c4e218bdc7ba366a"
dependencies = [
"proc-macro-crate 3.3.0",
"proc-macro2",
"quote",
"syn 2.0.101",
+ "zbus_names",
+ "zvariant",
"zvariant_utils",
]
[[package]]
name = "zbus_names"
-version = "3.0.0"
+version = "4.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c"
+checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97"
dependencies = [
"serde",
"static_assertions",
+ "winnow 0.7.7",
"zvariant",
]
[[package]]
name = "zbus_xml"
-version = "4.0.0"
+version = "5.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab3f374552b954f6abb4bd6ce979e6c9b38fb9d0cd7cc68a7d796e70c9f3a233"
+checksum = "589e9a02bfafb9754bb2340a9e3b38f389772684c63d9637e76b1870377bec29"
dependencies = [
- "quick-xml 0.30.0",
+ "quick-xml 0.36.2",
"serde",
"static_assertions",
"zbus_names",
@@ -7852,22 +7344,24 @@ dependencies = [
[[package]]
name = "zvariant"
-version = "4.2.0"
+version = "5.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe"
+checksum = "9d30786f75e393ee63a21de4f9074d4c038d52c5b1bb4471f955db249f9dffb1"
dependencies = [
"endi",
"enumflags2",
"serde",
- "static_assertions",
+ "url",
+ "winnow 0.7.7",
"zvariant_derive",
+ "zvariant_utils",
]
[[package]]
name = "zvariant_derive"
-version = "4.2.0"
+version = "5.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449"
+checksum = "75fda702cd42d735ccd48117b1630432219c0e9616bf6cb0f8350844ee4d9580"
dependencies = [
"proc-macro-crate 3.3.0",
"proc-macro2",
@@ -7878,11 +7372,14 @@ dependencies = [
[[package]]
name = "zvariant_utils"
-version = "2.1.0"
+version = "3.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340"
+checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34"
dependencies = [
"proc-macro2",
"quote",
+ "serde",
+ "static_assertions",
"syn 2.0.101",
+ "winnow 0.7.7",
]
diff --git a/Cargo.toml b/Cargo.toml
index d16f895..cec8772 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[workspace]
resolver = "2"
-members = [ "fcast-lib", "common", "receiver", "sender", "scap", "scap-gstreamer", "http", "android-sender", "testkit"]
+members = [ "fcast-lib", "common", "receiver", "sender", "android-sender"]
[workspace.dependencies]
gst-video = { package = "gstreamer-video", version = "0.23.5" }
@@ -13,8 +13,8 @@ env_logger = "0.11.6"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
rand = "0.9.0"
-slint = "1.11.0"
-slint-build = "1.11.0"
+slint = "1.12.0"
+slint-build = "1.12.0"
anyhow = "1.0.98"
futures = "0.3"
tokio-stream = "0.1.17"
diff --git a/README.md b/README.md
index 64d9543..3503757 100644
--- a/README.md
+++ b/README.md
@@ -14,12 +14,14 @@ The current platform support matrix looks like this:
#### Desktop
-| |Linux (Wayland) |Linux (X11) |Windows |MacOS |
-|------------|-----------------|-------------|---------|----------|
-|OMSender |Yes |Yes |Yes |No |
-|OMReceiver |Yes |Yes |Yes |Untested |
+| |Linux (Wayland) |Linux (X11) |Windows |MacOS |
+|------------|-----------------|-------------|--------------|----------|
+|OMSender |Yes |Yes |~~Yes~~ No^1 |No^1 |
+|OMReceiver |Yes |Yes |Yes |Untested |
-OMSender can cast to other FCast receivers as well.
+1: Support is planned
+
+~~OMSender can cast to other FCast receivers as well.~~
OMReceiver is also an FCast receiver.
diff --git a/android-sender/build.rs b/android-sender/build.rs
index 7ad2cb6..cdb35a4 100644
--- a/android-sender/build.rs
+++ b/android-sender/build.rs
@@ -77,7 +77,6 @@ fn main() {
cargo_link!("gstaudio-1.0");
cargo_link!("gstapp-1.0");
cargo_link!("gstrtp-1.0");
- cargo_link!("gstwebrtc-1.0");
const DEFAULT_CLANG_VERSION: &str = "20";
let clang_version =
diff --git a/assets/icons/reload.svg b/assets/icons/reload.svg
new file mode 100644
index 0000000..a898623
--- /dev/null
+++ b/assets/icons/reload.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/common/Cargo.toml b/common/Cargo.toml
index 96c5261..86501fa 100644
--- a/common/Cargo.toml
+++ b/common/Cargo.toml
@@ -18,12 +18,10 @@ gst-rtsp = { package = "gstreamer-rtsp", version = "0.23.5", optional = true}
gst-rtsp-server = { package = "gstreamer-rtsp-server", version = "0.23.5", optional = true}
gio = { version = "0.20.9", optional = true }
-m3u8-rs = { version = "6.0.0", optional = true }
futures = { workspace = true, optional = true }
tokio-stream = { workspace = true, optional = true }
mdns-sd = { workspace = true, optional = true }
-http = { path = "../http", optional = true }
fcast-lib = { path = "../fcast-lib", optional = true }
crossbeam-channel = { version = "0.5.15", optional = true }
@@ -42,11 +40,5 @@ glutin_glx_sys = { version = "0.6.1", optional = true }
[features]
video = ["gst", "gst-app", "gst-video", "gst-gl", "gst-gl-egl", "gst-gl-x11", "glutin_egl_sys", "glutin_glx_sys",]
-sender = ["gst", "gst-video", "gio", "m3u8-rs", "gst-pbutils",
- "http", "crossbeam-channel", "gst-app", "futures",
- "fcast-lib", "tokio-stream", "mdns-sd", "gst-gl-egl", "gst-gl-x11",
- "glutin_egl_sys", "glutin_glx_sys", "gst-rtsp", "gst-rtsp-server"]
-
-[dev-dependencies]
-quickcheck = "1"
-quickcheck_macros = "1"
\ No newline at end of file
+sender = ["gst", "gst-video", "gio", "gst-pbutils", "crossbeam-channel", "gst-app", "futures",
+ "fcast-lib", "tokio-stream", "mdns-sd", "gst-rtsp", "gst-rtsp-server",]
\ No newline at end of file
diff --git a/common/src/sender/audio.rs b/common/src/sender/audio.rs
new file mode 100644
index 0000000..7412a22
--- /dev/null
+++ b/common/src/sender/audio.rs
@@ -0,0 +1,29 @@
+// TODO: try pipewiredeviceprovider and use pulsedeviceprovider as fallback
+// TODO: monitor for changes
+#[cfg(target_os = "linux")]
+pub fn get_pulse_dev() -> anyhow::Result {
+ use anyhow::bail;
+ use gst::prelude::*;
+
+ let provider = gst::DeviceProviderFactory::by_name("pulsedeviceprovider").ok_or(
+ anyhow::anyhow!("Could not find pulse device provider factory"),
+ )?;
+
+ provider.start()?;
+ let devices = provider.devices();
+ provider.stop();
+
+ for device in devices {
+ if !device.has_classes("Audio/Sink") {
+ continue;
+ }
+ let Some(props) = device.properties() else {
+ continue;
+ };
+ if props.get::("is-default") == Ok(true) {
+ return Ok(device);
+ }
+ }
+
+ bail!("No device found")
+}
diff --git a/common/src/sender/mod.rs b/common/src/sender/mod.rs
index 7a0e7b3..cc45a59 100644
--- a/common/src/sender/mod.rs
+++ b/common/src/sender/mod.rs
@@ -1,3 +1,5 @@
+#[cfg(target_os = "linux")]
+pub mod audio;
pub mod discovery;
pub mod pipeline;
pub mod session;
diff --git a/common/src/sender/pipeline.rs b/common/src/sender/pipeline.rs
index e6b0d42..9916b28 100644
--- a/common/src/sender/pipeline.rs
+++ b/common/src/sender/pipeline.rs
@@ -17,7 +17,7 @@
#[cfg(target_os = "android")]
use super::transmission::rtp::RtpSink;
-use super::transmission::{self, TransmissionSink, hls::HlsSink};
+use super::transmission::{self, TransmissionSink};
use anyhow::Result;
use fcast_lib::models::PlayMessage;
#[cfg(target_os = "android")]
@@ -28,6 +28,7 @@ use log::error;
#[cfg(target_os = "android")]
use std::future::Future;
use std::net::IpAddr;
+use std::str::FromStr;
pub use transmission::init;
@@ -37,13 +38,19 @@ pub enum Event {
Error,
}
+pub enum SourceConfig {
+ AudioVideo {
+ video: gst::Element,
+ audio: gst::Element,
+ },
+ Video(gst::Element),
+ Audio(gst::Element),
+}
+
#[cfg(not(target_os = "android"))]
pub struct Pipeline {
inner: gst::Pipeline,
- tx_sink: Option>,
- tee: gst::Element,
- preview_queue: gst::Element,
- preview_appsink: gst::Element,
+ tx_sink: Box,
}
#[cfg(target_os = "android")]
@@ -171,58 +178,69 @@ impl Pipeline {
})
}
+ fn setup_video_source(pipeline: &gst::Pipeline, src: gst::Element) -> Result {
+ // TODO: needed?
+ let videoflip = gst::ElementFactory::make("videoflip")
+ .property_from_str("video-direction", "auto")
+ .build()?;
+ let videorate = gst::ElementFactory::make("videorate")
+ .property("skip-to-first", true)
+ .build()?;
+ let capsfilter = gst::ElementFactory::make("capsfilter")
+ .property("caps", gst::Caps::from_str("video/x-raw,framerate=30/1")?)
+ .build()?;
+
+ // pipeline.add_many([&src, &videorate, &capsfilter])?;
+ // gst::Element::link_many([&src, &videorate, &capsfilter])?;
+
+ pipeline.add_many([&src, &videoflip, &videorate, &capsfilter])?;
+ gst::Element::link_many([&src, &videoflip, &videorate, &capsfilter])?;
+
+ Ok(capsfilter)
+ }
+
+ fn setup_audio_source(pipeline: &gst::Pipeline, src: gst::Element) -> Result {
+ let capsfilter = gst::ElementFactory::make("capsfilter")
+ .property(
+ "caps",
+ gst::Caps::from_str("audio/x-raw,channels=2,rate=48000")?,
+ )
+ .build()?;
+
+ pipeline.add_many([&src, &capsfilter])?;
+ gst::Element::link_many([&src, &capsfilter])?;
+
+ Ok(capsfilter)
+ }
+
#[cfg(not(target_os = "android"))]
- pub fn new(preview_appsink: gst::Element, mut on_event: E, on_sources: S) -> Result
+ pub fn new_rtsp(mut on_event: E, source: SourceConfig) -> Result
where
E: FnMut(Event) + Send + Clone + 'static,
- S: Fn(&[gst::glib::Value]) -> Option + Send + Sync + 'static,
{
- let scapsrc = gst::ElementFactory::make("scapsrc")
- .property("perform-internal-preroll", true)
- .build()?;
- let tee = gst::ElementFactory::make("tee").build()?;
- let preview_queue = gst::ElementFactory::make("queue")
- .name("preview_queue")
- .property("max-size-time", 0u64)
- .property("max-size-buffers", 0u32)
- .property("max-size-bytes", 0u32)
- .property_from_str("leaky", "downstream")
- .property("silent", true) // Don't emit signals, can give better perf.
- .build()?;
+ use crate::sender::transmission::rtsp::RtspSink;
let pipeline = gst::Pipeline::new();
- let tx_sink = None::>;
-
- // https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3993
- scapsrc.static_pad("src").unwrap().add_probe(
- gst::PadProbeType::QUERY_UPSTREAM.union(gst::PadProbeType::PUSH),
- |_pad, info| match info.query_mut().map(|query| query.view_mut()) {
- Some(gst::QueryViewMut::Latency(latency)) => {
- let (_live, min, max) = latency.result();
- latency.set(false, min, max);
- gst::PadProbeReturn::Handled
- }
- _ => gst::PadProbeReturn::Pass,
+ let source = match source {
+ SourceConfig::AudioVideo { video, audio } => SourceConfig::AudioVideo {
+ video: Self::setup_video_source(&pipeline, video)?,
+ audio: Self::setup_audio_source(&pipeline, audio)?,
},
- );
-
- scapsrc.connect("select-source", false, on_sources);
-
- pipeline.add_many([&scapsrc, &tee, &preview_queue, &preview_appsink])?;
- gst::Element::link_many([&scapsrc, &tee])?;
- gst::Element::link_many([&preview_queue, &preview_appsink])?;
+ SourceConfig::Video(video) => {
+ SourceConfig::Video(Self::setup_video_source(&pipeline, video)?)
+ }
+ SourceConfig::Audio(audio) => {
+ SourceConfig::Audio(Self::setup_audio_source(&pipeline, audio)?)
+ }
+ };
- let tee_preview_pad = tee
- .request_pad_simple("src_%u")
- .map_or_else(|| Err(anyhow::anyhow!("`request_pad_simple()` failed")), Ok)?;
- let queue_preview_pad = preview_queue
- .static_pad("sink")
- .ok_or(anyhow::anyhow!("preview_queue is missing static sink pad"))?;
- tee_preview_pad.link(&queue_preview_pad)?;
+ let rtsp = RtspSink::new(&pipeline, source, 3000)?;
+ let p = Self {
+ inner: pipeline.clone(),
+ tx_sink: Box::new(rtsp),
+ };
- // Start the pipeline in background thread because `scapsrc` initialization will block until
- // the user selects the input source.
let _ = std::thread::spawn({
let bus = pipeline
.bus()
@@ -236,9 +254,11 @@ impl Pipeline {
debug!("Failed to upgrade pipeline before starting");
return;
};
- debug!("Starting pipeline");
+ debug!("Starting pipeline...");
if let Err(err) = pipeline.set_state(gst::State::Playing) {
error!("Failed to start pipeline: {err}");
+ } else {
+ debug!("Pipeline started");
}
}
@@ -278,20 +298,11 @@ impl Pipeline {
}
});
- Ok(Self {
- inner: pipeline,
- tx_sink,
- tee,
- preview_queue,
- preview_appsink,
- })
+ Ok(p)
}
pub fn playing(&mut self) -> Result<()> {
- match &mut self.tx_sink {
- Some(sink) => sink.playing(),
- None => Ok(()),
- }
+ self.tx_sink.playing()
}
#[cfg(target_os = "android")]
@@ -308,27 +319,7 @@ impl Pipeline {
#[cfg(not(target_os = "android"))]
pub fn shutdown(&mut self) -> Result<()> {
self.inner.set_state(gst::State::Null)?;
-
- self.preview_queue.unlink(&self.preview_appsink);
- self.inner.remove(&self.preview_appsink)?;
-
- if let Some(sink) = &mut self.tx_sink {
- sink.shutdown();
- }
-
- Ok(())
- }
-
- #[cfg(not(target_os = "android"))]
- pub fn add_hls_sink(&mut self, port: u16) -> Result<()> {
- let tee_pad = self
- .tee
- .request_pad_simple("src_%u")
- .ok_or(anyhow::anyhow!("`request_pad_simple()` failed"))?;
- let hls = HlsSink::new(&self.inner, tee_pad, port)?;
- self.tx_sink = Some(Box::new(hls));
-
- debug!("Added HLS sink");
+ self.tx_sink.shutdown();
Ok(())
}
@@ -348,20 +339,6 @@ impl Pipeline {
Ok(())
}
- #[cfg(not(target_os = "android"))]
- pub fn add_rtsp_sink(&mut self, port: u16) -> Result<()> {
- let tee_pad = self
- .tee
- .request_pad_simple("src_%u")
- .ok_or(anyhow::anyhow!("`request_pad_simple()` failed"))?;
- let rtsp = transmission::rtsp::RtspSink::new(tee_pad, &self.inner, port)?;
- self.tx_sink = Some(Box::new(rtsp));
-
- debug!("Added RTSP sink");
-
- Ok(())
- }
-
#[cfg(target_os = "android")]
pub fn add_rtp_sink(&mut self, port: u16, receiver_addr: IpAddr) -> Result<()> {
let appsrc_pad = self
@@ -376,26 +353,9 @@ impl Pipeline {
Ok(())
}
- pub fn remove_transmission_sink(&mut self) -> Result<()> {
- if let Some(sink) = &mut self.tx_sink {
- sink.shutdown();
- sink.unlink(&self.inner)?;
- }
-
- self.tx_sink = None;
-
- debug!("Removed transmission sink");
-
- Ok(())
- }
-
/// Get the message that should be sent to a receiver to consume the stream if a transmission
/// sink is present
pub fn get_play_msg(&self, addr: IpAddr) -> Option {
- if let Some(sink) = &self.tx_sink {
- sink.get_play_msg(addr)
- } else {
- None
- }
+ self.tx_sink.get_play_msg(addr)
}
}
diff --git a/common/src/sender/transmission/hls/fake_file_writer.rs b/common/src/sender/transmission/hls/fake_file_writer.rs
deleted file mode 100644
index a2ade82..0000000
--- a/common/src/sender/transmission/hls/fake_file_writer.rs
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright (C) 2025 Marcus L. Hanestad
-//
-// This file is part of OpenMirroring.
-//
-// OpenMirroring is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// OpenMirroring is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with OpenMirroring. If not, see .
-
-use crossbeam_channel::Sender;
-
-use gst::{glib, subclass::prelude::ObjectSubclassIsExt};
-
-pub enum Request {
- Delete,
- Add(Vec),
-}
-
-pub struct ChannelElement {
- pub location: String,
- pub request: Request,
-}
-
-mod imp {
- use std::cell::RefCell;
-
- use gio::subclass::prelude::*;
-
- use super::*;
-
- #[derive(Default)]
- pub struct FakeFileWriter {
- pub location: RefCell,
- pub data: RefCell>,
- pub tx: RefCell