Delete
This commit is contained in:
parent
453003cb25
commit
4796f6f5d7
2 changed files with 32 additions and 4 deletions
|
|
@ -78,6 +78,8 @@ class DeleteVirtualNodeCommand : public QUndoCommand
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct VirtualNodeData {
|
struct VirtualNodeData {
|
||||||
|
uint32_t pipewireNodeId;
|
||||||
|
QtNodes::NodeId qtNodeId;
|
||||||
QString name;
|
QString name;
|
||||||
QString description;
|
QString description;
|
||||||
Potato::MediaClass mediaClass;
|
Potato::MediaClass mediaClass;
|
||||||
|
|
@ -109,6 +111,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
VirtualNodeData data;
|
VirtualNodeData data;
|
||||||
|
data.pipewireNodeId = info->id;
|
||||||
|
data.qtNodeId = nodeId;
|
||||||
data.name = info->name;
|
data.name = info->name;
|
||||||
data.description = info->description;
|
data.description = info->description;
|
||||||
data.mediaClass = info->mediaClass;
|
data.mediaClass = info->mediaClass;
|
||||||
|
|
@ -166,13 +170,38 @@ public:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto *controller = m_widget->m_controller;
|
||||||
PipeWireGraphModel *model = m_widget->m_model;
|
PipeWireGraphModel *model = m_widget->m_model;
|
||||||
if (!model) {
|
if (!controller || !model) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto nodeId : m_nodeIds) {
|
for (int i = 0; i < m_virtualNodes.size(); ++i) {
|
||||||
model->deleteNode(nodeId);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,6 @@ bool PipeWireController::createVirtualDevice(const QString &name,
|
||||||
{ PW_KEY_MEDIA_CLASS, mediaClass },
|
{ PW_KEY_MEDIA_CLASS, mediaClass },
|
||||||
{ PW_KEY_AUDIO_CHANNELS, channelsBytes.constData() },
|
{ PW_KEY_AUDIO_CHANNELS, channelsBytes.constData() },
|
||||||
{ PW_KEY_AUDIO_RATE, rateBytes.constData() },
|
{ PW_KEY_AUDIO_RATE, rateBytes.constData() },
|
||||||
{ "object.linger", "true" },
|
|
||||||
{ PW_KEY_APP_NAME, "Potato-Manager" }
|
{ PW_KEY_APP_NAME, "Potato-Manager" }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue