diff --git a/Cargo.lock b/Cargo.lock index d7f2d10..4f68b60 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,9 +20,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1" +checksum = "28b2cd92db5cbd74e8e5028f7e27dd7aa3090e89e4f2a197cc7c8dfb69c7063b" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "atty" @@ -70,10 +76,22 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +[[package]] +name = "bitvec" +version = "0.19.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8942c8d352ae1838c9dda0b0ca2ab657696ef2232a20147cf1b30ae1a9cb4321" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + [[package]] name = "cairo-rs" version = "0.13.0" -source = "git+https://github.com/gtk-rs/gtk-rs#295e8c16d54f1b151592db41a7c3139fe762f9e7" +source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4" dependencies = [ "bitflags", "cairo-sys-rs", @@ -86,11 +104,11 @@ dependencies = [ [[package]] name = "cairo-sys-rs" version = "0.13.0" -source = "git+https://github.com/gtk-rs/gtk-rs#295e8c16d54f1b151592db41a7c3139fe762f9e7" +source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4" dependencies = [ "glib-sys", "libc", - "system-deps", + "system-deps 3.1.0", ] [[package]] @@ -105,7 +123,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" dependencies = [ - "nom", + "nom 5.1.2", +] + +[[package]] +name = "cfg-expr" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30aa9e2ffbb838c6b451db14f3cd8e63ed622bf859f9956bc93845a10fafc26a" +dependencies = [ + "smallvec", ] [[package]] @@ -155,6 +182,12 @@ dependencies = [ "cc", ] +[[package]] +name = "cookie-factory" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b" + [[package]] name = "either" version = "1.6.1" @@ -174,6 +207,27 @@ dependencies = [ "termcolor", ] +[[package]] +name = "errno" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa68f2fb9cae9d37c9b2b3584aba698a2e97f72d7aef7b9f7aa71d8b54ce46fe" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14ca354e36190500e1e1fb267c647932382b54053c50b14970856c0b00a35067" +dependencies = [ + "gcc", + "libc", +] + [[package]] name = "field-offset" version = "0.3.3" @@ -205,6 +259,12 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "funty" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" + [[package]] name = "futures-channel" version = "0.3.13" @@ -256,10 +316,16 @@ dependencies = [ "slab", ] +[[package]] +name = "gcc" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" + [[package]] name = "gdk-pixbuf" version = "0.13.0" -source = "git+https://github.com/gtk-rs/gtk-rs#295e8c16d54f1b151592db41a7c3139fe762f9e7" +source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4" dependencies = [ "gdk-pixbuf-sys", "gio", @@ -270,19 +336,19 @@ dependencies = [ [[package]] name = "gdk-pixbuf-sys" version = "0.13.0" -source = "git+https://github.com/gtk-rs/gtk-rs#295e8c16d54f1b151592db41a7c3139fe762f9e7" +source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4" dependencies = [ "gio-sys", "glib-sys", "gobject-sys", "libc", - "system-deps", + "system-deps 3.1.0", ] [[package]] name = "gdk4" version = "0.1.0" -source = "git+https://github.com/gtk-rs/gtk4-rs/#23e1862d1e9d74050cf13d5a563b8397d58e1164" +source = "git+https://github.com/gtk-rs/gtk4-rs/#2a267d9b2d895d6d1ad94ec7c72aaf51b7cb7f1c" dependencies = [ "bitflags", "cairo-rs", @@ -297,7 +363,7 @@ dependencies = [ [[package]] name = "gdk4-sys" version = "0.1.0" -source = "git+https://github.com/gtk-rs/gtk4-rs/#23e1862d1e9d74050cf13d5a563b8397d58e1164" +source = "git+https://github.com/gtk-rs/gtk4-rs/#2a267d9b2d895d6d1ad94ec7c72aaf51b7cb7f1c" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -306,13 +372,13 @@ dependencies = [ "gobject-sys", "libc", "pango-sys", - "system-deps", + "system-deps 3.1.0", ] [[package]] name = "gio" version = "0.13.0" -source = "git+https://github.com/gtk-rs/gtk-rs#295e8c16d54f1b151592db41a7c3139fe762f9e7" +source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4" dependencies = [ "bitflags", "futures-channel", @@ -328,19 +394,19 @@ dependencies = [ [[package]] name = "gio-sys" version = "0.13.0" -source = "git+https://github.com/gtk-rs/gtk-rs#295e8c16d54f1b151592db41a7c3139fe762f9e7" +source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps", + "system-deps 3.1.0", "winapi", ] [[package]] name = "glib" version = "0.13.0" -source = "git+https://github.com/gtk-rs/gtk-rs#295e8c16d54f1b151592db41a7c3139fe762f9e7" +source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4" dependencies = [ "bitflags", "futures-channel", @@ -358,7 +424,7 @@ dependencies = [ [[package]] name = "glib-macros" version = "0.13.0" -source = "git+https://github.com/gtk-rs/gtk-rs#295e8c16d54f1b151592db41a7c3139fe762f9e7" +source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4" dependencies = [ "anyhow", "heck", @@ -372,10 +438,10 @@ dependencies = [ [[package]] name = "glib-sys" version = "0.13.0" -source = "git+https://github.com/gtk-rs/gtk-rs#295e8c16d54f1b151592db41a7c3139fe762f9e7" +source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4" dependencies = [ "libc", - "system-deps", + "system-deps 3.1.0", ] [[package]] @@ -387,17 +453,17 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "gobject-sys" version = "0.13.0" -source = "git+https://github.com/gtk-rs/gtk-rs#295e8c16d54f1b151592db41a7c3139fe762f9e7" +source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4" dependencies = [ "glib-sys", "libc", - "system-deps", + "system-deps 3.1.0", ] [[package]] name = "graphene-rs" version = "0.13.0" -source = "git+https://github.com/gtk-rs/gtk-rs#295e8c16d54f1b151592db41a7c3139fe762f9e7" +source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4" dependencies = [ "glib", "graphene-sys", @@ -407,18 +473,18 @@ dependencies = [ [[package]] name = "graphene-sys" version = "0.13.0" -source = "git+https://github.com/gtk-rs/gtk-rs#295e8c16d54f1b151592db41a7c3139fe762f9e7" +source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4" dependencies = [ "glib-sys", "libc", "pkg-config", - "system-deps", + "system-deps 3.1.0", ] [[package]] name = "gsk4" version = "0.1.0" -source = "git+https://github.com/gtk-rs/gtk4-rs/#23e1862d1e9d74050cf13d5a563b8397d58e1164" +source = "git+https://github.com/gtk-rs/gtk4-rs/#2a267d9b2d895d6d1ad94ec7c72aaf51b7cb7f1c" dependencies = [ "bitflags", "cairo-rs", @@ -433,7 +499,7 @@ dependencies = [ [[package]] name = "gsk4-sys" version = "0.1.0" -source = "git+https://github.com/gtk-rs/gtk4-rs/#23e1862d1e9d74050cf13d5a563b8397d58e1164" +source = "git+https://github.com/gtk-rs/gtk4-rs/#2a267d9b2d895d6d1ad94ec7c72aaf51b7cb7f1c" dependencies = [ "cairo-sys-rs", "gdk4-sys", @@ -442,13 +508,13 @@ dependencies = [ "graphene-sys", "libc", "pango-sys", - "system-deps", + "system-deps 3.1.0", ] [[package]] name = "gtk4" version = "0.1.0" -source = "git+https://github.com/gtk-rs/gtk4-rs/#23e1862d1e9d74050cf13d5a563b8397d58e1164" +source = "git+https://github.com/gtk-rs/gtk4-rs/#2a267d9b2d895d6d1ad94ec7c72aaf51b7cb7f1c" dependencies = [ "bitflags", "cairo-rs", @@ -470,7 +536,7 @@ dependencies = [ [[package]] name = "gtk4-macros" version = "0.1.0" -source = "git+https://github.com/gtk-rs/gtk4-rs/#23e1862d1e9d74050cf13d5a563b8397d58e1164" +source = "git+https://github.com/gtk-rs/gtk4-rs/#2a267d9b2d895d6d1ad94ec7c72aaf51b7cb7f1c" dependencies = [ "anyhow", "heck", @@ -485,7 +551,7 @@ dependencies = [ [[package]] name = "gtk4-sys" version = "0.1.0" -source = "git+https://github.com/gtk-rs/gtk4-rs/#23e1862d1e9d74050cf13d5a563b8397d58e1164" +source = "git+https://github.com/gtk-rs/gtk4-rs/#2a267d9b2d895d6d1ad94ec7c72aaf51b7cb7f1c" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -497,7 +563,7 @@ dependencies = [ "gsk4-sys", "libc", "pango-sys", - "system-deps", + "system-deps 3.1.0", ] [[package]] @@ -566,10 +632,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] -name = "libc" -version = "0.2.88" +name = "lexical-core" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b07a082330a35e43f63177cc01689da34fbffa0105e1246cf0311472cac73a" +checksum = "21f866863575d0e1d654fbeeabdc927292fdf862873dc3c96c6f753357e13374" +dependencies = [ + "arrayvec", + "bitflags", + "cfg-if 1.0.0", + "ryu", + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8916b1f6ca17130ec6568feccee27c156ad12037880833a3b842a823236502e7" [[package]] name = "libloading" @@ -583,22 +662,28 @@ dependencies = [ [[package]] name = "libspa" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2d37fac3462c1ed6e836bcaa347db6d5bb3e62e410988f270121a24d9f9622" +checksum = "011074b4d7771195ec969f3053c5745d8cd22f4415e8348d3c574944b108b895" dependencies = [ "bitflags", + "cc", + "cookie-factory", + "errno", + "libc", "libspa-sys", + "nom 6.1.2", + "system-deps 2.0.3", ] [[package]] name = "libspa-sys" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "607f768296c29f09a51bab3f1a31414fe0abba295edafaa30853e87e794a773b" +checksum = "19351566b3a5adc05e491dfaef725869a0d5e3f206662a29f6ba64381d674769" dependencies = [ "bindgen", - "system-deps", + "system-deps 3.1.0", ] [[package]] @@ -618,9 +703,9 @@ checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" [[package]] name = "memoffset" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87" +checksum = "cc14fc54a812b4472b4113facc3e44d099fbc0ea2ce0551fa5c703f8edfbfd38" dependencies = [ "autocfg", ] @@ -648,6 +733,19 @@ dependencies = [ "version_check", ] +[[package]] +name = "nom" +version = "6.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2" +dependencies = [ + "bitvec", + "funty", + "lexical-core", + "memchr", + "version_check", +] + [[package]] name = "once_cell" version = "1.7.2" @@ -657,7 +755,7 @@ checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3" [[package]] name = "pango" version = "0.13.0" -source = "git+https://github.com/gtk-rs/gtk-rs#295e8c16d54f1b151592db41a7c3139fe762f9e7" +source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4" dependencies = [ "bitflags", "glib", @@ -669,12 +767,12 @@ dependencies = [ [[package]] name = "pango-sys" version = "0.13.0" -source = "git+https://github.com/gtk-rs/gtk-rs#295e8c16d54f1b151592db41a7c3139fe762f9e7" +source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps", + "system-deps 3.1.0", ] [[package]] @@ -706,9 +804,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pipewire" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0227f5f22225f4df19b6e6890b63b36d53918f267941da2332c419312a3efdd8" +checksum = "e678fc8a43e7e4d5a211c4ce16517cf0a4bca520d96d9f4df15f26193ef120aa" dependencies = [ "anyhow", "bitflags", @@ -722,13 +820,13 @@ dependencies = [ [[package]] name = "pipewire-sys" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9237480e2c4a5f316116d6e5c8a7de3cc187145a83836278a0c936c60f30d228" +checksum = "3afc6fc22dcdb1e80c445725e7f95b610640a38f591783b38c3d58133d5e2135" dependencies = [ "bindgen", "libspa-sys", - "system-deps", + "system-deps 3.1.0", ] [[package]] @@ -789,10 +887,16 @@ dependencies = [ ] [[package]] -name = "regex" -version = "1.4.4" +name = "radium" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54fd1046a3107eb58f42de31d656fee6853e5d276c455fd943742dce89fc3dd3" +checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8" + +[[package]] +name = "regex" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19" dependencies = [ "aho-corasick", "memchr", @@ -820,6 +924,12 @@ dependencies = [ "semver", ] +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + [[package]] name = "semver" version = "0.11.0" @@ -840,9 +950,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.124" +version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd761ff957cb2a45fbb9ab3da6512de9de55872866160b23c25f1a841e99d29f" +checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171" [[package]] name = "shlex" @@ -872,6 +982,12 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "strsim" version = "0.8.0" @@ -898,9 +1014,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.63" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd9bc7ccc2688b3344c2f48b9b546648b25ce0b20fc717ee7fa7981a8ca9717" +checksum = "f3a1d708c221c5a612956ef9f75b37e454e88d1f7b899fbd3a18d4252012d663" dependencies = [ "proc-macro2", "quote", @@ -909,11 +1025,27 @@ dependencies = [ [[package]] name = "system-deps" -version = "3.0.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14bd4dc3cd87e19c51f550d1b421c628074b3cf4c6daebc7ccbc8a03b237c751" +checksum = "1b59b8aafd652f3c1469f16e6c223121e8a8dbe40c71475209c1401cff3a67ef" +dependencies = [ + "heck", + "pkg-config", + "strum", + "strum_macros", + "thiserror", + "toml", + "version-compare", +] + +[[package]] +name = "system-deps" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbb68eac6404c4c357c4a9a0d6395b82c753815d4bc0c4e3114a97b035c6459" dependencies = [ "anyhow", + "cfg-expr", "heck", "itertools 0.10.0", "pkg-config", @@ -924,6 +1056,12 @@ dependencies = [ "version-compare", ] +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "termcolor" version = "1.1.2" @@ -1009,9 +1147,9 @@ checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" [[package]] name = "version_check" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" [[package]] name = "void" @@ -1058,3 +1196,9 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "wyz" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" diff --git a/Cargo.toml b/Cargo.toml index f2db71d..976cf9a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,8 +15,8 @@ categories = ["gui", "multimedia"] [dependencies] gtk = { git = "https://github.com/gtk-rs/gtk4-rs/", package = "gtk4" } -pipewire = "0.2.2" -libspa = "0.2.2" +pipewire = "0.3.0" +libspa = "0.3.0" log = "0.4.11" env_logger = "0.8.2" diff --git a/src/pipewire_connection.rs b/src/pipewire_connection.rs index 2e3da82..51750ef 100644 --- a/src/pipewire_connection.rs +++ b/src/pipewire_connection.rs @@ -33,7 +33,9 @@ impl PipewireConnection { .connect(None) .map_err(|_| "Failed to connect to pipewire core")?, ); - let registry = core.get_registry(); + let registry = core + .get_registry() + .map_err(|_| "Failed to get pipewire registry")?; let state = Rc::new(RefCell::new(state)); @@ -61,7 +63,10 @@ impl PipewireConnection { /// Receive all events from the pipewire server, sending them to the `pipewire_state` struct for processing. pub fn roundtrip(&self) { let done = Rc::new(Cell::new(false)); - let pending = self.core.sync(0); + let pending = self + .core + .sync(0) + .expect("Failed to trigger core sync event"); let done_clone = done.clone(); let loop_clone = self.mainloop.clone(); diff --git a/src/pipewire_state.rs b/src/pipewire_state.rs index 2a610bc..4bfa01c 100644 --- a/src/pipewire_state.rs +++ b/src/pipewire_state.rs @@ -1,7 +1,7 @@ use crate::{view, PipewireLink}; use gtk::WidgetExt; -use libspa::dict::ReadableDict; +use libspa::{dict::ReadableDict, ForeignDict}; use log::warn; use pipewire::{port::Direction, registry::GlobalObject, types::ObjectType}; @@ -44,7 +44,7 @@ impl PipewireState { } /// This function is called from the `PipewireConnection` struct responsible for updating this struct. - pub fn global(&mut self, global: GlobalObject) { + pub fn global(&mut self, global: &GlobalObject) { match global.type_ { ObjectType::Node => { self.add_node(global); @@ -59,7 +59,7 @@ impl PipewireState { } } - fn add_node(&mut self, node: GlobalObject) { + fn add_node(&mut self, node: &GlobalObject) { // Update graph to contain the new node. let node_widget = crate::view::Node::new( &node @@ -79,6 +79,7 @@ impl PipewireState { // FIXME: This relies on the node being passed to us by the pipwire server before its port. let media_type = node .props + .as_ref() .map(|props| { props.get("media.class").map(|class| { if class.contains("Audio") { @@ -109,9 +110,12 @@ impl PipewireState { ); } - fn add_port(&mut self, port: GlobalObject) { + fn add_port(&mut self, port: &GlobalObject) { // Update graph to contain the new port. - let props = port.props.expect("Port object is missing properties"); + let props = port + .props + .as_ref() + .expect("Port object is missing properties"); let port_label = props.get("port.name").unwrap_or_default().to_string(); let node_id: u32 = props .get("node.id") @@ -148,12 +152,15 @@ impl PipewireState { self.items.insert(port.id, Item::Port { node_id }); } - fn add_link(&mut self, link: GlobalObject) { + fn add_link(&mut self, link: &GlobalObject) { // FIXME: Links should be colored depending on the data they carry (video, audio, midi) like ports are. self.items.insert(link.id, Item::Link); // Update graph to contain the new link. - let props = link.props.expect("Link object is missing properties"); + let props = link + .props + .as_ref() + .expect("Link object is missing properties"); let input_node: u32 = props .get("link.input.node") .expect("Link has no link.input.node property")