This commit is contained in:
Joey Yakimowich-Payne 2026-01-28 12:28:28 -07:00
commit 4796f6f5d7
2 changed files with 32 additions and 4 deletions

View file

@ -78,6 +78,8 @@ class DeleteVirtualNodeCommand : public QUndoCommand
{
public:
struct VirtualNodeData {
uint32_t pipewireNodeId;
QtNodes::NodeId qtNodeId;
QString name;
QString description;
Potato::MediaClass mediaClass;
@ -109,6 +111,8 @@ public:
}
VirtualNodeData data;
data.pipewireNodeId = info->id;
data.qtNodeId = nodeId;
data.name = info->name;
data.description = info->description;
data.mediaClass = info->mediaClass;
@ -166,13 +170,38 @@ public:
return;
}
auto *controller = m_widget->m_controller;
PipeWireGraphModel *model = m_widget->m_model;
if (!model) {
if (!controller || !model) {
return;
}
for (const auto nodeId : m_nodeIds) {
model->deleteNode(nodeId);
for (int i = 0; i < m_virtualNodes.size(); ++i) {
VirtualNodeData &data = m_virtualNodes[i];
const Potato::NodeInfo *nodeInfo = model->nodeInfo(data.qtNodeId);
if (nodeInfo && nodeInfo->type == Potato::NodeType::Virtual) {
controller->destroyVirtualNode(data.pipewireNodeId);
} else {
const QVector<Potato::NodeInfo> nodes = controller->nodes();
for (const auto &node : nodes) {
if (node.name == data.name && node.type == Potato::NodeType::Virtual) {
data.pipewireNodeId = node.id;
const auto allNodes = model->allNodeIds();
for (const auto qtId : allNodes) {
const Potato::NodeInfo *info = model->nodeInfo(qtId);
if (info && info->id == node.id) {
data.qtNodeId = qtId;
break;
}
}
controller->destroyVirtualNode(node.id);
break;
}
}
}
}
}

View file

@ -104,7 +104,6 @@ bool PipeWireController::createVirtualDevice(const QString &name,
{ PW_KEY_MEDIA_CLASS, mediaClass },
{ PW_KEY_AUDIO_CHANNELS, channelsBytes.constData() },
{ PW_KEY_AUDIO_RATE, rateBytes.constData() },
{ "object.linger", "true" },
{ PW_KEY_APP_NAME, "Potato-Manager" }
};