Group nodes into columns by major type

This commit is contained in:
Roger Roger
2021-08-18 07:23:50 +00:00
committed by Ryuukyu
parent 2ee7bca68a
commit 487dc3b2d3
4 changed files with 73 additions and 14 deletions

View File

@@ -14,7 +14,7 @@ use pipewire::{
Context, Core, MainLoop,
};
use crate::{GtkMessage, MediaType, PipewireMessage};
use crate::{GtkMessage, MediaType, NodeType, PipewireMessage};
use state::{Item, State};
enum ProxyItem {
@@ -112,6 +112,27 @@ fn handle_node(
}
});
let media_class = |class: &str| {
if class.contains("Sink") || class.contains("Input") {
Some(NodeType::Input)
} else if class.contains("Source") || class.contains("Output") {
Some(NodeType::Output)
} else {
None
}
};
let node_type = props
.get("media.category")
.and_then(|class| {
if class.contains("Duplex") {
None
} else {
props.get("media.class").and_then(media_class)
}
})
.or_else(|| props.get("media.class").and_then(media_class));
state.borrow_mut().insert(
node.id,
Item::Node {
@@ -121,7 +142,11 @@ fn handle_node(
);
sender
.send(PipewireMessage::NodeAdded { id: node.id, name })
.send(PipewireMessage::NodeAdded {
id: node.id,
name,
node_type,
})
.expect("Failed to send message");
}